Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

Commit 0509374

Browse files
authored
Merge branch 'main' into protobuf-ci-v4294
2 parents 2b0fcdd + 5e26596 commit 0509374

73 files changed

Lines changed: 467 additions & 129 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/unmanaged_dependency_check.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ jobs:
1717
# repository
1818
.kokoro/build.sh
1919
- name: Unmanaged dependency check
20-
uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.52.0
20+
uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.52.1
2121
with:
2222
bom-path: google-cloud-spanner-bom/pom.xml

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
11
# Changelog
22

3+
## [6.100.0](https://github.com/googleapis/java-spanner/compare/v6.99.0...v6.100.0) (2025-09-11)
4+
5+
6+
### Features
7+
8+
* Read_lock_mode support for connections ([#4031](https://github.com/googleapis/java-spanner/issues/4031)) ([261abb4](https://github.com/googleapis/java-spanner/commit/261abb4b9c5ff00fac2d816a31926b23264657c4))
9+
10+
11+
### Bug Fixes
12+
13+
* **deps:** Update the Java code generator (gapic-generator-java) to 2.62.1 ([e9773a7](https://github.com/googleapis/java-spanner/commit/e9773a7aa27a414d56093b4e09e0f197a07b5980))
14+
* Disable afe_connectivity_error_count metric ([#4041](https://github.com/googleapis/java-spanner/issues/4041)) ([f89c1c0](https://github.com/googleapis/java-spanner/commit/f89c1c0517ba6b895f405b0085b8df41aac952be))
15+
* Skip session delete in case of multiplexed sessions ([#4029](https://github.com/googleapis/java-spanner/issues/4029)) ([8bcb09d](https://github.com/googleapis/java-spanner/commit/8bcb09d141fe986c92ccacbaa9a45302c5c8e79d))
16+
17+
18+
### Dependencies
19+
20+
* Update dependency com.google.cloud:sdk-platform-java-config to v3.52.1 ([#4034](https://github.com/googleapis/java-spanner/issues/4034)) ([13bfa7c](https://github.com/googleapis/java-spanner/commit/13bfa7c68c7ea887e679fb5504dceb85cbb43cb9))
21+
22+
23+
### Documentation
24+
25+
* A comment for field `ranges` in message `.google.spanner.v1.KeySet` is changed ([e9773a7](https://github.com/googleapis/java-spanner/commit/e9773a7aa27a414d56093b4e09e0f197a07b5980))
26+
327
## [6.99.0](https://github.com/googleapis/java-spanner/compare/v6.98.1...v6.99.0) (2025-08-26)
428

529

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ 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.93.0</version>
44+
<version>6.99.0</version>
4545
</dependency>
4646

4747
```
@@ -56,13 +56,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
5656
If you are using Gradle without BOM, add this to your dependencies:
5757

5858
```Groovy
59-
implementation 'com.google.cloud:google-cloud-spanner:6.99.0'
59+
implementation 'com.google.cloud:google-cloud-spanner:6.100.0'
6060
```
6161

6262
If you are using SBT, add this to your dependencies:
6363

6464
```Scala
65-
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.99.0"
65+
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.100.0"
6666
```
6767

6868
## Authentication
@@ -731,7 +731,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
731731
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
732732
[stability-image]: https://img.shields.io/badge/stability-stable-green
733733
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
734-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.99.0
734+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.100.0
735735
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
736736
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
737737
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

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.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
27+
<version>6.100.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
2828
</parent>
2929

3030
<properties>
@@ -97,7 +97,7 @@
9797
<dependency>
9898
<groupId>com.google.cloud</groupId>
9999
<artifactId>google-cloud-spanner</artifactId>
100-
<version>6.93.0</version>
100+
<version>6.99.0</version>
101101
</dependency>
102102
<dependency>
103103
<groupId>com.google.auto.value</groupId>

google-cloud-spanner-bom/pom.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-spanner-bom</artifactId>
6-
<version>6.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.100.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
77
<packaging>pom</packaging>
88
<parent>
99
<groupId>com.google.cloud</groupId>
1010
<artifactId>sdk-platform-java-config</artifactId>
11-
<version>3.52.0</version>
11+
<version>3.52.1</version>
1212
</parent>
1313

1414
<name>Google Cloud Spanner BOM</name>
@@ -53,43 +53,43 @@
5353
<dependency>
5454
<groupId>com.google.cloud</groupId>
5555
<artifactId>google-cloud-spanner</artifactId>
56-
<version>6.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
56+
<version>6.100.0</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.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
62+
<version>6.100.0</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.99.0</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
67+
<version>6.100.0</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.99.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
72+
<version>6.100.0</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.99.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
77+
<version>6.100.0</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.99.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
82+
<version>6.100.0</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.99.0</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
87+
<version>6.100.0</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.99.0</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
92+
<version>6.100.0</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.99.0</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
8+
<version>6.100.0</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.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
15+
<version>6.100.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1616
</parent>
1717

1818
<properties>

google-cloud-spanner/pom.xml

Lines changed: 16 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.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.100.0</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.99.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
14+
<version>6.100.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1515
</parent>
1616
<properties>
1717
<site.installationModule>google-cloud-spanner</site.installationModule>
@@ -369,6 +369,20 @@
369369
<scope>test</scope>
370370
</dependency>
371371

372+
<!-- Used to work around https://github.com/googleapis/sdk-platform-java/issues/3911 -->
373+
<dependency>
374+
<groupId>net.bytebuddy</groupId>
375+
<artifactId>byte-buddy</artifactId>
376+
<version>1.17.7</version>
377+
<scope>test</scope>
378+
</dependency>
379+
<dependency>
380+
<groupId>net.bytebuddy</groupId>
381+
<artifactId>byte-buddy-agent</artifactId>
382+
<version>1.17.7</version>
383+
<scope>test</scope>
384+
</dependency>
385+
372386
<!-- Executor tests - The 'provided' scope is overwritten to compile time scope for the profile 'executor-tests' -->
373387
<dependency>
374388
<groupId>com.google.api.grpc</groupId>

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,11 @@ protected SpannerOptions(Builder builder) {
814814
openTelemetry = builder.openTelemetry;
815815
enableApiTracing = builder.enableApiTracing;
816816
enableExtendedTracing = builder.enableExtendedTracing;
817-
enableBuiltInMetrics = builder.enableBuiltInMetrics;
817+
if (builder.isExperimentalHost) {
818+
enableBuiltInMetrics = false;
819+
} else {
820+
enableBuiltInMetrics = builder.enableBuiltInMetrics;
821+
}
818822
enableEndToEndTracing = builder.enableEndToEndTracing;
819823
monitoringHost = builder.monitoringHost;
820824
defaultTransactionOptions = builder.defaultTransactionOptions;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1716,7 +1716,10 @@ public final int hashCode() {
17161716
* while calculating valueHash of Float32 type. Note that this is not applicable for composite
17171717
* types containing FLOAT32.
17181718
*/
1719-
if (type.getCode() == Type.Code.FLOAT32 && !isNull && Float.isNaN(getFloat32())) {
1719+
if (type != null
1720+
&& type.getCode() == Type.Code.FLOAT32
1721+
&& !isNull
1722+
&& Float.isNaN(getFloat32())) {
17201723
typeToHash = Type.float64();
17211724
}
17221725

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,18 @@
3939
import com.google.cloud.spanner.Struct;
4040
import com.google.cloud.spanner.Type.StructField;
4141
import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement;
42-
import com.google.cloud.spanner.connection.ReadWriteTransaction.Builder;
4342
import com.google.cloud.spanner.connection.StatementExecutor.StatementTimeout;
4443
import com.google.common.base.Preconditions;
4544
import com.google.common.collect.ImmutableList;
4645
import com.google.common.util.concurrent.MoreExecutors;
4746
import io.grpc.Context;
47+
import io.grpc.Deadline;
4848
import io.grpc.MethodDescriptor;
4949
import io.grpc.Status;
5050
import io.opentelemetry.api.common.AttributeKey;
5151
import io.opentelemetry.api.trace.Span;
5252
import io.opentelemetry.context.Scope;
53+
import java.time.Duration;
5354
import java.util.Collection;
5455
import java.util.Collections;
5556
import java.util.HashSet;
@@ -358,6 +359,9 @@ <T> ApiFuture<T> executeStatementAsync(
358359
}
359360
Context context = Context.current();
360361
if (statementTimeout.hasTimeout() && !applyStatementTimeoutToMethods.isEmpty()) {
362+
Deadline deadline =
363+
Deadline.after(
364+
statementTimeout.getTimeoutValue(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS);
361365
context =
362366
context.withValue(
363367
SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY,
@@ -367,8 +371,14 @@ public <ReqT, RespT> ApiCallContext configure(
367371
ApiCallContext context, ReqT request, MethodDescriptor<ReqT, RespT> method) {
368372
if (statementTimeout.hasTimeout()
369373
&& applyStatementTimeoutToMethods.contains(method)) {
374+
// Calculate the remaining timeout. This method could be called multiple times
375+
// if the transaction is retried.
376+
long remainingTimeout = deadline.timeRemaining(TimeUnit.NANOSECONDS);
377+
if (remainingTimeout <= 0) {
378+
remainingTimeout = 1;
379+
}
370380
return GrpcCallContext.createDefault()
371-
.withTimeoutDuration(statementTimeout.asDuration());
381+
.withTimeoutDuration(Duration.ofNanos(remainingTimeout));
372382
}
373383
return null;
374384
}

0 commit comments

Comments
 (0)