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