From f680c9e5cc8407e91209be2f9ed8f576e8b06b49 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Wed, 30 Apr 2025 17:44:20 +0200
Subject: [PATCH 1/9] chore(main): release 6.92.1-SNAPSHOT (#3842)
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
---
benchmarks/pom.xml | 2 +-
google-cloud-spanner-bom/pom.xml | 18 ++++++++---------
google-cloud-spanner-executor/pom.xml | 4 ++--
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-executor-v1/pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 20 +++++++++----------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 20 +++++++++----------
15 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 956746838ba..61a13d2ff5f 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -24,7 +24,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index d2a9d4d1dae..356aa51b9d8 100644
--- a/google-cloud-spanner-bom/pom.xml
+++ b/google-cloud-spanner-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner-bom
- 6.92.0
+ 6.92.1-SNAPSHOT
pom
com.google.cloud
@@ -53,43 +53,43 @@
com.google.cloud
google-cloud-spanner
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
test-jar
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index 9fb36618452..9f25a583a4f 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -5,14 +5,14 @@
4.0.0
com.google.cloud
google-cloud-spanner-executor
- 6.92.0
+ 6.92.1-SNAPSHOT
jar
Google Cloud Spanner Executor
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index d50d7da9240..15911018d49 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner
- 6.92.0
+ 6.92.1-SNAPSHOT
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
google-cloud-spanner
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index 4bdf9cd1a32..945eda59f56 100644
--- a/grpc-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
grpc-google-cloud-spanner-admin-database-v1
GRPC library for grpc-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index d6b37aef339..977f31c1529 100644
--- a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
grpc-google-cloud-spanner-admin-instance-v1
GRPC library for grpc-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-executor-v1/pom.xml b/grpc-google-cloud-spanner-executor-v1/pom.xml
index af169c7ebf6..4da1b80ccbe 100644
--- a/grpc-google-cloud-spanner-executor-v1/pom.xml
+++ b/grpc-google-cloud-spanner-executor-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-executor-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
grpc-google-cloud-spanner-executor-v1
GRPC library for google-cloud-spanner
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 5dbade34b54..8d478945b85 100644
--- a/grpc-google-cloud-spanner-v1/pom.xml
+++ b/grpc-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index 0568524e0ae..064767ba74c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.92.0
+ 6.92.1-SNAPSHOT
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -61,47 +61,47 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-executor-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-executor-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 8726fd7c7d6..788d278114f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
proto-google-cloud-spanner-admin-database-v1
PROTO library for proto-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index 6cce5ec3c51..d81fbe63350 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
proto-google-cloud-spanner-admin-instance-v1
PROTO library for proto-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-executor-v1/pom.xml b/proto-google-cloud-spanner-executor-v1/pom.xml
index 1ac560dfefd..701c635e3ef 100644
--- a/proto-google-cloud-spanner-executor-v1/pom.xml
+++ b/proto-google-cloud-spanner-executor-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-executor-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
proto-google-cloud-spanner-executor-v1
Proto library for google-cloud-spanner
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 1b286d1a826..6bdd874682d 100644
--- a/proto-google-cloud-spanner-v1/pom.xml
+++ b/proto-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.0
+ 6.92.1-SNAPSHOT
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 40615bc5b7b..1d84c1ab5fb 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -32,7 +32,7 @@
com.google.cloud
google-cloud-spanner
- 6.92.0
+ 6.92.1-SNAPSHOT
diff --git a/versions.txt b/versions.txt
index 1e811eeeb36..550467d1d2f 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,13 +1,13 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.0
-proto-google-cloud-spanner-v1:6.92.0:6.92.0
-proto-google-cloud-spanner-admin-database-v1:6.92.0:6.92.0
-grpc-google-cloud-spanner-v1:6.92.0:6.92.0
-grpc-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.0
-grpc-google-cloud-spanner-admin-database-v1:6.92.0:6.92.0
-google-cloud-spanner:6.92.0:6.92.0
-google-cloud-spanner-executor:6.92.0:6.92.0
-proto-google-cloud-spanner-executor-v1:6.92.0:6.92.0
-grpc-google-cloud-spanner-executor-v1:6.92.0:6.92.0
+proto-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.1-SNAPSHOT
+proto-google-cloud-spanner-v1:6.92.0:6.92.1-SNAPSHOT
+proto-google-cloud-spanner-admin-database-v1:6.92.0:6.92.1-SNAPSHOT
+grpc-google-cloud-spanner-v1:6.92.0:6.92.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-database-v1:6.92.0:6.92.1-SNAPSHOT
+google-cloud-spanner:6.92.0:6.92.1-SNAPSHOT
+google-cloud-spanner-executor:6.92.0:6.92.1-SNAPSHOT
+proto-google-cloud-spanner-executor-v1:6.92.0:6.92.1-SNAPSHOT
+grpc-google-cloud-spanner-executor-v1:6.92.0:6.92.1-SNAPSHOT
From 85a0820505889ae6482a9e4f845cd53430dd6b44 Mon Sep 17 00:00:00 2001
From: Liam Miller-Cushon
Date: Wed, 30 Apr 2025 19:33:35 +0200
Subject: [PATCH 2/9] fix: non-ASCII Unicode characters in code (#3844)
Co-authored-by: rahul2393
---
.../src/main/java/com/google/cloud/spanner/StructReader.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java
index 801dc8863b5..f690011f389 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/StructReader.java
@@ -648,7 +648,7 @@ default List getProtoEnumList(
List getUuidList(int columnIndex);
- List getUuidList(String columnNameĆ);
+ List getUuidList(String columnName);
/**
* @param columnIndex index of the column
From 32b2373d62cac3047d9686c56af278c706d7c488 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?=
Date: Wed, 30 Apr 2025 21:34:35 +0200
Subject: [PATCH 3/9] fix: only close and return sessions once (#3846)
* fix: only close and return sessions once
Closing a pooled session multiple times would cause it to be added to the pool
multiple times. This fix prevents this by keeping track of the state of a session
that has been checked out.
* chore: generate libraries at Wed Apr 30 16:40:04 UTC 2025
---------
Co-authored-by: cloud-java-bot
---
.../com/google/cloud/spanner/SessionPool.java | 16 ++++++++
.../spanner/AsyncTransactionManagerTest.java | 38 +++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index 0b55a893aca..fa4e1d03d0c 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -1314,6 +1314,7 @@ default void addListener(Runnable listener, Executor exec) {}
class PooledSessionFuture extends SimpleForwardingListenableFuture
implements SessionFuture {
+ private boolean closed;
private volatile LeakedSessionException leakedException;
private final AtomicBoolean inUse = new AtomicBoolean();
private final CountDownLatch initialized = new CountDownLatch(1);
@@ -1331,6 +1332,7 @@ void clearLeakedException() {
}
private void markCheckedOut() {
+
if (options.isTrackStackTraceOfSessionCheckout()) {
this.leakedException = new LeakedSessionException();
synchronized (SessionPool.this.lock) {
@@ -1520,6 +1522,13 @@ public void close() {
@Override
public ApiFuture asyncClose() {
+ synchronized (this) {
+ // Don't add the session twice to the pool if a resource is being closed multiple times.
+ if (closed) {
+ return ApiFutures.immediateFuture(Empty.getDefaultInstance());
+ }
+ closed = true;
+ }
try {
PooledSession delegate = getOrNull();
if (delegate != null) {
@@ -3142,6 +3151,13 @@ int totalSessions() {
}
}
+ @VisibleForTesting
+ int numSessionsInPool() {
+ synchronized (lock) {
+ return sessions.size();
+ }
+ }
+
private ApiFuture closeSessionAsync(final PooledSession sess) {
ApiFuture res = sess.delegate.asyncClose();
res.addListener(
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java
index 6a5d77e20e7..68cf63d872f 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncTransactionManagerTest.java
@@ -1237,6 +1237,44 @@ public void testAbandonedAsyncTransactionManager_rollbackFails() throws Exceptio
assertTrue(gotException);
}
+ @Test
+ public void testRollbackAndCloseEmptyTransaction() throws Exception {
+ assumeFalse(
+ spannerWithEmptySessionPool
+ .getOptions()
+ .getSessionPoolOptions()
+ .getUseMultiplexedSessionForRW());
+
+ DatabaseClientImpl client = (DatabaseClientImpl) clientWithEmptySessionPool();
+
+ // Create a transaction manager and start a transaction. This should create a session and
+ // check it out of the pool.
+ AsyncTransactionManager manager = client.transactionManagerAsync();
+ manager.beginAsync().get();
+ assertEquals(0, client.pool.numSessionsInPool());
+ assertEquals(1, client.pool.totalSessions());
+
+ // Rolling back an empty transaction will return the session to the pool.
+ manager.rollbackAsync().get();
+ assertEquals(1, client.pool.numSessionsInPool());
+ // Closing the transaction manager should not cause the session to be added to the pool again.
+ manager.close();
+ // The total number of sessions does not change.
+ assertEquals(1, client.pool.numSessionsInPool());
+
+ // Check out 2 sessions. Make sure that the pool really created a new session, and did not
+ // return the same session twice.
+ AsyncTransactionManager manager1 = client.transactionManagerAsync();
+ AsyncTransactionManager manager2 = client.transactionManagerAsync();
+ manager1.beginAsync().get();
+ manager2.beginAsync().get();
+ assertEquals(2, client.pool.totalSessions());
+ assertEquals(0, client.pool.numSessionsInPool());
+ manager1.close();
+ manager2.close();
+ assertEquals(2, client.pool.numSessionsInPool());
+ }
+
private boolean isMultiplexedSessionsEnabled() {
if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) {
return false;
From 23b985c9a04837b0b38f2cfc5d96469e1d664d67 Mon Sep 17 00:00:00 2001
From: rahul2393
Date: Fri, 9 May 2025 09:21:55 +0530
Subject: [PATCH 4/9] chore(deps): update all deps (#3853)
* chore(deps): update all deps
* run check style with java:11
* chore: generate libraries at Fri May 9 03:15:03 UTC 2025
---------
Co-authored-by: cloud-java-bot
---
.github/workflows/hermetic_library_generation.yaml | 2 +-
.github/workflows/samples.yaml | 2 +-
.github/workflows/unmanaged_dependency_check.yaml | 2 +-
.kokoro/presubmit/graalvm-native-a.cfg | 2 +-
.kokoro/presubmit/graalvm-native-b.cfg | 2 +-
.kokoro/presubmit/graalvm-native-c.cfg | 2 +-
benchmarks/pom.xml | 2 +-
generation_config.yaml | 4 ++--
google-cloud-spanner-bom/pom.xml | 2 +-
google-cloud-spanner-executor/pom.xml | 4 ++--
google-cloud-spanner/pom.xml | 10 +++++-----
pom.xml | 2 +-
samples/install-without-bom/pom.xml | 6 +++---
samples/pom.xml | 4 ++--
samples/snapshot/pom.xml | 6 +++---
samples/snippets/pom.xml | 2 +-
16 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml
index 6b856abdef3..f0b1369c88b 100644
--- a/.github/workflows/hermetic_library_generation.yaml
+++ b/.github/workflows/hermetic_library_generation.yaml
@@ -37,7 +37,7 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
- - uses: googleapis/sdk-platform-java/.github/scripts@v2.56.2
+ - uses: googleapis/sdk-platform-java/.github/scripts@v2.57.0
if: env.SHOULD_RUN == 'true'
with:
base_ref: ${{ github.base_ref }}
diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml
index 36e725f6aa2..37e2b4054f9 100644
--- a/.github/workflows/samples.yaml
+++ b/.github/workflows/samples.yaml
@@ -8,7 +8,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-java@v1
with:
- java-version: 8
+ java-version: 11
- name: Run checkstyle
run: mvn -P lint --quiet --batch-mode checkstyle:check
working-directory: samples/snippets
diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index eaf32470034..5663b4b2fe4 100644
--- a/.github/workflows/unmanaged_dependency_check.yaml
+++ b/.github/workflows/unmanaged_dependency_check.yaml
@@ -17,6 +17,6 @@ jobs:
# repository
.kokoro/build.sh
- name: Unmanaged dependency check
- uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.46.2
+ uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.47.0
with:
bom-path: google-cloud-spanner-bom/pom.xml
diff --git a/.kokoro/presubmit/graalvm-native-a.cfg b/.kokoro/presubmit/graalvm-native-a.cfg
index d0c29521333..24e5053a5b7 100644
--- a/.kokoro/presubmit/graalvm-native-a.cfg
+++ b/.kokoro/presubmit/graalvm-native-a.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.47.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-b.cfg b/.kokoro/presubmit/graalvm-native-b.cfg
index 962c305ff7f..ae35f6cb21f 100644
--- a/.kokoro/presubmit/graalvm-native-b.cfg
+++ b/.kokoro/presubmit/graalvm-native-b.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.47.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-c.cfg b/.kokoro/presubmit/graalvm-native-c.cfg
index 87b5dff65a3..660f1ee7eae 100644
--- a/.kokoro/presubmit/graalvm-native-c.cfg
+++ b/.kokoro/presubmit/graalvm-native-c.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current}
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.47.0" # {x-version-update:google-cloud-shared-dependencies:current}
}
env_vars: {
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 61a13d2ff5f..8161b71d948 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -34,7 +34,7 @@
UTF-8
UTF-8
2.10.1
- 1.45.0
+ 1.49.0
diff --git a/generation_config.yaml b/generation_config.yaml
index 287eba4ba07..5b109886e30 100644
--- a/generation_config.yaml
+++ b/generation_config.yaml
@@ -1,5 +1,5 @@
-gapic_generator_version: 2.56.2
-googleapis_commitish: 2eec62dc7ed836c8d9f73fb313afb8f48c361bef
+gapic_generator_version: 2.57.0
+googleapis_commitish: 69d549c7eaccfc9584fd64c38c746a48ef635f60
libraries_bom_version: 26.59.0
libraries:
- api_shortname: spanner
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index 356aa51b9d8..35106e28b92 100644
--- a/google-cloud-spanner-bom/pom.xml
+++ b/google-cloud-spanner-bom/pom.xml
@@ -8,7 +8,7 @@
com.google.cloud
sdk-platform-java-config
- 3.46.2
+ 3.47.0
Google Cloud Spanner BOM
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index 9f25a583a4f..b0f825994b5 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -64,7 +64,7 @@
com.google.cloud
google-cloud-trace
- 2.53.0
+ 2.62.0
io.grpc
@@ -137,7 +137,7 @@
com.google.api.grpc
proto-google-cloud-trace-v1
- 2.53.0
+ 2.62.0
com.google.api.grpc
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 15911018d49..f0878cceaa3 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -269,12 +269,12 @@
com.google.cloud
google-cloud-monitoring
- 3.54.0
+ 3.63.0
com.google.api.grpc
proto-google-cloud-monitoring-v3
- 3.57.0
+ 3.63.0
com.google.auth
@@ -421,7 +421,7 @@
org.json
json
- 20240303
+ 20250107
test
@@ -468,13 +468,13 @@
com.google.cloud
google-cloud-trace
- 2.51.0
+ 2.62.0
test
com.google.api.grpc
proto-google-cloud-trace-v1
- 2.51.0
+ 2.62.0
test
diff --git a/pom.xml b/pom.xml
index 064767ba74c..c10f0f8963f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
com.google.cloud
sdk-platform-java-config
- 3.46.2
+ 3.47.0
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 065b9b81b63..ce04def79f3 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -14,7 +14,7 @@
com.google.cloud.samples
shared-configuration
- 1.2.0
+ 1.2.2
@@ -23,8 +23,8 @@
1.8
UTF-8
0.31.1
- 2.54.0
- 3.54.0
+ 2.62.0
+ 3.63.0
diff --git a/samples/pom.xml b/samples/pom.xml
index 7f027400da9..d72a58cea5d 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -18,7 +18,7 @@
com.google.cloud.samples
shared-configuration
- 1.2.0
+ 1.2.2
@@ -39,7 +39,7 @@
org.apache.maven.plugins
maven-deploy-plugin
- 3.1.3
+ 3.1.4
true
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 1d84c1ab5fb..76dff3a8acf 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -14,7 +14,7 @@
com.google.cloud.samples
shared-configuration
- 1.2.0
+ 1.2.2
@@ -23,8 +23,8 @@
1.8
UTF-8
0.31.1
- 2.54.0
- 3.54.0
+ 2.62.0
+ 3.63.0
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 71949e27f82..dfa87cc1860 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -16,7 +16,7 @@
com.google.cloud.samples
shared-configuration
- 1.2.0
+ 1.2.2
From da8dd8da3171a073d7b450d4413936351a4c1060 Mon Sep 17 00:00:00 2001
From: surbhigarg92
Date: Fri, 9 May 2025 10:31:26 +0530
Subject: [PATCH 5/9] fix: change server timing duration attribute to float as
per w3c (#3851)
* fix: change server timing duration attribute to float as per w3c
* fix clirr
* remove deprecated warning
---------
Co-authored-by: rahul yadav
Co-authored-by: rahul2393
---
.../cloud/spanner/BuiltInMetricsRecorder.java | 4 +--
.../cloud/spanner/BuiltInMetricsTracer.java | 8 ++---
.../google/cloud/spanner/CompositeTracer.java | 20 +++++++++++--
.../spanner/spi/v1/HeaderInterceptor.java | 18 ++++++------
.../spanner/AbstractNettyMockServerTest.java | 13 ++++-----
...OpenTelemetryBuiltInMetricsTracerTest.java | 29 ++++++++++---------
6 files changed, 54 insertions(+), 38 deletions(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java
index d8ee9fc416e..2eb7c8d2971 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java
@@ -97,8 +97,8 @@ class BuiltInMetricsRecorder extends OpenTelemetryMetricsRecorder {
* @param attributes Map of the attributes to store
*/
void recordServerTimingHeaderMetrics(
- Long gfeLatency,
- Long afeLatency,
+ Float gfeLatency,
+ Float afeLatency,
Long gfeHeaderMissingCount,
Long afeHeaderMissingCount,
Map attributes) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java
index 488cf3890c3..f94af1160e4 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java
@@ -37,8 +37,8 @@ class BuiltInMetricsTracer extends MetricsTracer implements ApiTracer {
private final BuiltInMetricsRecorder builtInOpenTelemetryMetricsRecorder;
// These are RPC specific attributes and pertain to a specific API Trace
private final Map attributes = new HashMap<>();
- private Long gfeLatency = null;
- private Long afeLatency = null;
+ private Float gfeLatency = null;
+ private Float afeLatency = null;
private long gfeHeaderMissingCount = 0;
private long afeHeaderMissingCount = 0;
@@ -119,11 +119,11 @@ public void attemptPermanentFailure(Throwable error) {
gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes);
}
- void recordGFELatency(Long gfeLatency) {
+ void recordGFELatency(Float gfeLatency) {
this.gfeLatency = gfeLatency;
}
- void recordAFELatency(Long afeLatency) {
+ void recordAFELatency(Float afeLatency) {
this.afeLatency = afeLatency;
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java
index afc202342d8..5d3b416788f 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java
@@ -194,7 +194,7 @@ public void addAttributes(Map attributes) {
public void recordGFELatency(Long gfeLatency) {
for (ApiTracer child : children) {
if (child instanceof BuiltInMetricsTracer) {
- ((BuiltInMetricsTracer) child).recordGFELatency(gfeLatency);
+ ((BuiltInMetricsTracer) child).recordGFELatency(Float.valueOf(gfeLatency));
}
}
}
@@ -210,7 +210,7 @@ public void recordGfeHeaderMissingCount(Long value) {
public void recordAFELatency(Long afeLatency) {
for (ApiTracer child : children) {
if (child instanceof BuiltInMetricsTracer) {
- ((BuiltInMetricsTracer) child).recordAFELatency(afeLatency);
+ ((BuiltInMetricsTracer) child).recordAFELatency(Float.valueOf(afeLatency));
}
}
}
@@ -222,4 +222,20 @@ public void recordAfeHeaderMissingCount(Long value) {
}
}
}
+
+ public void recordGFELatency(Float gfeLatency) {
+ for (ApiTracer child : children) {
+ if (child instanceof BuiltInMetricsTracer) {
+ ((BuiltInMetricsTracer) child).recordGFELatency(gfeLatency);
+ }
+ }
+ }
+
+ public void recordAFELatency(Float afeLatency) {
+ for (ApiTracer child : children) {
+ if (child instanceof BuiltInMetricsTracer) {
+ ((BuiltInMetricsTracer) child).recordAFELatency(afeLatency);
+ }
+ }
+ }
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
index 0f132593565..32e6f2c3b96 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
@@ -76,7 +76,7 @@ class HeaderInterceptor implements ClientInterceptor {
private static final Metadata.Key GOOGLE_CLOUD_RESOURCE_PREFIX_KEY =
Metadata.Key.of("google-cloud-resource-prefix", Metadata.ASCII_STRING_MARSHALLER);
private static final Pattern SERVER_TIMING_PATTERN =
- Pattern.compile("(?[a-zA-Z0-9_-]+);\\s*dur=(?\\d+)");
+ Pattern.compile("(?[a-zA-Z0-9_-]+);\\s*dur=(?\\d+(\\.\\d+)?)");
private static final Pattern GOOGLE_CLOUD_RESOURCE_PREFIX_PATTERN =
Pattern.compile(
".*projects/(?\\p{ASCII}[^/]*)(/instances/(?\\p{ASCII}[^/]*))?(/databases/(?\\p{ASCII}[^/]*))?");
@@ -162,15 +162,15 @@ private void processHeader(
// would fail to parse it correctly. To make the parsing more robust, the logic has been
// updated to handle multiple metrics gracefully.
- Map serverTimingMetrics = parseServerTimingHeader(serverTiming);
+ Map serverTimingMetrics = parseServerTimingHeader(serverTiming);
if (serverTimingMetrics.containsKey(GFE_TIMING_HEADER)) {
- long gfeLatency = serverTimingMetrics.get(GFE_TIMING_HEADER);
+ float gfeLatency = serverTimingMetrics.get(GFE_TIMING_HEADER);
- measureMap.put(SPANNER_GFE_LATENCY, gfeLatency);
+ measureMap.put(SPANNER_GFE_LATENCY, (long) gfeLatency);
measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 0L);
measureMap.record(tagContext);
- spannerRpcMetrics.recordGfeLatency(gfeLatency, attributes);
+ spannerRpcMetrics.recordGfeLatency((long) gfeLatency, attributes);
spannerRpcMetrics.recordGfeHeaderMissingCount(0L, attributes);
if (compositeTracer != null) {
compositeTracer.recordGFELatency(gfeLatency);
@@ -189,7 +189,7 @@ private void processHeader(
// Record AFE metrics
if (compositeTracer != null && GapicSpannerRpc.isEnableAFEServerTiming()) {
if (serverTimingMetrics.containsKey(AFE_TIMING_HEADER)) {
- long afeLatency = serverTimingMetrics.get(AFE_TIMING_HEADER);
+ float afeLatency = serverTimingMetrics.get(AFE_TIMING_HEADER);
compositeTracer.recordAFELatency(afeLatency);
} else {
compositeTracer.recordAfeHeaderMissingCount(1L);
@@ -200,8 +200,8 @@ private void processHeader(
}
}
- private Map parseServerTimingHeader(String serverTiming) {
- Map serverTimingMetrics = new HashMap<>();
+ private Map parseServerTimingHeader(String serverTiming) {
+ Map serverTimingMetrics = new HashMap<>();
if (serverTiming != null) {
Matcher matcher = SERVER_TIMING_PATTERN.matcher(serverTiming);
while (matcher.find()) {
@@ -209,7 +209,7 @@ private Map parseServerTimingHeader(String serverTiming) {
String durationStr = matcher.group("duration");
if (metricName != null && durationStr != null) {
- serverTimingMetrics.put(metricName, Long.valueOf(durationStr));
+ serverTimingMetrics.put(metricName, Float.valueOf(durationStr));
}
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java
index afb550b5c6a..a763f98cf0f 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java
@@ -31,7 +31,7 @@
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -44,11 +44,10 @@ abstract class AbstractNettyMockServerTest {
protected static InetSocketAddress address;
static ExecutorService executor;
protected static LocalChannelProvider channelProvider;
- protected static AtomicInteger fakeServerTiming =
- new AtomicInteger(new Random().nextInt(1000) + 1);
-
- protected static AtomicInteger fakeAFEServerTiming =
- new AtomicInteger(new Random().nextInt(500) + 1);
+ protected static final AtomicReference fakeServerTiming =
+ new AtomicReference<>((float) (new Random().nextDouble() * 1000) + 1);
+ protected static final AtomicReference fakeAFEServerTiming =
+ new AtomicReference<>((float) new Random().nextInt(500) + 1);
protected Spanner spanner;
@@ -76,7 +75,7 @@ public void sendHeaders(Metadata headers) {
headers.put(
Metadata.Key.of("server-timing", Metadata.ASCII_STRING_MARSHALLER),
String.format(
- "afe; dur=%d, gfet4t7; dur=%d",
+ "afe; dur=%f, gfet4t7; dur=%f",
fakeAFEServerTiming.get(), fakeServerTiming.get()));
super.sendHeaders(headers);
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
index 9392e202b7a..acc94ea56e5 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
@@ -84,7 +84,7 @@ public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractNettyMockServ
Attributes.builder().put(BuiltInMetricsConstant.DIRECT_PATH_USED_KEY, "false").build();
;
- private static final long MIN_LATENCY = 0;
+ private static final double MIN_LATENCY = 0;
private DatabaseClient client;
@@ -159,7 +159,7 @@ public void testMetricsSingleUseQuery() {
assertFalse(resultSet.next());
}
- long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
+ double elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
Attributes expectedAttributes =
expectedCommonBaseAttributes.toBuilder()
.putAll(expectedCommonRequestAttributes)
@@ -170,13 +170,14 @@ public void testMetricsSingleUseQuery() {
MetricData operationLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.OPERATION_LATENCIES_NAME);
assertNotNull(operationLatencyMetricData);
- long operationLatencyValue = getAggregatedValue(operationLatencyMetricData, expectedAttributes);
+ double operationLatencyValue =
+ getAggregatedValue(operationLatencyMetricData, expectedAttributes);
assertThat(operationLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed));
MetricData attemptLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_LATENCIES_NAME);
assertNotNull(attemptLatencyMetricData);
- long attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes);
+ double attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes);
assertThat(attemptLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed));
MetricData operationCountMetricData =
@@ -191,7 +192,7 @@ public void testMetricsSingleUseQuery() {
MetricData gfeLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
- long gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
+ double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
assertEquals(fakeServerTiming.get(), gfeLatencyValue, 0);
assertFalse(
@@ -229,7 +230,7 @@ public void testMetricsSingleUseQueryWithAfeEnabled() throws Exception {
assertFalse(resultSet.next());
}
- long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
+ double elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
Attributes expectedAttributes =
expectedCommonBaseAttributes.toBuilder()
.putAll(expectedCommonRequestAttributes)
@@ -240,14 +241,14 @@ public void testMetricsSingleUseQueryWithAfeEnabled() throws Exception {
MetricData operationLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.OPERATION_LATENCIES_NAME);
assertNotNull(operationLatencyMetricData);
- long operationLatencyValue =
+ double operationLatencyValue =
getAggregatedValue(operationLatencyMetricData, expectedAttributes);
assertThat(operationLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed));
MetricData attemptLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.ATTEMPT_LATENCIES_NAME);
assertNotNull(attemptLatencyMetricData);
- long attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes);
+ double attemptLatencyValue = getAggregatedValue(attemptLatencyMetricData, expectedAttributes);
assertThat(attemptLatencyValue).isIn(Range.closed(MIN_LATENCY, elapsed));
MetricData operationCountMetricData =
@@ -262,7 +263,7 @@ public void testMetricsSingleUseQueryWithAfeEnabled() throws Exception {
MetricData gfeLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
- long gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
+ double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
assertEquals(fakeServerTiming.get(), gfeLatencyValue, 0);
assertFalse(
@@ -270,7 +271,7 @@ public void testMetricsSingleUseQueryWithAfeEnabled() throws Exception {
MetricData afeLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME);
- long afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes);
+ double afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes);
assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 0);
assertFalse(
checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
@@ -402,7 +403,7 @@ public void testNoNetworkConnection() {
// Attempt count should have a failed metric point for CreateSession.
assertEquals(
- 1, getAggregatedValue(attemptCountMetricData, expectedAttributesCreateSessionFailed));
+ 1, getAggregatedValue(attemptCountMetricData, expectedAttributesCreateSessionFailed), 0);
}
@Test
@@ -509,14 +510,14 @@ private boolean checkIfMetricExists(InMemoryMetricReader reader, String metricNa
return false;
}
- private long getAggregatedValue(MetricData metricData, Attributes attributes) {
+ private float getAggregatedValue(MetricData metricData, Attributes attributes) {
switch (metricData.getType()) {
case HISTOGRAM:
return metricData.getHistogramData().getPoints().stream()
.filter(pd -> pd.getAttributes().equals(attributes))
- .map(data -> (long) data.getSum() / data.getCount())
+ .map(data -> (float) data.getSum() / data.getCount())
.findFirst()
- .orElse(0L);
+ .orElse(0F);
case LONG_SUM:
return metricData.getLongSumData().getPoints().stream()
.filter(pd -> pd.getAttributes().equals(attributes))
From f64356fcfbfb9c0a6aed9a92570601e3f0108431 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 9 May 2025 07:20:50 +0200
Subject: [PATCH 6/9] build(deps): update dependency
org.apache.maven.surefire:surefire-junit4 to v3.5.3 (#3855)
---
google-cloud-spanner-executor/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index b0f825994b5..dc719f46a21 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -202,7 +202,7 @@
org.apache.maven.surefire
surefire-junit4
- 3.5.2
+ 3.5.3
test
From e205a2b3f9d3fd6d7c29259aee5e97e2825510c0 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 9 May 2025 07:52:10 +0200
Subject: [PATCH 7/9] build(deps): update dependency
org.apache.maven.plugins:maven-failsafe-plugin to v3.5.3 (#3854)
---
google-cloud-spanner-executor/pom.xml | 2 +-
samples/install-without-bom/pom.xml | 2 +-
samples/snapshot/pom.xml | 2 +-
samples/snippets/pom.xml | 4 ++--
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index dc719f46a21..e39371d14ee 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -267,7 +267,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.5.2
+ 3.5.3
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index ce04def79f3..10457c70ef6 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -145,7 +145,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.5.2
+ 3.5.3
10
false
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 76dff3a8acf..31ab23e986f 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -144,7 +144,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.5.2
+ 3.5.3
10
false
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index dfa87cc1860..fa7df05da05 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -126,7 +126,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.5.2
+ 3.5.3
10
false
@@ -155,7 +155,7 @@
org.apache.maven.plugins
maven-failsafe-plugin
- 3.5.2
+ 3.5.3
10
false
From 203baae3996378435095cb90e3b2c7ee71a643cd Mon Sep 17 00:00:00 2001
From: surbhigarg92
Date: Fri, 9 May 2025 14:59:09 +0530
Subject: [PATCH 8/9] feat: enable AFE and gRPC metrics for DP (#3852)
* feat: enable AFE and gRPC metrics for DP
* check afe metrics when DP is enabled
* check afe metrics when DP is enabled
* mergeconflict
* chore: generate libraries at Fri May 9 05:49:15 UTC 2025
* review comments
* roundofferrorfordouble
---------
Co-authored-by: cloud-java-bot
Co-authored-by: rahul2393
---
.../google/cloud/spanner/SpannerOptions.java | 12 ++++-
.../cloud/spanner/spi/v1/GapicSpannerRpc.java | 17 ++++--
.../spanner/spi/v1/HeaderInterceptor.java | 10 ++--
...OpenTelemetryBuiltInMetricsTracerTest.java | 54 ++++++++++++-------
4 files changed, 64 insertions(+), 29 deletions(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
index 0995c478427..a25e8bfa997 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
@@ -923,8 +923,16 @@ public boolean isEnableBuiltInMetrics() {
@Override
public boolean isEnableGRPCBuiltInMetrics() {
- return "false"
- .equalsIgnoreCase(System.getenv(SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS));
+ // Enable gRPC built-in metrics if:
+ // 1. The env var SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS is explicitly set to
+ // "false", OR
+ // 2. DirectPath is enabled AND the env var is not set to "true"
+ // This allows metrics to be enabled by default when DirectPath is on, unless explicitly
+ // disabled via env.
+ String grpcDisableEnv = System.getenv("SPANNER_DISABLE_DIRECT_ACCESS_GRPC_BUILTIN_METRICS");
+ boolean isDirectPathEnabled = GapicSpannerRpc.isEnableDirectPathXdsEnv();
+ return ("false".equalsIgnoreCase(grpcDisableEnv))
+ || (isDirectPathEnabled && !"true".equalsIgnoreCase(grpcDisableEnv));
}
@Override
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
index fa5719c95c4..c43bbe1f11b 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
@@ -367,8 +367,7 @@ public GapicSpannerRpc(final SpannerOptions options) {
.withEncoding(compressorName))
.setHeaderProvider(headerProviderWithUserAgent)
.setAllowNonDefaultServiceAccount(true);
- String directPathXdsEnv = System.getenv("GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS");
- boolean isAttemptDirectPathXds = Boolean.parseBoolean(directPathXdsEnv);
+ boolean isAttemptDirectPathXds = isEnableDirectPathXdsEnv();
if (isAttemptDirectPathXds) {
defaultChannelProviderBuilder.setAttemptDirectPath(true);
defaultChannelProviderBuilder.setAttemptDirectPathXds();
@@ -678,7 +677,19 @@ private static boolean isEmulatorEnabled(SpannerOptions options, String emulator
}
public static boolean isEnableAFEServerTiming() {
- return "false".equalsIgnoreCase(System.getenv("SPANNER_DISABLE_AFE_SERVER_TIMING"));
+ // Enable AFE metrics and add AFE header if:
+ // 1. The env var SPANNER_DISABLE_AFE_SERVER_TIMING is explicitly set to "false", OR
+ // 2. DirectPath is enabled AND the env var is not set to "true"
+ // This allows metrics to be enabled by default when DirectPath is on, unless explicitly
+ // disabled via env.
+ String afeDisableEnv = System.getenv("SPANNER_DISABLE_AFE_SERVER_TIMING");
+ boolean isDirectPathEnabled = isEnableDirectPathXdsEnv();
+ return ("false".equalsIgnoreCase(afeDisableEnv))
+ || (isDirectPathEnabled && !"true".equalsIgnoreCase(afeDisableEnv));
+ }
+
+ public static boolean isEnableDirectPathXdsEnv() {
+ return Boolean.parseBoolean(System.getenv("GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS"));
}
private static final RetrySettings ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS =
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
index 32e6f2c3b96..e3bc848dc1e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java
@@ -133,7 +133,8 @@ public void onHeaders(Metadata metadata) {
Boolean isDirectPathUsed =
isDirectPathUsed(getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR));
addDirectPathUsedAttribute(compositeTracer, isDirectPathUsed);
- processHeader(metadata, tagContext, attributes, span, compositeTracer);
+ processHeader(
+ metadata, tagContext, attributes, span, compositeTracer, isDirectPathUsed);
super.onHeaders(metadata);
}
},
@@ -151,7 +152,8 @@ private void processHeader(
TagContext tagContext,
Attributes attributes,
Span span,
- CompositeTracer compositeTracer) {
+ CompositeTracer compositeTracer,
+ boolean isDirectPathUsed) {
MeasureMap measureMap = STATS_RECORDER.newMeasureMap();
String serverTiming = metadata.get(SERVER_TIMING_HEADER_KEY);
try {
@@ -172,7 +174,7 @@ private void processHeader(
spannerRpcMetrics.recordGfeLatency((long) gfeLatency, attributes);
spannerRpcMetrics.recordGfeHeaderMissingCount(0L, attributes);
- if (compositeTracer != null) {
+ if (compositeTracer != null && !isDirectPathUsed) {
compositeTracer.recordGFELatency(gfeLatency);
}
if (span != null) {
@@ -181,7 +183,7 @@ private void processHeader(
} else {
measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L).record(tagContext);
spannerRpcMetrics.recordGfeHeaderMissingCount(1L, attributes);
- if (compositeTracer != null) {
+ if (compositeTracer != null && !isDirectPathUsed) {
compositeTracer.recordGfeHeaderMissingCount(1L);
}
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
index acc94ea56e5..55c5cf47714 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java
@@ -34,6 +34,7 @@
import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime;
import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult;
import com.google.cloud.spanner.connection.RandomResultSetGenerator;
+import com.google.cloud.spanner.spi.v1.GapicSpannerRpc;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Range;
@@ -190,16 +191,23 @@ public void testMetricsSingleUseQuery() {
assertNotNull(attemptCountMetricData);
assertThat(getAggregatedValue(attemptCountMetricData, expectedAttributes)).isEqualTo(1);
- MetricData gfeLatencyMetricData =
- getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
- double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
- assertEquals(fakeServerTiming.get(), gfeLatencyValue, 0);
-
assertFalse(
checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME));
- assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME));
assertFalse(
checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
+ if (GapicSpannerRpc.isEnableDirectPathXdsEnv()) {
+ // AFE metrics are enabled for DirectPath.
+ MetricData afeLatencyMetricData =
+ getMetricData(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME);
+ double afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes);
+ assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 1e-6);
+ } else {
+ MetricData gfeLatencyMetricData =
+ getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
+ double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
+ assertEquals(fakeServerTiming.get(), gfeLatencyValue, 1e-6);
+ assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME));
+ }
}
private boolean isJava8() {
@@ -261,20 +269,19 @@ public void testMetricsSingleUseQueryWithAfeEnabled() throws Exception {
assertNotNull(attemptCountMetricData);
assertThat(getAggregatedValue(attemptCountMetricData, expectedAttributes)).isEqualTo(1);
- MetricData gfeLatencyMetricData =
- getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
- double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
- assertEquals(fakeServerTiming.get(), gfeLatencyValue, 0);
-
assertFalse(
checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME));
-
+ assertFalse(
+ checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
MetricData afeLatencyMetricData =
getMetricData(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME);
double afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes);
- assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 0);
- assertFalse(
- checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
+ assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 1e-6);
+
+ MetricData gfeLatencyMetricData =
+ getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME);
+ double gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes);
+ assertEquals(fakeServerTiming.get(), gfeLatencyValue, 1e-6);
} finally {
writeableEnvironmentVariables.remove("GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS");
}
@@ -445,13 +452,20 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
.put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.ExecuteSql")
.build();
- MetricData gfeConnectivityMetricData =
- getMetricData(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME);
- assertThat(getAggregatedValue(gfeConnectivityMetricData, expectedAttributes)).isEqualTo(1);
assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME));
assertFalse(checkIfMetricExists(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME));
- assertFalse(
- checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
+ if (GapicSpannerRpc.isEnableDirectPathXdsEnv()) {
+ MetricData afeConnectivityMetricData =
+ getMetricData(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME);
+ assertThat(getAggregatedValue(afeConnectivityMetricData, expectedAttributes)).isEqualTo(1);
+ } else {
+ MetricData gfeConnectivityMetricData =
+ getMetricData(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME);
+ assertThat(getAggregatedValue(gfeConnectivityMetricData, expectedAttributes)).isEqualTo(1);
+ assertFalse(
+ checkIfMetricExists(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME));
+ }
+
spannerNoHeader.close();
serverNoHeader.shutdown();
serverNoHeader.awaitTermination();
From 22820a13abe44de73e77796cd1e883f1915c3446 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Fri, 9 May 2025 15:55:29 +0530
Subject: [PATCH 9/9] chore(main): release 6.93.0 (#3847)
* chore(main): release 6.93.0
* chore: generate libraries at Fri May 9 09:30:01 UTC 2025
---------
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot
---
CHANGELOG.md | 15 ++++++++++++++
README.md | 6 +++---
benchmarks/pom.xml | 2 +-
google-cloud-spanner-bom/pom.xml | 18 ++++++++---------
google-cloud-spanner-executor/pom.xml | 4 ++--
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-executor-v1/pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 20 +++++++++----------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 20 +++++++++----------
17 files changed, 69 insertions(+), 54 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 05eee459cb8..68989f1bc61 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+## [6.93.0](https://github.com/googleapis/java-spanner/compare/v6.92.0...v6.93.0) (2025-05-09)
+
+
+### Features
+
+* Enable AFE and gRPC metrics for DP ([#3852](https://github.com/googleapis/java-spanner/issues/3852)) ([203baae](https://github.com/googleapis/java-spanner/commit/203baae3996378435095cb90e3b2c7ee71a643cd))
+
+
+### Bug Fixes
+
+* Change server timing duration attribute to float as per w3c ([#3851](https://github.com/googleapis/java-spanner/issues/3851)) ([da8dd8d](https://github.com/googleapis/java-spanner/commit/da8dd8da3171a073d7b450d4413936351a4c1060))
+* **deps:** Update the Java code generator (gapic-generator-java) to 2.57.0 ([23b985c](https://github.com/googleapis/java-spanner/commit/23b985c9a04837b0b38f2cfc5d96469e1d664d67))
+* Non-ASCII Unicode characters in code ([#3844](https://github.com/googleapis/java-spanner/issues/3844)) ([85a0820](https://github.com/googleapis/java-spanner/commit/85a0820505889ae6482a9e4f845cd53430dd6b44))
+* Only close and return sessions once ([#3846](https://github.com/googleapis/java-spanner/issues/3846)) ([32b2373](https://github.com/googleapis/java-spanner/commit/32b2373d62cac3047d9686c56af278c706d7c488))
+
## [6.92.0](https://github.com/googleapis/java-spanner/compare/v6.91.1...v6.92.0) (2025-04-29)
diff --git a/README.md b/README.md
index 1bcd0fcc4e6..165cf6ed2d5 100644
--- a/README.md
+++ b/README.md
@@ -56,13 +56,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
If you are using Gradle without BOM, add this to your dependencies:
```Groovy
-implementation 'com.google.cloud:google-cloud-spanner:6.92.0'
+implementation 'com.google.cloud:google-cloud-spanner:6.93.0'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.92.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.93.0"
```
## Authentication
@@ -728,7 +728,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
[stability-image]: https://img.shields.io/badge/stability-stable-green
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.92.0
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.93.0
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 8161b71d948..f9d4779c5f9 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -24,7 +24,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index 35106e28b92..de163ff66e7 100644
--- a/google-cloud-spanner-bom/pom.xml
+++ b/google-cloud-spanner-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner-bom
- 6.92.1-SNAPSHOT
+ 6.93.0
pom
com.google.cloud
@@ -53,43 +53,43 @@
com.google.cloud
google-cloud-spanner
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.cloud
google-cloud-spanner
test-jar
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index e39371d14ee..20102f3598d 100644
--- a/google-cloud-spanner-executor/pom.xml
+++ b/google-cloud-spanner-executor/pom.xml
@@ -5,14 +5,14 @@
4.0.0
com.google.cloud
google-cloud-spanner-executor
- 6.92.1-SNAPSHOT
+ 6.93.0
jar
Google Cloud Spanner Executor
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index f0878cceaa3..dc1116da57e 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner
- 6.92.1-SNAPSHOT
+ 6.93.0
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
google-cloud-spanner
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index 945eda59f56..7cd4a0fccc2 100644
--- a/grpc-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
grpc-google-cloud-spanner-admin-database-v1
GRPC library for grpc-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index 977f31c1529..2b975d74549 100644
--- a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
grpc-google-cloud-spanner-admin-instance-v1
GRPC library for grpc-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/grpc-google-cloud-spanner-executor-v1/pom.xml b/grpc-google-cloud-spanner-executor-v1/pom.xml
index 4da1b80ccbe..dde2f322b53 100644
--- a/grpc-google-cloud-spanner-executor-v1/pom.xml
+++ b/grpc-google-cloud-spanner-executor-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-executor-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
grpc-google-cloud-spanner-executor-v1
GRPC library for google-cloud-spanner
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 8d478945b85..41247103661 100644
--- a/grpc-google-cloud-spanner-v1/pom.xml
+++ b/grpc-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/pom.xml b/pom.xml
index c10f0f8963f..24ef30ec9d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.92.1-SNAPSHOT
+ 6.93.0
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -61,47 +61,47 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-executor-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-executor-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
com.google.cloud
google-cloud-spanner
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 788d278114f..435770f1fc8 100644
--- a/proto-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
proto-google-cloud-spanner-admin-database-v1
PROTO library for proto-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index d81fbe63350..bf9c63ccd25 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
proto-google-cloud-spanner-admin-instance-v1
PROTO library for proto-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/proto-google-cloud-spanner-executor-v1/pom.xml b/proto-google-cloud-spanner-executor-v1/pom.xml
index 701c635e3ef..1cf10ea4ff5 100644
--- a/proto-google-cloud-spanner-executor-v1/pom.xml
+++ b/proto-google-cloud-spanner-executor-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-executor-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
proto-google-cloud-spanner-executor-v1
Proto library for google-cloud-spanner
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 6bdd874682d..ff578e86537 100644
--- a/proto-google-cloud-spanner-v1/pom.xml
+++ b/proto-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.92.1-SNAPSHOT
+ 6.93.0
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 31ab23e986f..5fb9361d004 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -32,7 +32,7 @@
com.google.cloud
google-cloud-spanner
- 6.92.1-SNAPSHOT
+ 6.93.0
diff --git a/versions.txt b/versions.txt
index 550467d1d2f..41c52cc2547 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,13 +1,13 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.1-SNAPSHOT
-proto-google-cloud-spanner-v1:6.92.0:6.92.1-SNAPSHOT
-proto-google-cloud-spanner-admin-database-v1:6.92.0:6.92.1-SNAPSHOT
-grpc-google-cloud-spanner-v1:6.92.0:6.92.1-SNAPSHOT
-grpc-google-cloud-spanner-admin-instance-v1:6.92.0:6.92.1-SNAPSHOT
-grpc-google-cloud-spanner-admin-database-v1:6.92.0:6.92.1-SNAPSHOT
-google-cloud-spanner:6.92.0:6.92.1-SNAPSHOT
-google-cloud-spanner-executor:6.92.0:6.92.1-SNAPSHOT
-proto-google-cloud-spanner-executor-v1:6.92.0:6.92.1-SNAPSHOT
-grpc-google-cloud-spanner-executor-v1:6.92.0:6.92.1-SNAPSHOT
+proto-google-cloud-spanner-admin-instance-v1:6.93.0:6.93.0
+proto-google-cloud-spanner-v1:6.93.0:6.93.0
+proto-google-cloud-spanner-admin-database-v1:6.93.0:6.93.0
+grpc-google-cloud-spanner-v1:6.93.0:6.93.0
+grpc-google-cloud-spanner-admin-instance-v1:6.93.0:6.93.0
+grpc-google-cloud-spanner-admin-database-v1:6.93.0:6.93.0
+google-cloud-spanner:6.93.0:6.93.0
+google-cloud-spanner-executor:6.93.0:6.93.0
+proto-google-cloud-spanner-executor-v1:6.93.0:6.93.0
+grpc-google-cloud-spanner-executor-v1:6.93.0:6.93.0