Skip to content

Commit cc5b973

Browse files
authored
Merge branch 'main' into traces_improve
2 parents 57519e8 + b9d7daf commit cc5b973

File tree

33 files changed

+3489
-289
lines changed

33 files changed

+3489
-289
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ If you are using Maven without the BOM, add this to your dependencies:
4141
<dependency>
4242
<groupId>com.google.cloud</groupId>
4343
<artifactId>google-cloud-spanner</artifactId>
44-
<version>6.101.1</version>
44+
<version>6.102.0</version>
4545
</dependency>
4646

4747
```
4848

4949
If you are using Gradle 5.x or later, add this to your dependencies:
5050

5151
```Groovy
52-
implementation platform('com.google.cloud:libraries-bom:26.69.0')
52+
implementation platform('com.google.cloud:libraries-bom:26.70.0')
5353
5454
implementation 'com.google.cloud:google-cloud-spanner'
5555
```

benchmarks/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>com.google.cloud</groupId>
2626
<artifactId>google-cloud-spanner-parent</artifactId>
27-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
27+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
2828
</parent>
2929

3030
<properties>
@@ -90,7 +90,7 @@
9090
<dependency>
9191
<groupId>com.google.cloud</groupId>
9292
<artifactId>google-cloud-spanner</artifactId>
93-
<version>6.101.1</version>
93+
<version>6.102.0</version>
9494
</dependency>
9595
<dependency>
9696
<groupId>com.google.auto.value</groupId>

generation_config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
gapic_generator_version: 2.62.3
2-
googleapis_commitish: d9a16f2feec3d0f03899e48007a02ce154fc919d
3-
libraries_bom_version: 26.69.0
2+
googleapis_commitish: 102d9f92ac6ed649a61efd9b208e4d1de278e9bb
3+
libraries_bom_version: 26.70.0
44
libraries:
55
- api_shortname: spanner
66
name_pretty: Cloud Spanner

google-cloud-spanner-bom/pom.xml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-spanner-bom</artifactId>
6-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
77
<packaging>pom</packaging>
88
<parent>
99
<groupId>com.google.cloud</groupId>
@@ -53,43 +53,43 @@
5353
<dependency>
5454
<groupId>com.google.cloud</groupId>
5555
<artifactId>google-cloud-spanner</artifactId>
56-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
56+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
5757
</dependency>
5858
<dependency>
5959
<groupId>com.google.cloud</groupId>
6060
<artifactId>google-cloud-spanner</artifactId>
6161
<type>test-jar</type>
62-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
62+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
6363
</dependency>
6464
<dependency>
6565
<groupId>com.google.api.grpc</groupId>
6666
<artifactId>grpc-google-cloud-spanner-v1</artifactId>
67-
<version>6.102.0</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
67+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
6868
</dependency>
6969
<dependency>
7070
<groupId>com.google.api.grpc</groupId>
7171
<artifactId>grpc-google-cloud-spanner-admin-instance-v1</artifactId>
72-
<version>6.102.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
72+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
7373
</dependency>
7474
<dependency>
7575
<groupId>com.google.api.grpc</groupId>
7676
<artifactId>grpc-google-cloud-spanner-admin-database-v1</artifactId>
77-
<version>6.102.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
77+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
7878
</dependency>
7979
<dependency>
8080
<groupId>com.google.api.grpc</groupId>
8181
<artifactId>proto-google-cloud-spanner-admin-instance-v1</artifactId>
82-
<version>6.102.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
82+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
8383
</dependency>
8484
<dependency>
8585
<groupId>com.google.api.grpc</groupId>
8686
<artifactId>proto-google-cloud-spanner-v1</artifactId>
87-
<version>6.102.0</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
87+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
8888
</dependency>
8989
<dependency>
9090
<groupId>com.google.api.grpc</groupId>
9191
<artifactId>proto-google-cloud-spanner-admin-database-v1</artifactId>
92-
<version>6.102.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
92+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
9393
</dependency>
9494
</dependencies>
9595
</dependencyManagement>

google-cloud-spanner-executor/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
<modelVersion>4.0.0</modelVersion>
66
<groupId>com.google.cloud</groupId>
77
<artifactId>google-cloud-spanner-executor</artifactId>
8-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
8+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
99
<packaging>jar</packaging>
1010
<name>Google Cloud Spanner Executor</name>
1111

1212
<parent>
1313
<groupId>com.google.cloud</groupId>
1414
<artifactId>google-cloud-spanner-parent</artifactId>
15-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
15+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
1616
</parent>
1717

1818
<properties>

google-cloud-spanner/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-spanner</artifactId>
6-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
77
<packaging>jar</packaging>
88
<name>Google Cloud Spanner</name>
99
<url>https://github.com/googleapis/java-spanner</url>
1010
<description>Java idiomatic client for Google Cloud Spanner.</description>
1111
<parent>
1212
<groupId>com.google.cloud</groupId>
1313
<artifactId>google-cloud-spanner-parent</artifactId>
14-
<version>6.102.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
14+
<version>6.102.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
1515
</parent>
1616
<properties>
1717
<site.installationModule>google-cloud-spanner</site.installationModule>

google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsProvider.java

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.cloud.opentelemetry.detection.AttributeKeys;
3333
import com.google.cloud.opentelemetry.detection.DetectedPlatform;
3434
import com.google.cloud.opentelemetry.detection.GCPPlatformDetector;
35+
import com.google.common.base.Strings;
3536
import com.google.common.hash.HashFunction;
3637
import com.google.common.hash.Hashing;
3738
import io.grpc.ManagedChannelBuilder;
@@ -43,11 +44,17 @@
4344
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
4445
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
4546
import io.opentelemetry.sdk.resources.Resource;
47+
import java.io.BufferedReader;
4648
import java.io.IOException;
49+
import java.io.InputStream;
50+
import java.io.InputStreamReader;
4751
import java.lang.management.ManagementFactory;
4852
import java.lang.reflect.Method;
53+
import java.net.HttpURLConnection;
4954
import java.net.InetAddress;
55+
import java.net.URL;
5056
import java.net.UnknownHostException;
57+
import java.nio.charset.StandardCharsets;
5158
import java.util.HashMap;
5259
import java.util.Map;
5360
import java.util.UUID;
@@ -63,6 +70,10 @@ final class BuiltInMetricsProvider {
6370

6471
private static String taskId;
6572

73+
private static String location;
74+
75+
private static final String default_location = "global";
76+
6677
private OpenTelemetry openTelemetry;
6778

6879
private BuiltInMetricsProvider() {}
@@ -95,6 +106,36 @@ OpenTelemetry getOrCreateOpenTelemetry(
95106
}
96107
}
97108

109+
// TODO: Remove when
110+
// https://github.com/GoogleCloudPlatform/opentelemetry-operations-java/issues/421
111+
// has been fixed.
112+
static boolean quickCheckIsRunningOnGcp() {
113+
int timeout = 5000;
114+
try {
115+
timeout =
116+
Integer.parseInt(System.getProperty("spanner.check_is_running_on_gcp_timeout", "5000"));
117+
} catch (NumberFormatException ignore) {
118+
// ignore
119+
}
120+
try {
121+
URL url = new URL("http://metadata.google.internal/computeMetadata/v1/project/project-id");
122+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
123+
connection.setConnectTimeout(timeout);
124+
connection.setRequestProperty("Metadata-Flavor", "Google");
125+
if (connection.getResponseCode() == 200
126+
&& ("Google").equals(connection.getHeaderField("Metadata-Flavor"))) {
127+
InputStream input = connection.getInputStream();
128+
try (BufferedReader reader =
129+
new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))) {
130+
return !Strings.isNullOrEmpty(reader.readLine());
131+
}
132+
}
133+
} catch (IOException ignore) {
134+
// ignore
135+
}
136+
return false;
137+
}
138+
98139
void enableGrpcMetrics(
99140
InstantiatingGrpcChannelProvider.Builder channelProviderBuilder,
100141
String projectId,
@@ -171,14 +212,20 @@ static String generateClientHash(String clientUid) {
171212
}
172213

173214
static String detectClientLocation() {
174-
GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE;
175-
DetectedPlatform detectedPlatform = detector.detectPlatform();
176-
// All platform except GKE uses "cloud_region" for region attribute.
177-
String region = detectedPlatform.getAttributes().get("cloud_region");
178-
if (detectedPlatform.getSupportedPlatform() == GOOGLE_KUBERNETES_ENGINE) {
179-
region = detectedPlatform.getAttributes().get(AttributeKeys.GKE_CLUSTER_LOCATION);
215+
if (location == null) {
216+
location = default_location;
217+
if (quickCheckIsRunningOnGcp()) {
218+
GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE;
219+
DetectedPlatform detectedPlatform = detector.detectPlatform();
220+
// All platform except GKE uses "cloud_region" for region attribute.
221+
String region = detectedPlatform.getAttributes().get("cloud_region");
222+
if (detectedPlatform.getSupportedPlatform() == GOOGLE_KUBERNETES_ENGINE) {
223+
region = detectedPlatform.getAttributes().get(AttributeKeys.GKE_CLUSTER_LOCATION);
224+
}
225+
location = region == null ? location : region;
226+
}
180227
}
181-
return region == null ? "global" : region;
228+
return location;
182229
}
183230

184231
/**

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT;
2626
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
2727
import static com.google.cloud.spanner.connection.ConnectionProperties.AUTO_PARTITION_MODE;
28+
import static com.google.cloud.spanner.connection.ConnectionProperties.BATCH_DML_UPDATE_COUNT;
2829
import static com.google.cloud.spanner.connection.ConnectionProperties.DATA_BOOST_ENABLED;
2930
import static com.google.cloud.spanner.connection.ConnectionProperties.DDL_IN_TRANSACTION_MODE;
3031
import static com.google.cloud.spanner.connection.ConnectionProperties.DEFAULT_ISOLATION_LEVEL;
@@ -1607,6 +1608,10 @@ public long getAutoBatchDmlUpdateCount() {
16071608
return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT);
16081609
}
16091610

1611+
long getDmlBatchUpdateCount() {
1612+
return getConnectionPropertyValue(BATCH_DML_UPDATE_COUNT);
1613+
}
1614+
16101615
@Override
16111616
public void setAutoBatchDmlUpdateCountVerification(boolean verification) {
16121617
setConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION, verification);
@@ -1617,6 +1622,10 @@ public boolean isAutoBatchDmlUpdateCountVerification() {
16171622
return getConnectionPropertyValue(AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION);
16181623
}
16191624

1625+
void setBatchDmlUpdateCount(long updateCount, boolean local) {
1626+
setConnectionPropertyValue(BATCH_DML_UPDATE_COUNT, updateCount, local);
1627+
}
1628+
16201629
@Override
16211630
public void setDataBoostEnabled(boolean dataBoostEnabled) {
16221631
setConnectionPropertyValue(DATA_BOOST_ENABLED, dataBoostEnabled);
@@ -2340,6 +2349,7 @@ UnitOfWork createNewUnitOfWork(
23402349
.setAutoBatchUpdateCountSupplier(this::getAutoBatchDmlUpdateCount)
23412350
.setAutoBatchUpdateCountVerificationSupplier(
23422351
this::isAutoBatchDmlUpdateCountVerification)
2352+
.setDmlBatchUpdateCountSupplier(this::getDmlBatchUpdateCount)
23432353
.setTransaction(currentUnitOfWork)
23442354
.setStatementTimeout(statementTimeout)
23452355
.withStatementExecutor(statementExecutor)

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ public class ConnectionOptions {
181181
static final boolean DEFAULT_ENABLE_END_TO_END_TRACING = false;
182182
static final boolean DEFAULT_AUTO_BATCH_DML = false;
183183
static final long DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT = 1L;
184+
static final long DEFAULT_BATCH_DML_UPDATE_COUNT = -1L;
184185
static final boolean DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = true;
185186
private static final String EXPERIMENTAL_HOST_PROJECT_ID = "default";
186187
private static final String DEFAULT_EXPERIMENTAL_HOST_INSTANCE_ID = "default";
@@ -314,6 +315,7 @@ public class ConnectionOptions {
314315
"auto_batch_dml_update_count";
315316
public static final String AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME =
316317
"auto_batch_dml_update_count_verification";
318+
public static final String BATCH_DML_UPDATE_COUNT_PROPERTY_NAME = "batch_dml_update_count";
317319

318320
private static final String GUARDED_CONNECTION_PROPERTY_ERROR_MESSAGE =
319321
"%s can only be used if the system property %s has been set to true. "

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME;
2222
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION_PROPERTY_NAME;
2323
import static com.google.cloud.spanner.connection.ConnectionOptions.AUTO_PARTITION_MODE_PROPERTY_NAME;
24+
import static com.google.cloud.spanner.connection.ConnectionOptions.BATCH_DML_UPDATE_COUNT_PROPERTY_NAME;
2425
import static com.google.cloud.spanner.connection.ConnectionOptions.CHANNEL_PROVIDER_PROPERTY_NAME;
2526
import static com.google.cloud.spanner.connection.ConnectionOptions.CLIENT_CERTIFICATE_PROPERTY_NAME;
2627
import static com.google.cloud.spanner.connection.ConnectionOptions.CLIENT_KEY_PROPERTY_NAME;
@@ -34,6 +35,7 @@
3435
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT;
3536
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION;
3637
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_AUTO_PARTITION_MODE;
38+
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_BATCH_DML_UPDATE_COUNT;
3739
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CHANNEL_PROVIDER;
3840
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CLIENT_CERTIFICATE;
3941
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_CLIENT_KEY;
@@ -747,6 +749,15 @@ public class ConnectionProperties {
747749
BOOLEANS,
748750
BooleanConverter.INSTANCE,
749751
Context.USER);
752+
static final ConnectionProperty<Long> BATCH_DML_UPDATE_COUNT =
753+
create(
754+
BATCH_DML_UPDATE_COUNT_PROPERTY_NAME,
755+
"The update count that is returned for DML statements that are executed in an "
756+
+ "explicit DML batch. The default is "
757+
+ DEFAULT_BATCH_DML_UPDATE_COUNT,
758+
DEFAULT_BATCH_DML_UPDATE_COUNT,
759+
LongConverter.INSTANCE,
760+
Context.USER);
750761

751762
static final ImmutableMap<String, ConnectionProperty<?>> CONNECTION_PROPERTIES =
752763
CONNECTION_PROPERTIES_BUILDER.build();

0 commit comments

Comments
 (0)