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

Commit 3a7df66

Browse files
committed
Merge branch 'main' into PR #4026 to update
2 parents 33d1e4e + 5d524f9 commit 3a7df66

19 files changed

Lines changed: 103 additions & 81 deletions

File tree

CHANGELOG.md

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

3+
## [6.104.0](https://github.com/googleapis/java-spanner/compare/v6.103.0...v6.104.0) (2025-12-03)
4+
5+
6+
### Features
7+
8+
* Include PostgreSQL error code in exceptions ([#4236](https://github.com/googleapis/java-spanner/issues/4236)) ([5874f8b](https://github.com/googleapis/java-spanner/commit/5874f8b3e65adc3e78832866ebe667cd746e2d7f))
9+
10+
11+
### Bug Fixes
12+
13+
* Backslash at end of string literal was misinterpreted ([#4246](https://github.com/googleapis/java-spanner/issues/4246)) ([477ca51](https://github.com/googleapis/java-spanner/commit/477ca51baf6cd1a0a5773bd53677f64195100ae2))
14+
* Fix transaction tag issue with the blind-write ([#4243](https://github.com/googleapis/java-spanner/issues/4243)) ([cf2ba69](https://github.com/googleapis/java-spanner/commit/cf2ba695cdb4038dc8e3ca3e9859231a2203da60))
15+
316
## [6.103.0](https://github.com/googleapis/java-spanner/compare/v6.102.1...v6.103.0) (2025-11-17)
417

518

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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.103.0'
59+
implementation 'com.google.cloud:google-cloud-spanner:6.104.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.103.0"
65+
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.104.0"
6666
```
6767

6868
## Authentication
@@ -567,7 +567,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
567567
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
568568
[stability-image]: https://img.shields.io/badge/stability-stable-green
569569
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
570-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.103.0
570+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.104.0
571571
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
572572
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
573573
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

benchmarks/pom.xml

Lines changed: 1 addition & 1 deletion
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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
27+
<version>6.104.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
2828
</parent>
2929

3030
<properties>

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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.104.0</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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
56+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
62+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-v1:current} -->
67+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
72+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
77+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-instance-v1:current} -->
82+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-v1:current} -->
87+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-spanner-admin-database-v1:current} -->
92+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner-executor:current} -->
8+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
15+
<version>6.104.0</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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
6+
<version>6.104.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.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
14+
<version>6.104.0</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/spi/v1/HeaderInterceptor.java

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -159,38 +159,50 @@ private void processHeader(
159159
// updated to handle multiple metrics gracefully.
160160

161161
Map<String, Float> serverTimingMetrics = parseServerTimingHeader(serverTiming);
162-
if (serverTimingMetrics.containsKey(GFE_TIMING_HEADER)) {
163-
float gfeLatency = serverTimingMetrics.get(GFE_TIMING_HEADER);
162+
Float gfeLatency = serverTimingMetrics.get(GFE_TIMING_HEADER);
163+
boolean isAfeEnabled = GapicSpannerRpc.isEnableAFEServerTiming();
164+
Float afeLatency = isAfeEnabled ? serverTimingMetrics.get(AFE_TIMING_HEADER) : null;
164165

165-
measureMap.put(SPANNER_GFE_LATENCY, (long) gfeLatency);
166+
// Record OpenCensus and Custom OpenTelemetry Metrics
167+
if (gfeLatency != null) {
168+
long gfeVal = gfeLatency.longValue();
169+
measureMap.put(SPANNER_GFE_LATENCY, gfeVal);
166170
measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 0L);
167-
measureMap.record(tagContext);
168-
169-
spannerRpcMetrics.recordGfeLatency((long) gfeLatency, attributes);
171+
spannerRpcMetrics.recordGfeLatency(gfeVal, attributes);
170172
spannerRpcMetrics.recordGfeHeaderMissingCount(0L, attributes);
171-
if (compositeTracer != null && !isDirectPathUsed) {
172-
compositeTracer.recordGFELatency(gfeLatency);
173-
}
174-
if (span != null) {
175-
span.setAttribute("gfe_latency", String.valueOf(gfeLatency));
176-
}
177173
} else {
178-
measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L).record(tagContext);
174+
measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L);
179175
spannerRpcMetrics.recordGfeHeaderMissingCount(1L, attributes);
180-
if (compositeTracer != null && !isDirectPathUsed) {
181-
compositeTracer.recordGfeHeaderMissingCount(1L);
176+
}
177+
measureMap.record(tagContext);
178+
179+
// Record Built-in Metrics
180+
if (compositeTracer != null) {
181+
// GFE Latency Metrics
182+
if (!isDirectPathUsed) {
183+
if (gfeLatency != null) {
184+
compositeTracer.recordGFELatency(gfeLatency);
185+
} else {
186+
compositeTracer.recordGfeHeaderMissingCount(1L);
187+
}
188+
}
189+
// AFE Tracing
190+
if (isAfeEnabled) {
191+
if (afeLatency != null) {
192+
compositeTracer.recordAFELatency(afeLatency);
193+
} else {
194+
compositeTracer.recordAfeHeaderMissingCount(1L);
195+
}
182196
}
183197
}
184198

185-
// Record AFE metrics
186-
if (compositeTracer != null && GapicSpannerRpc.isEnableAFEServerTiming()) {
187-
if (serverTimingMetrics.containsKey(AFE_TIMING_HEADER)) {
188-
float afeLatency = serverTimingMetrics.get(AFE_TIMING_HEADER);
189-
compositeTracer.recordAFELatency(afeLatency);
190-
} else {
191-
// Disable afe_connectivity_error_count metric as AFE header is disabled in backend
192-
// currently.
193-
// compositeTracer.recordAfeHeaderMissingCount(1L);
199+
// Record Span Attributes
200+
if (span != null) {
201+
if (gfeLatency != null) {
202+
span.setAttribute("gfe_latency", gfeLatency.toString());
203+
}
204+
if (afeLatency != null) {
205+
span.setAttribute("afe_latency", afeLatency.toString());
194206
}
195207
}
196208
} catch (NumberFormatException e) {

google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,6 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
390390

391391
assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME));
392392
assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME));
393-
// Metric is disabled currently
394-
assertFalse(
395-
checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
396393

397394
spannerNoHeader.close();
398395
serverNoHeader.shutdown();

grpc-google-cloud-spanner-admin-database-v1/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.google.api.grpc</groupId>
66
<artifactId>grpc-google-cloud-spanner-admin-database-v1</artifactId>
7-
<version>6.103.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
7+
<version>6.104.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-database-v1:current} -->
88
<name>grpc-google-cloud-spanner-admin-database-v1</name>
99
<description>GRPC library for grpc-google-cloud-spanner-admin-database-v1</description>
1010
<parent>
1111
<groupId>com.google.cloud</groupId>
1212
<artifactId>google-cloud-spanner-parent</artifactId>
13-
<version>6.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
13+
<version>6.104.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1414
</parent>
1515
<dependencies>
1616
<dependency>

grpc-google-cloud-spanner-admin-instance-v1/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.google.api.grpc</groupId>
66
<artifactId>grpc-google-cloud-spanner-admin-instance-v1</artifactId>
7-
<version>6.103.1-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
7+
<version>6.104.0</version><!-- {x-version-update:grpc-google-cloud-spanner-admin-instance-v1:current} -->
88
<name>grpc-google-cloud-spanner-admin-instance-v1</name>
99
<description>GRPC library for grpc-google-cloud-spanner-admin-instance-v1</description>
1010
<parent>
1111
<groupId>com.google.cloud</groupId>
1212
<artifactId>google-cloud-spanner-parent</artifactId>
13-
<version>6.103.1-SNAPSHOT</version><!-- {x-version-update:google-cloud-spanner:current} -->
13+
<version>6.104.0</version><!-- {x-version-update:google-cloud-spanner:current} -->
1414
</parent>
1515
<dependencies>
1616
<dependency>

0 commit comments

Comments
 (0)