From 7e142ff9a2de2f17e9e575628ecb9eb9de974d8d Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Wed, 8 Nov 2023 19:46:14 +0000
Subject: [PATCH 1/7] chore(main): release 6.53.1-SNAPSHOT (#2727)
:robot: I have created a release *beep* *boop*
---
### Updating meta-information for bleeding-edge SNAPSHOT release.
---
This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please).
---
google-cloud-spanner-bom/pom.xml | 20 +++++++++----------
google-cloud-spanner-executor/pom.xml | 4 ++--
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 16 +++++++--------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 16 +++++++--------
12 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index 027a7b6dd6f..c598b539aeb 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.53.0
+ 6.53.1-SNAPSHOT
pom
com.google.cloud
@@ -53,48 +53,48 @@
com.google.cloud
google-cloud-spanner
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.cloud
google-cloud-spanner-executor
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
test-jar
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index 2faadae10b4..c71462b10c2 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.53.0
+ 6.53.1-SNAPSHOT
jar
Google Cloud Spanner Executor
com.google.cloud
google-cloud-spanner-parent
- 6.53.0
+ 6.53.1-SNAPSHOT
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index a9750b91449..561dd1a258c 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.53.0
+ 6.53.1-SNAPSHOT
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.53.0
+ 6.53.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 89d1e9e473b..6222d319a3b 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.53.0
+ 6.53.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.53.0
+ 6.53.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 80cc9c23439..eb8b7790be7 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.53.0
+ 6.53.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.53.0
+ 6.53.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index b35f08fafef..5fa3eee1887 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.53.0
+ 6.53.1-SNAPSHOT
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.53.0
+ 6.53.1-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index 5fba5ed85bb..6f1cba5cf07 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.53.0
+ 6.53.1-SNAPSHOT
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -62,37 +62,37 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.53.0
+ 6.53.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
- 6.53.0
+ 6.53.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 eaaee253142..b62a80b6b02 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.53.0
+ 6.53.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.53.0
+ 6.53.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 eb9ae411b14..d91bd1b395c 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.53.0
+ 6.53.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.53.0
+ 6.53.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 1d786a3c4b4..7908cd8d155 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.53.0
+ 6.53.1-SNAPSHOT
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.53.0
+ 6.53.1-SNAPSHOT
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 0ee881eee59..44d1f2fac91 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.53.0
+ 6.53.1-SNAPSHOT
diff --git a/versions.txt b/versions.txt
index d15ff05615b..b02647957a2 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,11 +1,11 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.0
-proto-google-cloud-spanner-v1:6.53.0:6.53.0
-proto-google-cloud-spanner-admin-database-v1:6.53.0:6.53.0
-grpc-google-cloud-spanner-v1:6.53.0:6.53.0
-grpc-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.0
-grpc-google-cloud-spanner-admin-database-v1:6.53.0:6.53.0
-google-cloud-spanner:6.53.0:6.53.0
-google-cloud-spanner-executor:6.53.0:6.53.0
+proto-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.1-SNAPSHOT
+proto-google-cloud-spanner-v1:6.53.0:6.53.1-SNAPSHOT
+proto-google-cloud-spanner-admin-database-v1:6.53.0:6.53.1-SNAPSHOT
+grpc-google-cloud-spanner-v1:6.53.0:6.53.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-database-v1:6.53.0:6.53.1-SNAPSHOT
+google-cloud-spanner:6.53.0:6.53.1-SNAPSHOT
+google-cloud-spanner-executor:6.53.0:6.53.1-SNAPSHOT
From 9c19934a6170232f6ac2478ef9bfcdb2914d2562 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?=
Date: Fri, 10 Nov 2023 11:51:33 +0100
Subject: [PATCH 2/7] fix: respect SPANNER_EMULATOR_HOST env var when
autoConfigEmulator=true (#2730)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: respect SPANNER_EMULATOR_HOST env var when autoConfigEmulator=true
The Connection API would always use the default emulator host when
autoConfigEmulator=true was set in the connection string. This makes it
harder to override the host name for the emulator when you also want the
emulator to automatically create the instance and database that you
connect to, as the only way to set it is to add it to the connection
string.
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
---------
Co-authored-by: Owl Bot
---
README.md | 8 +-
.../spanner/connection/ConnectionOptions.java | 23 +++-
.../connection/ConnectionOptionsTest.java | 103 ++++++++++++++++++
3 files changed, 125 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 9f5b837c996..73d80d9d362 100644
--- a/README.md
+++ b/README.md
@@ -50,20 +50,20 @@ If you are using Maven without the BOM, add this to your dependencies:
If you are using Gradle 5.x or later, add this to your dependencies:
```Groovy
-implementation platform('com.google.cloud:libraries-bom:26.26.0')
+implementation platform('com.google.cloud:libraries-bom:26.27.0')
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.52.1'
+implementation 'com.google.cloud:google-cloud-spanner:6.53.0'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.52.1"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.53.0"
```
@@ -432,7 +432,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.52.1
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.53.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/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
index 47397100acd..e8c2855af50 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
@@ -48,6 +48,7 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.regex.Matcher;
@@ -191,6 +192,7 @@ public String[] getValidValues() {
private static final String PLAIN_TEXT_PROTOCOL = "http:";
private static final String HOST_PROTOCOL = "https:";
private static final String DEFAULT_HOST = "https://spanner.googleapis.com";
+ private static final String SPANNER_EMULATOR_HOST_ENV_VAR = "SPANNER_EMULATOR_HOST";
private static final String DEFAULT_EMULATOR_HOST = "http://localhost:9010";
/** Use plain text is only for local testing purposes. */
private static final String USE_PLAIN_TEXT_PROPERTY_NAME = "usePlainText";
@@ -473,7 +475,10 @@ private Builder() {}
"(?:cloudspanner:)(?//[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)?/projects/(?(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?([a-z]|[-]|[0-9])+)(/databases/(?([a-z]|[-]|[_]|[0-9])+))?)?(?:[?|;].*)?";
private static final String SPANNER_URI_REGEX = "(?is)^" + SPANNER_URI_FORMAT + "$";
- private static final Pattern SPANNER_URI_PATTERN = Pattern.compile(SPANNER_URI_REGEX);
+
+ @VisibleForTesting
+ static final Pattern SPANNER_URI_PATTERN = Pattern.compile(SPANNER_URI_REGEX);
+
private static final String HOST_GROUP = "HOSTGROUP";
private static final String PROJECT_GROUP = "PROJECTGROUP";
private static final String INSTANCE_GROUP = "INSTANCEGROUP";
@@ -706,7 +711,7 @@ private ConnectionOptions(Builder builder) {
this.autoConfigEmulator = parseAutoConfigEmulator(this.uri);
this.dialect = parseDialect(this.uri);
this.usePlainText = this.autoConfigEmulator || parseUsePlainText(this.uri);
- this.host = determineHost(matcher, autoConfigEmulator, usePlainText);
+ this.host = determineHost(matcher, autoConfigEmulator, usePlainText, System.getenv());
this.rpcPriority = parseRPCPriority(this.uri);
this.delayTransactionStartUntilFirstWrite = parseDelayTransactionStartUntilFirstWrite(this.uri);
this.trackSessionLeaks = parseTrackSessionLeaks(this.uri);
@@ -791,11 +796,19 @@ private ConnectionOptions(Builder builder) {
}
}
- private static String determineHost(
- Matcher matcher, boolean autoConfigEmulator, boolean usePlainText) {
+ @VisibleForTesting
+ static String determineHost(
+ Matcher matcher,
+ boolean autoConfigEmulator,
+ boolean usePlainText,
+ Map environment) {
if (matcher.group(Builder.HOST_GROUP) == null) {
if (autoConfigEmulator) {
- return DEFAULT_EMULATOR_HOST;
+ if (Strings.isNullOrEmpty(environment.get(SPANNER_EMULATOR_HOST_ENV_VAR))) {
+ return DEFAULT_EMULATOR_HOST;
+ } else {
+ return PLAIN_TEXT_PROTOCOL + "//" + environment.get(SPANNER_EMULATOR_HOST_ENV_VAR);
+ }
} else {
return DEFAULT_HOST;
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java
index 7690ea3934c..ca0b779981f 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java
@@ -16,6 +16,8 @@
package com.google.cloud.spanner.connection;
+import static com.google.cloud.spanner.connection.ConnectionOptions.Builder.SPANNER_URI_PATTERN;
+import static com.google.cloud.spanner.connection.ConnectionOptions.determineHost;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -33,6 +35,7 @@
import com.google.cloud.spanner.ErrorCode;
import com.google.cloud.spanner.SpannerException;
import com.google.cloud.spanner.SpannerOptions;
+import com.google.common.collect.ImmutableMap;
import com.google.common.io.BaseEncoding;
import com.google.common.io.Files;
import java.io.File;
@@ -40,6 +43,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
+import java.util.regex.Matcher;
import org.junit.Test;
import org.junit.function.ThrowingRunnable;
import org.junit.runner.RunWith;
@@ -153,6 +157,105 @@ public void testBuildWithAutoConfigEmulator() {
assertTrue(options.isUsePlainText());
}
+ @Test
+ public void testDetermineHost() {
+ final String uriWithoutHost =
+ "cloudspanner:/projects/test-project-123/instances/test-instance-123/databases/test-database-123";
+ Matcher matcherWithoutHost = SPANNER_URI_PATTERN.matcher(uriWithoutHost);
+ assertTrue(matcherWithoutHost.find());
+ final String uriWithHost =
+ "cloudspanner://custom.host.domain:1234/projects/test-project-123/instances/test-instance-123/databases/test-database-123";
+ Matcher matcherWithHost = SPANNER_URI_PATTERN.matcher(uriWithHost);
+ assertTrue(matcherWithHost.find());
+
+ assertEquals(
+ DEFAULT_HOST,
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ false,
+ ImmutableMap.of()));
+ assertEquals(
+ DEFAULT_HOST,
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ false,
+ ImmutableMap.of("FOO", "bar")));
+ assertEquals(
+ "http://localhost:9010",
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ false,
+ ImmutableMap.of()));
+ assertEquals(
+ "http://localhost:9011",
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ false,
+ ImmutableMap.of("SPANNER_EMULATOR_HOST", "localhost:9011")));
+ assertEquals(
+ "http://localhost:9010",
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ true,
+ ImmutableMap.of()));
+ assertEquals(
+ "http://localhost:9011",
+ determineHost(
+ matcherWithoutHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ true,
+ ImmutableMap.of("SPANNER_EMULATOR_HOST", "localhost:9011")));
+
+ // A host in the connection string has precedence over all other options.
+ assertEquals(
+ "https://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ false,
+ ImmutableMap.of()));
+ assertEquals(
+ "http://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ true,
+ ImmutableMap.of()));
+ assertEquals(
+ "http://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ true,
+ ImmutableMap.of()));
+ assertEquals(
+ "https://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ false,
+ ImmutableMap.of()));
+ assertEquals(
+ "http://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ false,
+ /* usePlainText= */ true,
+ ImmutableMap.of("SPANNER_EMULATOR_HOST", "localhost:9011")));
+ assertEquals(
+ "https://custom.host.domain:1234",
+ determineHost(
+ matcherWithHost,
+ /* autoConfigEmulator= */ true,
+ /* usePlainText= */ false,
+ ImmutableMap.of("SPANNER_EMULATOR_HOST", "localhost:9011")));
+ }
+
@Test
public void testBuildWithRouteToLeader() {
final String BASE_URI =
From b90e57e93ca5d9e81e0b8ae2792ada454d0199c2 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 10 Nov 2023 12:22:16 +0100
Subject: [PATCH 3/7] chore(deps): update dependency
com.google.cloud:google-cloud-spanner to v6.53.0 (#2728)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* chore(deps): update dependency com.google.cloud:google-cloud-spanner to v6.53.0
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
---------
Co-authored-by: Owl Bot
---
README.md | 2 +-
samples/install-without-bom/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 73d80d9d362..2fa29436977 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ If you are using Maven without the BOM, add this to your dependencies:
com.google.cloud
google-cloud-spanner
- 6.52.1
+ 6.53.0
```
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 125155cec52..641df814af1 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -32,7 +32,7 @@
com.google.cloud
google-cloud-spanner
- 6.52.1
+ 6.53.0
From 8618042bb716d8a6626bacee59f9e6c6f0d50362 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 10 Nov 2023 13:09:00 +0100
Subject: [PATCH 4/7] deps: update dependency
com.google.cloud:google-cloud-trace to v2.30.0 (#2725)
---
samples/install-without-bom/pom.xml | 2 +-
samples/snapshot/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 641df814af1..fd0c7e3c0a2 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -22,7 +22,7 @@
1.8
UTF-8
0.31.1
- 2.29.0
+ 2.30.0
3.23.0
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 44d1f2fac91..59a1f25ed61 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -22,7 +22,7 @@
1.8
UTF-8
0.31.1
- 2.29.0
+ 2.30.0
3.23.0
From 7f6b1582770d2270efc9501136afb17a2677eaeb Mon Sep 17 00:00:00 2001
From: Arpan Mishra
Date: Wed, 15 Nov 2023 00:06:59 +0530
Subject: [PATCH 5/7] fix: copy backup issue when backup is done across
different instance IDs (#2732)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: prevent illegal negative timeout values into thread sleep() method while retrying exceptions in unit tests.
* For details on issue see - https://github.com/googleapis/java-spanner/issues/2206
* Fixing lint issues.
* fix: reproduce issue with copy backup.
* fix: copy backup issue when backup is done across different instance IDs.
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
---------
Co-authored-by: Owl Bot
---
.../com/google/cloud/spanner/BackupInfo.java | 3 --
.../spanner/DatabaseAdminClientImplTest.java | 36 +++++++++++++++++++
2 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BackupInfo.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BackupInfo.java
index 3ea3329a6db..1349efeee2e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BackupInfo.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BackupInfo.java
@@ -156,9 +156,6 @@ public Builder setVersionTime(Timestamp versionTime) {
@Override
public Builder setDatabase(DatabaseId database) {
- Preconditions.checkArgument(
- database.getInstanceId().equals(id.getInstanceId()),
- "The instance of the source database must be equal to the instance of the backup.");
this.database = Preconditions.checkNotNull(database);
return this;
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java
index dbb08f51a4c..ace26977bd3 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java
@@ -73,6 +73,7 @@
public class DatabaseAdminClientImplTest {
private static final String PROJECT_ID = "my-project";
private static final String INSTANCE_ID = "my-instance";
+ private static final String INSTANCE_ID_2 = "my-instance-2";
private static final String INSTANCE_NAME = "projects/my-project/instances/my-instance";
private static final String DB_ID = "my-db";
private static final String DB_NAME = "projects/my-project/instances/my-instance/databases/my-db";
@@ -591,6 +592,41 @@ public void copyBackupWithBackupObject() throws ExecutionException, InterruptedE
assertThat(op.get().getId().getName()).isEqualTo(BK_NAME);
}
+ @Test
+ public void copyBackupWithBackupObject_onDifferentInstances()
+ throws ExecutionException, InterruptedException {
+ Backup testProto =
+ Backup.newBuilder()
+ .setName(BK_NAME)
+ .setDatabase("projects/my-project/instances/my-instance-2/databases/my-db")
+ .setState(Backup.State.READY)
+ .build();
+ final OperationFuture rawOperationFuture =
+ OperationFutureUtil.immediateOperationFuture(
+ "copyBackup", testProto, CopyBackupMetadata.getDefaultInstance());
+ final Timestamp expireTime =
+ Timestamp.ofTimeMicroseconds(
+ TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis())
+ + TimeUnit.HOURS.toMicros(28));
+ final Timestamp versionTime =
+ Timestamp.ofTimeMicroseconds(
+ TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()) - TimeUnit.DAYS.toMicros(2));
+ final com.google.cloud.spanner.Backup requestBackup =
+ client
+ .newBackupBuilder(BackupId.of(PROJECT_ID, INSTANCE_ID_2, BK_ID))
+ .setExpireTime(expireTime)
+ .setVersionTime(versionTime)
+ .build();
+ BackupId sourceBackupId = BackupId.of(PROJECT_ID, INSTANCE_ID, BK_ID);
+
+ when(rpc.copyBackup(sourceBackupId, requestBackup)).thenReturn(rawOperationFuture);
+
+ final OperationFuture op =
+ client.copyBackup(sourceBackupId, requestBackup);
+ assertThat(op.isDone()).isTrue();
+ assertThat(op.get().getId().getName()).isEqualTo(BK_NAME);
+ }
+
@Test
public void copyEncryptedBackup() throws ExecutionException, InterruptedException {
final OperationFuture rawOperationFuture =
From faa7e5dff17897b0432bc505b7ed24c33805f418 Mon Sep 17 00:00:00 2001
From: Arpan Mishra
Date: Wed, 15 Nov 2023 13:55:06 +0530
Subject: [PATCH 6/7] =?UTF-8?q?feat:=20enable=20session=20leaks=20preventi?=
=?UTF-8?q?on=20by=20cleaning=20up=20long-running=20tra=E2=80=A6=20(#2655)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: enable session leaks prevention by cleaning up long-running transactions.
* Update session-and-channel-pool-configuration.md
Co-authored-by: Knut Olav Løite
* Update session-and-channel-pool-configuration.md
Co-authored-by: Knut Olav Løite
* Update session-and-channel-pool-configuration.md
Co-authored-by: Knut Olav Løite
* Update session-and-channel-pool-configuration.md
Co-authored-by: Knut Olav Løite
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
---------
Co-authored-by: Knut Olav Løite
Co-authored-by: Owl Bot
---
.../cloud/spanner/SessionPoolOptions.java | 7 +-
.../cloud/spanner/SessionPoolOptionsTest.java | 2 +-
session-and-channel-pool-configuration.md | 81 +++++++++++++++++++
3 files changed, 86 insertions(+), 4 deletions(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java
index cbea1495368..80d53a4d71f 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolOptions.java
@@ -357,7 +357,8 @@ static InactiveTransactionRemovalOptions.Builder newBuilder() {
}
static class Builder {
- private ActionOnInactiveTransaction actionOnInactiveTransaction;
+ private ActionOnInactiveTransaction actionOnInactiveTransaction =
+ ActionOnInactiveTransaction.WARN;
private Duration executionFrequency = Duration.ofMinutes(2);
private double usedSessionsRatioThreshold = 0.95;
private Duration idleTimeThreshold = Duration.ofMinutes(60L);
@@ -598,7 +599,7 @@ public Builder setBlockIfPoolExhausted() {
*
* @return this builder for chaining
*/
- Builder setWarnIfInactiveTransactions() {
+ public Builder setWarnIfInactiveTransactions() {
this.inactiveTransactionRemovalOptions =
InactiveTransactionRemovalOptions.newBuilder()
.setActionOnInactiveTransaction(ActionOnInactiveTransaction.WARN)
@@ -617,7 +618,7 @@ Builder setWarnIfInactiveTransactions() {
*
* @return this builder for chaining
*/
- Builder setWarnAndCloseIfInactiveTransactions() {
+ public Builder setWarnAndCloseIfInactiveTransactions() {
this.inactiveTransactionRemovalOptions =
InactiveTransactionRemovalOptions.newBuilder()
.setActionOnInactiveTransaction(ActionOnInactiveTransaction.WARN_AND_CLOSE)
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java
index 24e754f4050..23aa626f393 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolOptionsTest.java
@@ -129,7 +129,7 @@ public void verifyDefaultInactiveTransactionRemovalOptions() {
InactiveTransactionRemovalOptions inactiveTransactionRemovalOptions =
sessionPoolOptions.getInactiveTransactionRemovalOptions();
- assertFalse(sessionPoolOptions.warnInactiveTransactions());
+ assertTrue(sessionPoolOptions.warnInactiveTransactions());
assertFalse(sessionPoolOptions.warnAndCloseInactiveTransactions());
assertFalse(sessionPoolOptions.closeInactiveTransactions());
assertEquals(0.95, inactiveTransactionRemovalOptions.getUsedSessionsRatioThreshold(), 0.0);
diff --git a/session-and-channel-pool-configuration.md b/session-and-channel-pool-configuration.md
index 838208aea8c..3a5bde5d3ab 100644
--- a/session-and-channel-pool-configuration.md
+++ b/session-and-channel-pool-configuration.md
@@ -281,3 +281,84 @@ This will cause the following to happen internally in the client library:
1. The `TransactionRunner` will automatically commit the transaction if the supplied user code
finished without any errors. The `Commit` RPC that is invoked uses a thread from the default gRPC
thread pool.
+
+### Session Leak
+A `DatabaseClient` object of the Client Library has a limit on the number of maximum sessions. For example the
+default value of `MaxSessions` in the Java Client Library is 400. You can configure these values at the time of
+creating a `Spanner` instance by setting custom `SessionPoolOptions`. When all the sessions are checked
+out of the session pool, every new transaction has to wait until a session is returned to the pool.
+If a session is never returned to the pool (hence causing a session leak), the transactions will have to wait
+indefinitely and your application will be blocked.
+
+#### Common Root Causes
+The most common reason for session leaks in the Java client library are:
+1. Not closing a `ResultSet` that is returned by `executeQuery`. Always put `ResultSet` objects in a try-with-resources block, or take other measures to ensure that the `ResultSet` is always closed.
+2. Not closing a `ReadOnlyTransaction` when you no longer need it. Always put `ReadOnlyTransaction` objects in a try-with-resources block, or take other measures to ensure that the `ReadOnlyTransaction` is always closed.
+3. Not closing a `TransactionManager` when you no longer need it. Always put `TransactionManager` objects in a try-with-resources block, or take other measures to ensure that the `TransactionManager` is always closed.
+
+As shown in the example below, the `try-with-resources` block releases the session after it is complete.
+If you don't use `try-with-resources` block, unless you explicitly call the `close()` method on all resources
+such as `ResultSet`, the session is not released back to the pool.
+
+```java
+DatabaseClient client =
+ spanner.getDatabaseClient(DatabaseId.of("my-project", "my-instance", "my-database"));
+try (ResultSet resultSet =
+ client.singleUse().executeQuery(Statement.of("select col1, col2 from my_table"))) {
+ while (resultSet.next()) {
+ // use the results.
+ }
+}
+```
+
+#### Debugging and Resolving Session Leaks
+
+##### Logging
+Enabled by default, the logging option shares warn logs when you have exhausted >95% of your session pool.
+This could mean two things, either you need to increase the max sessions in your session pool (as the number
+of queries run using the client side database object is greater than your session pool can serve) or you may
+have a session leak.
+
+To help debug which transactions may be causing this session leak, the logs will also contain stack traces of
+transactions which have been running longer than expected. The logs are pushed to a destination based on
+how the log exporter is configured for the host application.
+
+``` java
+final SessionPoolOptions sessionPoolOptions =
+ SessionPoolOptions.newBuilder().setWarnIfInactiveTransactions().build()
+
+final Spanner spanner =
+ SpannerOptions.newBuilder()
+ .setSessionPoolOption(sessionPoolOptions)
+ .build()
+ .getService();
+final DatabaseClient client = spanner.getDatabaseClient(databaseId);
+
+// Example Log message to warn presence of long running transactions
+// Detected long-running session . To automatically remove long-running sessions, set SessionOption ActionOnInactiveTransaction
+// to WARN_AND_CLOSE by invoking setWarnAndCloseIfInactiveTransactions() method.
+
+```
+##### Automatically clean inactive transactions
+When the option to automatically clean inactive transactions is enabled, the client library will automatically spot
+problematic transactions that are running for extremely long periods of time (thus causing session leaks) and close them.
+The session will be removed from the pool and be replaced by a new session. To dig deeper into which transactions are being
+closed, you can check the logs to see the stack trace of the transactions which might be causing these leaks and further
+debug them.
+
+``` java
+final SessionPoolOptions sessionPoolOptions =
+ SessionPoolOptions.newBuilder().setWarnAndCloseIfInactiveTransactions().build()
+
+final Spanner spanner =
+ SpannerOptions.newBuilder()
+ .setSessionPoolOption(sessionPoolOptions)
+ .build()
+ .getService();
+final DatabaseClient client = spanner.getDatabaseClient(databaseId);
+
+// Example Log message for when transaction is recycled
+// Removing long-running session
+```
+
+
From 7820be8a0acd619187e0a4aee105a46cc6f56f76 Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Wed, 15 Nov 2023 15:26:02 +0530
Subject: [PATCH 7/7] chore(main): release 6.54.0 (#2731)
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
---
CHANGELOG.md | 18 +++++++++++++++++
google-cloud-spanner-bom/pom.xml | 20 +++++++++----------
google-cloud-spanner-executor/pom.xml | 4 ++--
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 16 +++++++--------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 16 +++++++--------
13 files changed, 61 insertions(+), 43 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 87ce0729e17..fd5ffef8a8b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,23 @@
# Changelog
+## [6.54.0](https://github.com/googleapis/java-spanner/compare/v6.53.0...v6.54.0) (2023-11-15)
+
+
+### Features
+
+* Enable session leaks prevention by cleaning up long-running tra… ([#2655](https://github.com/googleapis/java-spanner/issues/2655)) ([faa7e5d](https://github.com/googleapis/java-spanner/commit/faa7e5dff17897b0432bc505b7ed24c33805f418))
+
+
+### Bug Fixes
+
+* Copy backup issue when backup is done across different instance IDs ([#2732](https://github.com/googleapis/java-spanner/issues/2732)) ([7f6b158](https://github.com/googleapis/java-spanner/commit/7f6b1582770d2270efc9501136afb17a2677eaeb))
+* Respect SPANNER_EMULATOR_HOST env var when autoConfigEmulator=true ([#2730](https://github.com/googleapis/java-spanner/issues/2730)) ([9c19934](https://github.com/googleapis/java-spanner/commit/9c19934a6170232f6ac2478ef9bfcdb2914d2562))
+
+
+### Dependencies
+
+* Update dependency com.google.cloud:google-cloud-trace to v2.30.0 ([#2725](https://github.com/googleapis/java-spanner/issues/2725)) ([8618042](https://github.com/googleapis/java-spanner/commit/8618042bb716d8a6626bacee59f9e6c6f0d50362))
+
## [6.53.0](https://github.com/googleapis/java-spanner/compare/v6.52.1...v6.53.0) (2023-11-06)
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index c598b539aeb..61d6814f37f 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.53.1-SNAPSHOT
+ 6.54.0
pom
com.google.cloud
@@ -53,48 +53,48 @@
com.google.cloud
google-cloud-spanner
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.cloud
google-cloud-spanner-executor
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.cloud
google-cloud-spanner
test-jar
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml
index c71462b10c2..17675ef3dab 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.53.1-SNAPSHOT
+ 6.54.0
jar
Google Cloud Spanner Executor
com.google.cloud
google-cloud-spanner-parent
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 561dd1a258c..20798535ef3 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.53.1-SNAPSHOT
+ 6.54.0
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.53.1-SNAPSHOT
+ 6.54.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 6222d319a3b..792e4cac520 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.53.1-SNAPSHOT
+ 6.54.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.53.1-SNAPSHOT
+ 6.54.0
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index eb8b7790be7..0319d425de8 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.53.1-SNAPSHOT
+ 6.54.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.53.1-SNAPSHOT
+ 6.54.0
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 5fa3eee1887..b41557eb925 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.53.1-SNAPSHOT
+ 6.54.0
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/pom.xml b/pom.xml
index 6f1cba5cf07..d2f7f2164ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.53.1-SNAPSHOT
+ 6.54.0
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -62,37 +62,37 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.53.1-SNAPSHOT
+ 6.54.0
com.google.cloud
google-cloud-spanner
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index b62a80b6b02..1c0aa7430a0 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.53.1-SNAPSHOT
+ 6.54.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.53.1-SNAPSHOT
+ 6.54.0
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index d91bd1b395c..44ba78b3798 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.53.1-SNAPSHOT
+ 6.54.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.53.1-SNAPSHOT
+ 6.54.0
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 7908cd8d155..606afcbbd03 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.53.1-SNAPSHOT
+ 6.54.0
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 59a1f25ed61..0335c856556 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.53.1-SNAPSHOT
+ 6.54.0
diff --git a/versions.txt b/versions.txt
index b02647957a2..25eff258b3d 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,11 +1,11 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.1-SNAPSHOT
-proto-google-cloud-spanner-v1:6.53.0:6.53.1-SNAPSHOT
-proto-google-cloud-spanner-admin-database-v1:6.53.0:6.53.1-SNAPSHOT
-grpc-google-cloud-spanner-v1:6.53.0:6.53.1-SNAPSHOT
-grpc-google-cloud-spanner-admin-instance-v1:6.53.0:6.53.1-SNAPSHOT
-grpc-google-cloud-spanner-admin-database-v1:6.53.0:6.53.1-SNAPSHOT
-google-cloud-spanner:6.53.0:6.53.1-SNAPSHOT
-google-cloud-spanner-executor:6.53.0:6.53.1-SNAPSHOT
+proto-google-cloud-spanner-admin-instance-v1:6.54.0:6.54.0
+proto-google-cloud-spanner-v1:6.54.0:6.54.0
+proto-google-cloud-spanner-admin-database-v1:6.54.0:6.54.0
+grpc-google-cloud-spanner-v1:6.54.0:6.54.0
+grpc-google-cloud-spanner-admin-instance-v1:6.54.0:6.54.0
+grpc-google-cloud-spanner-admin-database-v1:6.54.0:6.54.0
+google-cloud-spanner:6.54.0:6.54.0
+google-cloud-spanner-executor:6.54.0:6.54.0