diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml index 20fd1993c80..cd895beee2e 100644 --- a/.github/blunderbuss.yml +++ b/.github/blunderbuss.yml @@ -1,7 +1,7 @@ # Configuration for the Blunderbuss GitHub app. For more info see # https://github.com/googleapis/repo-automation-bots/tree/main/packages/blunderbuss assign_issues: - - arpan14 + - rahul2393 assign_prs_by: - labels: - samples diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml index 55757cde3bc..1d7e28014c4 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.28.1 + uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.29.0 with: bom-path: google-cloud-spanner-bom/pom.xml diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg index c2a88196e84..326361c6b5e 100644 --- a/.kokoro/presubmit/graalvm-native-17.cfg +++ b/.kokoro/presubmit/graalvm-native-17.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.28.1" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.29.0" } env_vars: { diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg index 94e00cbaa0a..1b1d4c4bfe3 100644 --- a/.kokoro/presubmit/graalvm-native.cfg +++ b/.kokoro/presubmit/graalvm-native.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.28.1" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.29.0" } env_vars: { diff --git a/.repo-metadata.json b/.repo-metadata.json index d047e61ba9c..80355fa2aff 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -16,6 +16,7 @@ "requires_billing": true, "codeowner_team": "@googleapis/api-spanner-java", "library_type": "GAPIC_COMBO", - "excluded_poms": "google-cloud-spanner-bom" + "excluded_poms": "google-cloud-spanner-bom", + "recommended_package": "com.google.cloud.spanner" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 6081c97954a..24f68a8a7f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## [6.65.0](https://github.com/googleapis/java-spanner/compare/v6.64.0...v6.65.0) (2024-04-20) + + +### Features + +* Remove grpclb ([#2760](https://github.com/googleapis/java-spanner/issues/2760)) ([1df09d9](https://github.com/googleapis/java-spanner/commit/1df09d9b9189c5527de91189a063ecc15779ac77)) +* Support client-side hints for tags and priority ([#3005](https://github.com/googleapis/java-spanner/issues/3005)) ([48828df](https://github.com/googleapis/java-spanner/commit/48828df3489465bb53a18be50808fbd435f3e896)), closes [#2978](https://github.com/googleapis/java-spanner/issues/2978) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.39.0 ([#3001](https://github.com/googleapis/java-spanner/issues/3001)) ([6cec1bf](https://github.com/googleapis/java-spanner/commit/6cec1bf1bb44a52c62c2310447c6a068a88209ea)) +* NullPointerException on AbstractReadContext.span ([#3036](https://github.com/googleapis/java-spanner/issues/3036)) ([55732fd](https://github.com/googleapis/java-spanner/commit/55732fd107ac1d3b8c16eee198c904d54d98b2b4)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.29.0 ([#3045](https://github.com/googleapis/java-spanner/issues/3045)) ([67a6534](https://github.com/googleapis/java-spanner/commit/67a65346d5a01d118d5220230e3bed6db7e79a33)) +* Update dependency commons-cli:commons-cli to v1.7.0 ([#3043](https://github.com/googleapis/java-spanner/issues/3043)) ([9fea7a3](https://github.com/googleapis/java-spanner/commit/9fea7a30e90227e735ad3595f4ca58dfb1ca1b93)) + ## [6.64.0](https://github.com/googleapis/java-spanner/compare/v6.63.0...v6.64.0) (2024-04-12) diff --git a/README.md b/README.md index 0526b78e237..0417e7f9a4f 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: com.google.cloud libraries-bom - 26.36.0 + 26.37.0 pom import @@ -42,7 +42,7 @@ If you are using Maven without the BOM, add this to your dependencies: com.google.cloud google-cloud-spanner - 6.63.0 + 6.64.0 ``` @@ -57,13 +57,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.63.0' +implementation 'com.google.cloud:google-cloud-spanner:6.64.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.63.0" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.64.0" ``` @@ -650,7 +650,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.63.0 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.64.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-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index 2e58b597a98..19331d33f0c 100644 --- a/google-cloud-spanner-bom/pom.xml +++ b/google-cloud-spanner-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-spanner-bom - 6.64.0 + 6.65.0 pom com.google.cloud sdk-platform-java-config - 3.28.1 + 3.29.0 Google Cloud Spanner BOM @@ -53,43 +53,43 @@ com.google.cloud google-cloud-spanner - 6.64.0 + 6.65.0 com.google.cloud google-cloud-spanner test-jar - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.64.0 + 6.65.0 diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index b61e3b65513..4cae5076d45 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.64.0 + 6.65.0 jar Google Cloud Spanner Executor com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 @@ -129,7 +129,7 @@ commons-cli commons-cli - 1.6.0 + 1.7.0 commons-io diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java index cb96087cc6c..2b8c17ada97 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/spanner/executor/v1/stub/SpannerExecutorProxyStubSettings.java @@ -107,15 +107,6 @@ public SpannerExecutorProxyStub createStub() throws IOException { "Transport not supported: %s", getTransportChannelProvider().getTransportName())); } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - /** Returns the default service name. */ @Override public String getServiceName() { @@ -273,15 +264,6 @@ public Builder applyToAllUnaryMethods( return executeActionAsyncSettings; } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - @Override public SpannerExecutorProxyStubSettings build() throws IOException { return new SpannerExecutorProxyStubSettings(this); diff --git a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json index 71898e0bba2..b2933abb24e 100644 --- a/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json +++ b/google-cloud-spanner-executor/src/main/resources/META-INF/native-image/com.google.cloud.spanner.executor.v1/reflect-config.json @@ -2708,6 +2708,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.FulfillmentPeriod", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.GetInstanceConfigRequest", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index fd0477c6716..5fea47fe9a8 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -649,4 +649,12 @@ com/google/cloud/spanner/connection/Connection void setMaxCommitDelay(java.time.Duration) + + + + 7012 + com/google/cloud/spanner/connection/Connection + com.google.cloud.spanner.Spanner getSpanner() + + diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index b9bd156201b..0a8c69b7b1d 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.64.0 + 6.65.0 jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,7 +11,7 @@ com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 google-cloud-spanner @@ -151,7 +151,7 @@ org.apache.maven.plugins maven-dependency-plugin - io.grpc:grpc-protobuf-lite,org.hamcrest:hamcrest,org.hamcrest:hamcrest-core,com.google.errorprone:error_prone_annotations,org.openjdk.jmh:jmh-generator-annprocess,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,javax.annotation:javax.annotation-api,io.opencensus:opencensus-impl,org.graalvm.sdk:graal-sdk,io.grpc:grpc-grpclb,io.grpc:grpc-googleapis,io.grpc:grpc-rls,com.google.api.grpc:proto-google-cloud-spanner-executor-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1 + io.grpc:grpc-protobuf-lite,org.hamcrest:hamcrest,org.hamcrest:hamcrest-core,com.google.errorprone:error_prone_annotations,org.openjdk.jmh:jmh-generator-annprocess,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,javax.annotation:javax.annotation-api,io.opencensus:opencensus-impl,org.graalvm.sdk:graal-sdk,io.grpc:grpc-googleapis,io.grpc:grpc-rls,com.google.api.grpc:proto-google-cloud-spanner-executor-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1 @@ -325,11 +325,6 @@ io.grpc grpc-alts - - io.grpc - grpc-grpclb - runtime - io.grpc grpc-googleapis diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java index 21b0bb2224a..03dff9f7609 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbortedException.java @@ -46,4 +46,12 @@ public class AbortedException extends SpannerException { @Nullable ApiException apiException) { super(token, ErrorCode.ABORTED, IS_RETRYABLE, message, cause, apiException); } + + /** + * Returns true if this aborted exception was returned by the emulator, and was caused by another + * transaction already being active on the emulator. + */ + public boolean isEmulatorOnlySupportsOneTransactionException() { + return getMessage().endsWith("The emulator only supports one transaction at a time."); + } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java index ae18a1e4f5f..d452f84e2c3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java @@ -73,7 +73,7 @@ abstract static class Builder, T extends AbstractReadCon private DecodeMode defaultDecodeMode = SpannerOptions.Builder.DEFAULT_DECODE_MODE; private DirectedReadOptions defaultDirectedReadOption; private ExecutorProvider executorProvider; - private Clock clock = new Clock(); + private Clock clock = Clock.INSTANCE; Builder() {} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java index bb3507eeb48..4fbe841cd84 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Clock.java @@ -23,6 +23,10 @@ * Clock. */ class Clock { + static final Clock INSTANCE = new Clock(); + + Clock() {} + Instant instant() { return Instant.now(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java index e9c9818f451..c89cce9a79e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java @@ -21,6 +21,7 @@ import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; import com.google.cloud.spanner.SessionPool.PooledSessionFuture; +import com.google.cloud.spanner.SessionPool.SessionFutureWrapper; import com.google.cloud.spanner.SpannerImpl.ClosedException; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; @@ -52,6 +53,11 @@ PooledSessionFuture getSession() { return pool.getSession(); } + @VisibleForTesting + SessionFutureWrapper getMultiplexedSession() { + return pool.getMultiplexedSessionWithFallback(); + } + @Override public Dialect getDialect() { return pool.getDialect(); @@ -123,7 +129,7 @@ public ServerStream batchWriteAtLeastOnce( public ReadContext singleUse() { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().singleUse(); + return getMultiplexedSession().singleUse(); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -135,7 +141,7 @@ public ReadContext singleUse() { public ReadContext singleUse(TimestampBound bound) { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().singleUse(bound); + return getMultiplexedSession().singleUse(bound); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -147,7 +153,7 @@ public ReadContext singleUse(TimestampBound bound) { public ReadOnlyTransaction singleUseReadOnlyTransaction() { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().singleUseReadOnlyTransaction(); + return getMultiplexedSession().singleUseReadOnlyTransaction(); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -159,7 +165,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction() { public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().singleUseReadOnlyTransaction(bound); + return getMultiplexedSession().singleUseReadOnlyTransaction(bound); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -171,7 +177,7 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { public ReadOnlyTransaction readOnlyTransaction() { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().readOnlyTransaction(); + return getMultiplexedSession().readOnlyTransaction(); } catch (RuntimeException e) { span.setStatus(e); span.end(); @@ -183,7 +189,7 @@ public ReadOnlyTransaction readOnlyTransaction() { public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { ISpan span = tracer.spanBuilder(READ_ONLY_TRANSACTION); try (IScope s = tracer.withSpan(span)) { - return getSession().readOnlyTransaction(bound); + return getMultiplexedSession().readOnlyTransaction(bound); } catch (RuntimeException e) { span.setStatus(e); span.end(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java index 161397bba00..84cba59d54f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MetricRegistryConstants.java @@ -30,6 +30,9 @@ class MetricRegistryConstants { LabelKey.create("instance_id", "Name of the instance"); private static final LabelKey LIBRARY_VERSION = LabelKey.create("library_version", "Library version"); + static final LabelKey IS_MULTIPLEXED_KEY = + LabelKey.create("is_multiplexed", "Multiplexed Session"); + private static final LabelKey SESSION_TYPE = LabelKey.create("Type", "Type of the Sessions"); /** The label value is used to represent missing value. */ @@ -62,6 +65,9 @@ class MetricRegistryConstants { static final ImmutableList SPANNER_DEFAULT_LABEL_VALUES = ImmutableList.of(UNSET_LABEL, UNSET_LABEL, UNSET_LABEL, UNSET_LABEL); + static final ImmutableList SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS = + ImmutableList.of(CLIENT_ID, DATABASE, INSTANCE_ID, LIBRARY_VERSION, IS_MULTIPLEXED_KEY); + /** Unit to represent counts. */ static final String COUNT = "1"; @@ -80,7 +86,6 @@ class MetricRegistryConstants { static final String NUM_SESSIONS_AVAILABLE = "spanner/num_available_sessions"; static final String SESSIONS_TYPE = "session_type"; static final String IS_MULTIPLEXED = "is_multiplexed"; - static final String MAX_IN_USE_SESSIONS_DESCRIPTION = "The maximum number of sessions in use during the last 10 minute interval."; static final String MAX_ALLOWED_SESSIONS_DESCRIPTION = diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java index 26d6e962116..0eed13b018c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java @@ -215,8 +215,10 @@ SessionImpl createSession() { spanner.getOptions().getDatabaseRole(), spanner.getOptions().getSessionLabels(), options); - return new SessionImpl( - spanner, session.getName(), session.getCreateTime(), session.getMultiplexed(), options); + SessionReference sessionReference = + new SessionReference( + session.getName(), session.getCreateTime(), session.getMultiplexed(), options); + return new SessionImpl(spanner, sessionReference); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -248,7 +250,9 @@ void createMultiplexedSession(SessionConsumer consumer) { true); SessionImpl sessionImpl = new SessionImpl( - spanner, session.getName(), session.getCreateTime(), session.getMultiplexed(), null); + spanner, + new SessionReference( + session.getName(), session.getCreateTime(), session.getMultiplexed(), null)); consumer.onSessionReady(sessionImpl); } catch (Throwable t) { span.setStatus(t); @@ -258,6 +262,61 @@ void createMultiplexedSession(SessionConsumer consumer) { } } + /** + * Create a multiplexed session asynchronously and returns it to the given {@link + * SessionConsumer}. A multiplexed session is not affiliated with any GRPC channel. The given + * {@link SessionConsumer} is guaranteed to eventually get exactly 1 multiplexed session unless an + * error occurs. In case of an error on the gRPC calls, the consumer will receive one {@link + * SessionConsumer#onSessionCreateFailure(Throwable, int)} call with the error. + * + * @param consumer The {@link SessionConsumer} to use for callbacks when sessions are available. + */ + void asyncCreateMultiplexedSession(SessionConsumer consumer) { + try { + executor.submit(new CreateMultiplexedSessionsRunnable(consumer)); + } catch (Throwable t) { + consumer.onSessionCreateFailure(t, 1); + } + } + + private final class CreateMultiplexedSessionsRunnable implements Runnable { + private final SessionConsumer consumer; + + private CreateMultiplexedSessionsRunnable(SessionConsumer consumer) { + Preconditions.checkNotNull(consumer); + this.consumer = consumer; + } + + @Override + public void run() { + ISpan span = spanner.getTracer().spanBuilder(SpannerImpl.CREATE_MULTIPLEXED_SESSION); + try (IScope s = spanner.getTracer().withSpan(span)) { + com.google.spanner.v1.Session session = + spanner + .getRpc() + .createSession( + db.getName(), + spanner.getOptions().getDatabaseRole(), + spanner.getOptions().getSessionLabels(), + null, + true); + SessionImpl sessionImpl = + new SessionImpl( + spanner, + new SessionReference( + session.getName(), session.getCreateTime(), session.getMultiplexed(), null)); + span.addAnnotation( + String.format("Request for %d multiplexed session returned %d session", 1, 1)); + consumer.onSessionReady(sessionImpl); + } catch (Throwable t) { + span.setStatus(t); + consumer.onSessionCreateFailure(t, 1); + } finally { + span.end(); + } + } + } + /** * Asynchronously creates a batch of sessions and returns these to the given {@link * SessionConsumer}. This method may split the actual session creation over several gRPC calls in @@ -348,10 +407,11 @@ private List internalBatchCreateSessions( res.add( new SessionImpl( spanner, - session.getName(), - session.getCreateTime(), - session.getMultiplexed(), - options)); + new SessionReference( + session.getName(), + session.getCreateTime(), + session.getMultiplexed(), + options))); } return res; } catch (RuntimeException e) { @@ -367,6 +427,6 @@ SessionImpl sessionWithId(String name) { synchronized (this) { options = optionMap(SessionOption.channelHint(sessionChannelCounter++)); } - return new SessionImpl(spanner, name, options); + return new SessionImpl(spanner, new SessionReference(name, options)); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index 436c670d58c..8d7dcb34756 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -17,7 +17,6 @@ package com.google.cloud.spanner; import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; -import static com.google.common.base.Preconditions.checkNotNull; import com.google.api.core.ApiFuture; import com.google.api.core.SettableApiFuture; @@ -28,7 +27,6 @@ import com.google.cloud.spanner.AbstractReadContext.SingleUseReadOnlyTransaction; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; -import com.google.cloud.spanner.SessionClient.SessionId; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.common.base.Ticker; @@ -97,49 +95,25 @@ interface SessionTransaction { } private final SpannerImpl spanner; - private final String name; - private final DatabaseId databaseId; + private final SessionReference sessionReference; private SessionTransaction activeTransaction; - private final Map options; - private volatile Instant lastUseTime; - @Nullable private final Instant createTime; - private final boolean isMultiplexed; private ISpan currentSpan; + private final Clock clock; - SessionImpl(SpannerImpl spanner, String name, Map options) { + SessionImpl(SpannerImpl spanner, SessionReference sessionReference) { this.spanner = spanner; this.tracer = spanner.getTracer(); - this.options = options; - this.name = checkNotNull(name); - this.databaseId = SessionId.of(name).getDatabaseId(); - this.lastUseTime = Instant.now(); - this.createTime = null; - this.isMultiplexed = false; - } - - SessionImpl( - SpannerImpl spanner, - String name, - com.google.protobuf.Timestamp createTime, - boolean isMultiplexed, - Map options) { - this.spanner = spanner; - this.tracer = spanner.getTracer(); - this.options = options; - this.name = checkNotNull(name); - this.databaseId = SessionId.of(name).getDatabaseId(); - this.lastUseTime = Instant.now(); - this.createTime = convert(createTime); - this.isMultiplexed = isMultiplexed; + this.sessionReference = sessionReference; + this.clock = spanner.getOptions().getSessionPoolOptions().getPoolMaintainerClock(); } @Override public String getName() { - return name; + return sessionReference.getName(); } Map getOptions() { - return options; + return sessionReference.getOptions(); } void setCurrentSpan(ISpan span) { @@ -151,19 +125,27 @@ ISpan getCurrentSpan() { } Instant getLastUseTime() { - return lastUseTime; + return sessionReference.getLastUseTime(); } Instant getCreateTime() { - return createTime; + return sessionReference.getCreateTime(); } boolean getIsMultiplexed() { - return isMultiplexed; + return sessionReference.getIsMultiplexed(); + } + + SessionReference getSessionReference() { + return sessionReference; } void markUsed(Instant instant) { - lastUseTime = instant; + sessionReference.markUsed(instant); + } + + public DatabaseId getDatabaseId() { + return sessionReference.getDatabaseId(); } @Override @@ -211,7 +193,7 @@ public CommitResponse writeAtLeastOnceWithOptions( Options options = Options.fromTransactionOptions(transactionOptions); final CommitRequest.Builder requestBuilder = CommitRequest.newBuilder() - .setSession(name) + .setSession(getName()) .setReturnCommitStats(options.withCommitStats()) .addAllMutations(mutationsProto); @@ -239,7 +221,7 @@ public CommitResponse writeAtLeastOnceWithOptions( ISpan span = tracer.spanBuilder(SpannerImpl.COMMIT); try (IScope s = tracer.withSpan(span)) { return SpannerRetryHelper.runTxWithRetriesOnAborted( - () -> new CommitResponse(spanner.getRpc().commit(request, this.options))); + () -> new CommitResponse(spanner.getRpc().commit(request, getOptions()))); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -271,7 +253,9 @@ public ServerStream batchWriteAtLeastOnce( List mutationGroupsProto = MutationGroup.toListProto(mutationGroups); final BatchWriteRequest.Builder requestBuilder = - BatchWriteRequest.newBuilder().setSession(name).addAllMutationGroups(mutationGroupsProto); + BatchWriteRequest.newBuilder() + .setSession(getName()) + .addAllMutationGroups(mutationGroupsProto); RequestOptions batchWriteRequestOptions = getRequestOptions(transactionOptions); if (batchWriteRequestOptions != null) { requestBuilder.setRequestOptions(batchWriteRequestOptions); @@ -282,7 +266,7 @@ public ServerStream batchWriteAtLeastOnce( } ISpan span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE); try (IScope s = tracer.withSpan(span)) { - return spanner.getRpc().batchWriteAtLeastOnce(requestBuilder.build(), this.options); + return spanner.getRpc().batchWriteAtLeastOnce(requestBuilder.build(), getOptions()); } catch (Throwable e) { span.setStatus(e); throw SpannerExceptionFactory.newSpannerException(e); @@ -303,13 +287,14 @@ public ReadContext singleUse(TimestampBound bound) { .setSession(this) .setTimestampBound(bound) .setRpc(spanner.getRpc()) - .setDefaultQueryOptions(spanner.getDefaultQueryOptions(databaseId)) + .setDefaultQueryOptions(spanner.getDefaultQueryOptions(getDatabaseId())) .setDefaultPrefetchChunks(spanner.getDefaultPrefetchChunks()) .setDefaultDecodeMode(spanner.getDefaultDecodeMode()) .setDefaultDirectedReadOptions(spanner.getOptions().getDirectedReadOptions()) .setSpan(currentSpan) .setTracer(tracer) .setExecutorProvider(spanner.getAsyncExecutorProvider()) + .setClock(clock) .build()); } @@ -325,13 +310,14 @@ public ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { .setSession(this) .setTimestampBound(bound) .setRpc(spanner.getRpc()) - .setDefaultQueryOptions(spanner.getDefaultQueryOptions(databaseId)) + .setDefaultQueryOptions(spanner.getDefaultQueryOptions(getDatabaseId())) .setDefaultPrefetchChunks(spanner.getDefaultPrefetchChunks()) .setDefaultDecodeMode(spanner.getDefaultDecodeMode()) .setDefaultDirectedReadOptions(spanner.getOptions().getDirectedReadOptions()) .setSpan(currentSpan) .setTracer(tracer) .setExecutorProvider(spanner.getAsyncExecutorProvider()) + .setClock(clock) .buildSingleUseReadOnlyTransaction()); } @@ -347,13 +333,14 @@ public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { .setSession(this) .setTimestampBound(bound) .setRpc(spanner.getRpc()) - .setDefaultQueryOptions(spanner.getDefaultQueryOptions(databaseId)) + .setDefaultQueryOptions(spanner.getDefaultQueryOptions(getDatabaseId())) .setDefaultPrefetchChunks(spanner.getDefaultPrefetchChunks()) .setDefaultDecodeMode(spanner.getDefaultDecodeMode()) .setDefaultDirectedReadOptions(spanner.getOptions().getDirectedReadOptions()) .setSpan(currentSpan) .setTracer(tracer) .setExecutorProvider(spanner.getAsyncExecutorProvider()) + .setClock(clock) .build()); } @@ -379,14 +366,14 @@ public AsyncTransactionManagerImpl transactionManagerAsync(TransactionOption... @Override public ApiFuture asyncClose() { - return spanner.getRpc().asyncDeleteSession(name, options); + return spanner.getRpc().asyncDeleteSession(getName(), getOptions()); } @Override public void close() { ISpan span = tracer.spanBuilder(SpannerImpl.DELETE_SESSION); try (IScope s = tracer.withSpan(span)) { - spanner.getRpc().deleteSession(name, options); + spanner.getRpc().deleteSession(getName(), getOptions()); } catch (RuntimeException e) { span.setStatus(e); throw e; @@ -400,11 +387,11 @@ ApiFuture beginTransactionAsync(Options transactionOptions, boolean final ISpan span = tracer.spanBuilder(SpannerImpl.BEGIN_TRANSACTION); final BeginTransactionRequest request = BeginTransactionRequest.newBuilder() - .setSession(name) + .setSession(getName()) .setOptions(createReadWriteTransactionOptions(transactionOptions)) .build(); final ApiFuture requestFuture = - spanner.getRpc().beginTransactionAsync(request, options, routeToLeader); + spanner.getRpc().beginTransactionAsync(request, getOptions(), routeToLeader); requestFuture.addListener( () -> { try (IScope s = tracer.withSpan(span)) { @@ -436,9 +423,6 @@ ApiFuture beginTransactionAsync(Options transactionOptions, boolean } TransactionContextImpl newTransaction(Options options) { - // A clock instance is passed in {@code SessionPoolOptions} in order to allow mocking via tests. - final Clock poolMaintainerClock = - spanner.getOptions().getSessionPoolOptions().getPoolMaintainerClock(); return TransactionContextImpl.newBuilder() .setSession(this) .setOptions(options) @@ -446,21 +430,23 @@ TransactionContextImpl newTransaction(Options options) { .setOptions(options) .setTrackTransactionStarter(spanner.getOptions().isTrackTransactionStarter()) .setRpc(spanner.getRpc()) - .setDefaultQueryOptions(spanner.getDefaultQueryOptions(databaseId)) + .setDefaultQueryOptions(spanner.getDefaultQueryOptions(getDatabaseId())) .setDefaultPrefetchChunks(spanner.getDefaultPrefetchChunks()) .setDefaultDecodeMode(spanner.getDefaultDecodeMode()) .setSpan(currentSpan) .setTracer(tracer) .setExecutorProvider(spanner.getAsyncExecutorProvider()) - .setClock(poolMaintainerClock == null ? new Clock() : poolMaintainerClock) + .setClock(clock) .build(); } T setActive(@Nullable T ctx) { throwIfTransactionsPending(); - - if (activeTransaction != null) { - activeTransaction.invalidate(); + // multiplexed sessions support running concurrent transactions + if (!getIsMultiplexed()) { + if (activeTransaction != null) { + activeTransaction.invalidate(); + } } activeTransaction = ctx; if (activeTransaction != null) { @@ -472,11 +458,4 @@ T setActive(@Nullable T ctx) { TraceWrapper getTracer() { return tracer; } - - private Instant convert(com.google.protobuf.Timestamp timestamp) { - if (timestamp == null) { - return null; - } - return Instant.ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos()); - } } 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 f4c04e4c78b..ba0031e587a 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 @@ -40,7 +40,9 @@ import static com.google.cloud.spanner.MetricRegistryConstants.SESSIONS_TYPE; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_DEFAULT_LABEL_VALUES; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS; +import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_TYPE; +import static com.google.cloud.spanner.SpannerExceptionFactory.asSpannerException; import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException; import static com.google.common.base.Preconditions.checkState; @@ -141,6 +143,14 @@ void maybeWaitOnMinSessions() { ErrorCode.DEADLINE_EXCEEDED, "Timed out after waiting " + timeoutMillis + "ms for session pool creation"); } + + if (options.getUseMultiplexedSession() + && !waitOnMultiplexedSessionsLatch.await(timeoutNanos, TimeUnit.NANOSECONDS)) { + final long timeoutMillis = options.getWaitForMinSessions().toMillis(); + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.DEADLINE_EXCEEDED, + "Timed out after waiting " + timeoutMillis + "ms for multiplexed session creation"); + } } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } @@ -1074,7 +1084,7 @@ public ApiFuture runAsync(final AsyncWork work, Executor executor) { r = runner.runAsync(work, MoreExecutors.directExecutor()).get(); break; } catch (ExecutionException e) { - se = SpannerExceptionFactory.asSpannerException(e.getCause()); + se = asSpannerException(e.getCause()); } catch (InterruptedException e) { se = SpannerExceptionFactory.propagateInterrupt(e); } catch (Throwable t) { @@ -1158,10 +1168,86 @@ private PooledSessionFuture createPooledSessionFuture( } /** Wrapper class for the {@link SessionFuture} implementations. */ - interface SessionFutureWrapper { + interface SessionFutureWrapper extends DatabaseClient { /** Method to resolve {@link SessionFuture} implementation for different use-cases. */ T get(); + + default Dialect getDialect() { + return get().getDialect(); + } + + default String getDatabaseRole() { + return get().getDatabaseRole(); + } + + default Timestamp write(Iterable mutations) throws SpannerException { + return get().write(mutations); + } + + default CommitResponse writeWithOptions( + Iterable mutations, TransactionOption... options) throws SpannerException { + return get().writeWithOptions(mutations, options); + } + + default Timestamp writeAtLeastOnce(Iterable mutations) throws SpannerException { + return get().writeAtLeastOnce(mutations); + } + + default CommitResponse writeAtLeastOnceWithOptions( + Iterable mutations, TransactionOption... options) throws SpannerException { + return get().writeAtLeastOnceWithOptions(mutations, options); + } + + default ServerStream batchWriteAtLeastOnce( + Iterable mutationGroups, TransactionOption... options) + throws SpannerException { + return get().batchWriteAtLeastOnce(mutationGroups, options); + } + + default ReadContext singleUse() { + return get().singleUse(); + } + + default ReadContext singleUse(TimestampBound bound) { + return get().singleUse(bound); + } + + default ReadOnlyTransaction singleUseReadOnlyTransaction() { + return get().singleUseReadOnlyTransaction(); + } + + default ReadOnlyTransaction singleUseReadOnlyTransaction(TimestampBound bound) { + return get().singleUseReadOnlyTransaction(bound); + } + + default ReadOnlyTransaction readOnlyTransaction() { + return get().readOnlyTransaction(); + } + + default ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) { + return get().readOnlyTransaction(bound); + } + + default TransactionRunner readWriteTransaction(TransactionOption... options) { + return get().readWriteTransaction(options); + } + + default TransactionManager transactionManager(TransactionOption... options) { + return get().transactionManager(options); + } + + default AsyncRunner runAsync(TransactionOption... options) { + return get().runAsync(options); + } + + default AsyncTransactionManager transactionManagerAsync(TransactionOption... options) { + return get().transactionManagerAsync(options); + } + + default long executePartitionedUpdate(Statement stmt, UpdateOption... options) { + return get().executePartitionedUpdate(stmt, options); + } } class PooledSessionFutureWrapper implements SessionFutureWrapper { @@ -1178,22 +1264,35 @@ public PooledSessionFuture get() { } class MultiplexedSessionFutureWrapper implements SessionFutureWrapper { - SettableApiFuture multiplexedSessionSettableApiFuture; + private ISpan span; + private volatile MultiplexedSessionFuture multiplexedSessionFuture; - public MultiplexedSessionFutureWrapper( - SettableApiFuture multiplexedSessionSettableApiFuture) { - this.multiplexedSessionSettableApiFuture = multiplexedSessionSettableApiFuture; + public MultiplexedSessionFutureWrapper(ISpan span) { + this.span = span; } @Override public MultiplexedSessionFuture get() { - try { - return this.multiplexedSessionSettableApiFuture.get(); - } catch (InterruptedException interruptedException) { - throw SpannerExceptionFactory.propagateInterrupt(interruptedException); - } catch (ExecutionException executionException) { - throw SpannerExceptionFactory.asSpannerException(executionException.getCause()); + if (resourceNotFoundException != null) { + span.addAnnotation("Database has been deleted"); + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.NOT_FOUND, + String.format( + "The session pool has been invalidated because a previous RPC returned 'Database not found': %s", + resourceNotFoundException.getMessage()), + resourceNotFoundException); } + if (multiplexedSessionFuture == null) { + synchronized (lock) { + if (multiplexedSessionFuture == null) { + // Creating a new reference where the request's span state can be stored. + MultiplexedSessionFuture multiplexedSessionFuture = new MultiplexedSessionFuture(span); + this.multiplexedSessionFuture = multiplexedSessionFuture; + return multiplexedSessionFuture; + } + } + } + return multiplexedSessionFuture; } } @@ -1412,7 +1511,7 @@ public void close() { } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } catch (ExecutionException e) { - throw SpannerExceptionFactory.asSpannerException(e.getCause()); + throw asSpannerException(e.getCause()); } } @@ -1475,11 +1574,13 @@ PooledSession get(final boolean eligibleForLongRunning) { } } - class MultiplexedSessionFuture extends SimpleForwardingListenableFuture - implements SessionFuture { - @VisibleForTesting - MultiplexedSessionFuture(ListenableFuture delegate) { - super(delegate); + class MultiplexedSessionFuture implements SessionFuture { + + private final ISpan span; + private volatile MultiplexedSession multiplexedSession; + + MultiplexedSessionFuture(ISpan span) { + this.span = span; } @Override @@ -1659,7 +1760,7 @@ public void close() { } catch (InterruptedException e) { throw SpannerExceptionFactory.propagateInterrupt(e); } catch (ExecutionException e) { - throw SpannerExceptionFactory.asSpannerException(e.getCause()); + throw asSpannerException(e.getCause()); } } @@ -1685,7 +1786,27 @@ private MultiplexedSession getOrNull() { @Override public MultiplexedSession get() { try { - return super.get(); + if (multiplexedSession == null) { + boolean created = false; + synchronized (this) { + if (multiplexedSession == null) { + SessionImpl sessionImpl = + new SessionImpl( + sessionClient.getSpanner(), currentMultiplexedSessionReference.get().get()); + MultiplexedSession multiplexedSession = new MultiplexedSession(sessionImpl); + multiplexedSession.markBusy(span); + span.addAnnotation("Using Session", "sessionId", multiplexedSession.getName()); + this.multiplexedSession = multiplexedSession; + created = true; + } + } + if (created) { + synchronized (lock) { + incrementNumSessionsInUse(true); + } + } + } + return multiplexedSession; } catch (ExecutionException e) { throw SpannerExceptionFactory.newSpannerException(e.getCause()); } catch (InterruptedException e) { @@ -1698,7 +1819,6 @@ interface CachedSession extends Session { SessionImpl getDelegate(); - // TODO This method can be removed once we fully migrate to multiplexed sessions. void markBusy(ISpan span); void markUsed(); @@ -2023,8 +2143,7 @@ public void setAllowReplacing(boolean allowReplacing) { @Override public void markBusy(ISpan span) { - // no-op for a multiplexed session since a new span is already created and set in context - // for every handler invocation. + this.delegate.setCurrentSpan(span); } @Override @@ -2223,12 +2342,20 @@ private PooledSession pollUninterruptiblyWithTimeout( interrupted = true; } catch (TimeoutException e) { if (acquireSessionTimeout != null) { - throw SpannerExceptionFactory.newSpannerException( - ErrorCode.RESOURCE_EXHAUSTED, - "Timed out after waiting " - + acquireSessionTimeout.toMillis() - + "ms for acquiring session. To mitigate error SessionPoolOptions#setAcquireSessionTimeout(Duration) to set a higher timeout" - + " or increase the number of sessions in the session pool."); + SpannerException exception = + SpannerExceptionFactory.newSpannerException( + ErrorCode.RESOURCE_EXHAUSTED, + "Timed out after waiting " + + acquireSessionTimeout.toMillis() + + "ms for acquiring session. To mitigate error SessionPoolOptions#setAcquireSessionTimeout(Duration) to set a higher timeout" + + " or increase the number of sessions in the session pool."); + if (waiter.setException(exception)) { + // Only throw the exception if setting it on the waiter was successful. The + // waiter.setException(..) method returns false if some other thread in the meantime + // called waiter.set(..), which means that a session became available between the + // time that the TimeoutException was thrown and now. + throw exception; + } } return null; } catch (ExecutionException e) { @@ -2523,26 +2650,27 @@ void maintainMultiplexedSession(Instant currentTime) { try { if (options.getUseMultiplexedSession()) { synchronized (lock) { - if (getMultiplexedSession().isDone() - && getMultiplexedSession().get() != null - && isMultiplexedSessionStale(currentTime)) { - final Instant minExecutionTime = - multiplexedSessionReplacementAttemptTime.plus( - multiplexedSessionCreationRetryDelay); - if (currentTime.isBefore(minExecutionTime)) { - return; + if (currentMultiplexedSessionReference.get().isDone()) { + SessionReference sessionReference = getMultiplexedSessionInstance(); + if (sessionReference != null + && isMultiplexedSessionStale(sessionReference, currentTime)) { + final Instant minExecutionTime = + multiplexedSessionReplacementAttemptTime.plus( + multiplexedSessionCreationRetryDelay); + if (currentTime.isBefore(minExecutionTime)) { + return; + } + /* + This will attempt to create a new multiplexed session. if successfully created then + the existing session will be replaced. Note that there maybe active transactions + running on the stale session. Hence, it is important that we only replace the reference + and not invoke a DeleteSession RPC. + */ + maybeCreateMultiplexedSession(multiplexedMaintainerConsumer); + + // update this only after we have attempted to replace the multiplexed session + multiplexedSessionReplacementAttemptTime = currentTime; } - - /* - This will attempt to create a new multiplexed session. if successfully created then - the existing session will be replaced. Note that there maybe active transactions - running on the stale session. Hence, it is important that we only replace the reference - and not invoke a DeleteSession RPC. - */ - maybeCreateMultiplexedSession(multiplexedMaintainerConsumer); - - // update this only after we have attempted to replace the multiplexed session - multiplexedSessionReplacementAttemptTime = currentTime; } } } @@ -2551,10 +2679,9 @@ && isMultiplexedSessionStale(currentTime)) { } } - boolean isMultiplexedSessionStale(Instant currentTime) { - final CachedSession session = getMultiplexedSession().get(); + boolean isMultiplexedSessionStale(SessionReference sessionReference, Instant currentTime) { final Duration durationFromCreationTime = - Duration.between(session.getDelegate().getCreateTime(), currentTime); + Duration.between(sessionReference.getCreateTime(), currentTime); return durationFromCreationTime.compareTo(options.getMultiplexedSessionMaintenanceDuration()) > 0; } @@ -2666,9 +2793,8 @@ enum Position { private AtomicLong numWaiterTimeouts = new AtomicLong(); - private final AtomicReference> + private final AtomicReference> currentMultiplexedSessionReference = new AtomicReference<>(SettableApiFuture.create()); - MultiplexedSessionFutureWrapper wrappedMultiplexedSessionFuture = null; @GuardedBy("lock") private final Set allSessions = new HashSet<>(); @@ -2687,8 +2813,9 @@ enum Position { @VisibleForTesting Function idleSessionRemovedListener; @VisibleForTesting Function longRunningSessionRemovedListener; - @VisibleForTesting Function multiplexedSessionRemovedListener; + @VisibleForTesting Function multiplexedSessionRemovedListener; private final CountDownLatch waitOnMinSessionsLatch; + private final CountDownLatch waitOnMultiplexedSessionsLatch; private final SessionReplacementHandler pooledSessionReplacementHandler = new PooledSessionReplacementHandler(); private static final SessionReplacementHandler multiplexedSessionReplacementHandler = @@ -2819,6 +2946,7 @@ private SessionPool( this.initOpenTelemetryMetricsCollection(openTelemetry, attributes); this.waitOnMinSessionsLatch = options.getMinSessions() > 0 ? new CountDownLatch(1) : new CountDownLatch(0); + this.waitOnMultiplexedSessionsLatch = new CountDownLatch(1); } /** @@ -2846,7 +2974,7 @@ Dialect getDialect() { try { return dialect.get(60L, TimeUnit.SECONDS); } catch (ExecutionException executionException) { - throw SpannerExceptionFactory.asSpannerException(executionException); + throw asSpannerException(executionException); } catch (InterruptedException interruptedException) { throw SpannerExceptionFactory.propagateInterrupt(interruptedException); } catch (TimeoutException timeoutException) { @@ -2920,6 +3048,20 @@ int getNumberOfSessionsBeingCreated() { } } + @VisibleForTesting + int getTotalSessionsPlusNumSessionsBeingCreated() { + synchronized (lock) { + return numSessionsBeingCreated + allSessions.size(); + } + } + + @VisibleForTesting + boolean isMultiplexedSessionBeingCreated() { + synchronized (lock) { + return multiplexedSessionBeingCreated; + } + } + @VisibleForTesting long getNumWaiterTimeouts() { return numWaiterTimeouts.get(); @@ -3001,30 +3143,34 @@ boolean isValid() { */ SessionFutureWrapper getMultiplexedSessionWithFallback() throws SpannerException { if (options.getUseMultiplexedSession()) { + ISpan span = tracer.getCurrentSpan(); try { - SessionFutureWrapper sessionFuture = getWrappedMultiplexedSessionFuture(); - incrementNumSessionsInUse(true); - return sessionFuture; + return getWrappedMultiplexedSessionFuture(span); } catch (Throwable t) { - ISpan span = tracer.getCurrentSpan(); span.addAnnotation("No multiplexed session available."); - throw SpannerExceptionFactory.asSpannerException(t.getCause()); + throw asSpannerException(t.getCause()); } } else { return new PooledSessionFutureWrapper(getSession()); } } - SessionFutureWrapper getWrappedMultiplexedSessionFuture() { - return wrappedMultiplexedSessionFuture; + SessionFutureWrapper getWrappedMultiplexedSessionFuture(ISpan span) { + return new MultiplexedSessionFutureWrapper(span); } /** * This method is a blocking method. It will block until the underlying {@code - * SettableApiFuture} is resolved. + * SettableApiFuture} is resolved. */ - MultiplexedSessionFuture getMultiplexedSession() { - return (MultiplexedSessionFuture) getWrappedMultiplexedSessionFuture().get(); + SessionReference getMultiplexedSessionInstance() { + try { + return currentMultiplexedSessionReference.get().get(); + } catch (InterruptedException e) { + throw SpannerExceptionFactory.propagateInterrupt(e); + } catch (ExecutionException e) { + throw asSpannerException(e.getCause()); + } } /** @@ -3436,7 +3582,7 @@ private void maybeCreateMultiplexedSession(SessionConsumer sessionConsumer) { logger.log(Level.FINE, String.format("Creating multiplexed sessions")); try { multiplexedSessionBeingCreated = true; - sessionClient.createMultiplexedSession(sessionConsumer); + sessionClient.asyncCreateMultiplexedSession(sessionConsumer); } catch (Throwable ignore) { // such an exception will never be thrown. the exception will be passed onto the consumer. } @@ -3480,25 +3626,24 @@ private void createSessions(final int sessionCount, boolean distributeOverChanne class MultiplexedSessionMaintainerConsumer implements SessionConsumer { @Override public void onSessionReady(SessionImpl sessionImpl) { - final SettableFuture settableFuture = SettableFuture.create(); - final MultiplexedSession newSession = new MultiplexedSession(sessionImpl); - settableFuture.set(newSession); + final SessionReference sessionReference = sessionImpl.getSessionReference(); + final SettableFuture settableFuture = SettableFuture.create(); + settableFuture.set(sessionReference); synchronized (lock) { - MultiplexedSession oldSession = null; + SessionReference oldSession = null; if (currentMultiplexedSessionReference.get().isDone()) { - oldSession = getMultiplexedSession().get(); + oldSession = getMultiplexedSessionInstance(); } - SettableApiFuture settableApiFuture = SettableApiFuture.create(); - settableApiFuture.set(new MultiplexedSessionFuture(settableFuture)); + SettableApiFuture settableApiFuture = SettableApiFuture.create(); + settableApiFuture.set(sessionReference); currentMultiplexedSessionReference.set(settableApiFuture); - wrappedMultiplexedSessionFuture = new MultiplexedSessionFutureWrapper(settableApiFuture); if (oldSession != null) { logger.log( Level.INFO, String.format( - "Removed Multiplexed Session => %s created at => %s and", - oldSession.getName(), oldSession.getDelegate().getCreateTime())); + "Removed Multiplexed Session => %s created at => %s", + oldSession.getName(), oldSession.getCreateTime())); if (multiplexedSessionRemovedListener != null) { multiplexedSessionRemovedListener.apply(oldSession); } @@ -3515,8 +3660,6 @@ public void onSessionReady(SessionImpl sessionImpl) { public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount) { synchronized (lock) { multiplexedSessionBeingCreated = false; - wrappedMultiplexedSessionFuture = - new MultiplexedSessionFutureWrapper(currentMultiplexedSessionReference.get()); } logger.log( Level.WARNING, @@ -3534,16 +3677,13 @@ public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount class MultiplexedSessionInitializationConsumer implements SessionConsumer { @Override public void onSessionReady(SessionImpl sessionImpl) { - final SettableFuture settableFuture = SettableFuture.create(); - final MultiplexedSession newSession = new MultiplexedSession(sessionImpl); - settableFuture.set(newSession); - + final SessionReference sessionReference = sessionImpl.getSessionReference(); synchronized (lock) { - SettableApiFuture settableApiFuture = + SettableApiFuture settableApiFuture = currentMultiplexedSessionReference.get(); - settableApiFuture.set(new MultiplexedSessionFuture(settableFuture)); - wrappedMultiplexedSessionFuture = new MultiplexedSessionFutureWrapper(settableApiFuture); + settableApiFuture.set(sessionReference); multiplexedSessionBeingCreated = false; + waitOnMultiplexedSessionsLatch.countDown(); } } @@ -3556,9 +3696,11 @@ public void onSessionReady(SessionImpl sessionImpl) { public void onSessionCreateFailure(Throwable t, int createFailureForSessionCount) { synchronized (lock) { multiplexedSessionBeingCreated = false; - wrappedMultiplexedSessionFuture = - new MultiplexedSessionFutureWrapper(currentMultiplexedSessionReference.get()); - currentMultiplexedSessionReference.get().setException(newSpannerException(t)); + if (isDatabaseOrInstanceNotFound(asSpannerException(t))) { + setResourceNotFoundException((ResourceNotFoundException) t); + poolMaintainer.close(); + } + currentMultiplexedSessionReference.get().setException(asSpannerException(t)); } } } @@ -3662,7 +3804,7 @@ private void initOpenCensusMetricsCollection( MetricOptions.builder() .setDescription(NUM_ACQUIRED_SESSIONS_DESCRIPTION) .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS) + .setLabelKeys(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS) .build()); DerivedLongCumulative numReleasedSessionsMetric = @@ -3671,7 +3813,7 @@ private void initOpenCensusMetricsCollection( MetricOptions.builder() .setDescription(NUM_RELEASED_SESSIONS_DESCRIPTION) .setUnit(COUNT) - .setLabelKeys(SPANNER_LABEL_KEYS) + .setLabelKeys(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS) .build()); DerivedLongGauge numSessionsInPoolMetric = @@ -3700,13 +3842,28 @@ private void initOpenCensusMetricsCollection( sessionsTimeouts.removeTimeSeries(labelValues); sessionsTimeouts.createTimeSeries(labelValues, this, SessionPool::getNumWaiterTimeouts); - numAcquiredSessionsMetric.removeTimeSeries(labelValues); + List labelValuesWithRegularSessions = new ArrayList<>(labelValues); + List labelValuesWithMultiplexedSessions = new ArrayList<>(labelValues); + labelValuesWithMultiplexedSessions.add(LabelValue.create("true")); + labelValuesWithRegularSessions.add(LabelValue.create("false")); + + numAcquiredSessionsMetric.removeTimeSeries(labelValuesWithRegularSessions); + numAcquiredSessionsMetric.createTimeSeries( + labelValuesWithRegularSessions, this, sessionPool -> sessionPool.numSessionsAcquired); + numAcquiredSessionsMetric.removeTimeSeries(labelValuesWithMultiplexedSessions); numAcquiredSessionsMetric.createTimeSeries( - labelValues, this, sessionPool -> sessionPool.numSessionsAcquired); + labelValuesWithMultiplexedSessions, + this, + sessionPool -> sessionPool.numMultiplexedSessionsAcquired); - numReleasedSessionsMetric.removeTimeSeries(labelValues); + numReleasedSessionsMetric.removeTimeSeries(labelValuesWithRegularSessions); + numReleasedSessionsMetric.createTimeSeries( + labelValuesWithRegularSessions, this, sessionPool -> sessionPool.numSessionsReleased); + numReleasedSessionsMetric.removeTimeSeries(labelValuesWithMultiplexedSessions); numReleasedSessionsMetric.createTimeSeries( - labelValues, this, sessionPool -> sessionPool.numSessionsReleased); + labelValuesWithMultiplexedSessions, + this, + sessionPool -> sessionPool.numMultiplexedSessionsReleased); List labelValuesWithBeingPreparedType = new ArrayList<>(labelValues); labelValuesWithBeingPreparedType.add(NUM_SESSIONS_BEING_PREPARED); 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 139dce8f0f0..4a048af52c0 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 @@ -284,7 +284,9 @@ long getRandomizePositionQPSThreshold() { return randomizePositionQPSThreshold; } - boolean getUseMultiplexedSession() { + @VisibleForTesting + @InternalApi + public boolean getUseMultiplexedSession() { return useMultiplexedSession; } @@ -491,7 +493,7 @@ public static class Builder { private boolean useMultiplexedSession = getUseMultiplexedSessionFromEnvVariable(); private Duration multiplexedSessionMaintenanceDuration = Duration.ofDays(7); - private Clock poolMaintainerClock; + private Clock poolMaintainerClock = Clock.INSTANCE; private static Position getReleaseToPositionFromSystemProperty() { // NOTE: This System property is a beta feature. Support for it can be removed in the future. @@ -701,7 +703,7 @@ Builder setCloseIfInactiveTransactions() { @VisibleForTesting Builder setPoolMaintainerClock(Clock poolMaintainerClock) { - this.poolMaintainerClock = poolMaintainerClock; + this.poolMaintainerClock = Preconditions.checkNotNull(poolMaintainerClock); return this; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java new file mode 100644 index 00000000000..bc12cf8ee77 --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionReference.java @@ -0,0 +1,97 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.cloud.spanner.SessionClient.SessionId; +import com.google.cloud.spanner.spi.v1.SpannerRpc; +import java.util.Map; +import javax.annotation.Nullable; +import org.threeten.bp.Instant; + +/** + * A {@code Session} can be used to perform transactions that read and/or modify data in a Cloud + * Spanner database. Sessions are managed internally by the client library, and users need not be + * aware of the actual session management, pooling and handling. + */ +class SessionReference { + + private final String name; + private final DatabaseId databaseId; + private final Map options; + private volatile Instant lastUseTime; + @Nullable private final Instant createTime; + private final boolean isMultiplexed; + + SessionReference(String name, Map options) { + this.options = options; + this.name = checkNotNull(name); + this.databaseId = SessionId.of(name).getDatabaseId(); + this.lastUseTime = Instant.now(); + this.createTime = null; + this.isMultiplexed = false; + } + + SessionReference( + String name, + com.google.protobuf.Timestamp createTime, + boolean isMultiplexed, + Map options) { + this.options = options; + this.name = checkNotNull(name); + this.databaseId = SessionId.of(name).getDatabaseId(); + this.lastUseTime = Instant.now(); + this.createTime = convert(createTime); + this.isMultiplexed = isMultiplexed; + } + + public String getName() { + return name; + } + + public DatabaseId getDatabaseId() { + return databaseId; + } + + Map getOptions() { + return options; + } + + Instant getLastUseTime() { + return lastUseTime; + } + + Instant getCreateTime() { + return createTime; + } + + boolean getIsMultiplexed() { + return isMultiplexed; + } + + void markUsed(Instant instant) { + lastUseTime = instant; + } + + private Instant convert(com.google.protobuf.Timestamp timestamp) { + if (timestamp == null) { + return null; + } + return Instant.ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos()); + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java index ea6cdf3f65c..a89c7c048fc 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java @@ -178,6 +178,11 @@ public String getSql() { return sql; } + /** Returns a copy of this statement with the SQL string replaced by the given SQL string. */ + public Statement withReplacedSql(String sql) { + return new Statement(sql, this.parameters, this.queryOptions); + } + /** Returns the {@link QueryOptions} that will be used with this {@link Statement}. */ public QueryOptions getQueryOptions() { return queryOptions; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java index 68432959c50..4808f1553e9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java @@ -654,15 +654,6 @@ public DatabaseAdminStub createStub() throws IOException { "Transport not supported: %s", getTransportChannelProvider().getTransportName())); } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - /** Returns the default service name. */ @Override public String getServiceName() { @@ -1469,15 +1460,6 @@ public UnaryCallSettings.Builder restoreDatab return listDatabaseRolesSettings; } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - @Override public DatabaseAdminStubSettings build() throws IOException { return new DatabaseAdminStubSettings(this); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java index 36454ee1a55..9a00b312c61 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/InstanceAdminStubSettings.java @@ -726,15 +726,6 @@ public InstanceAdminStub createStub() throws IOException { "Transport not supported: %s", getTransportChannelProvider().getTransportName())); } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - /** Returns the default service name. */ @Override public String getServiceName() { @@ -1586,15 +1577,6 @@ public UnaryCallSettings.Builder getIamPolicySettin return listInstancePartitionOperationsSettings; } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - @Override public InstanceAdminStubSettings build() throws IOException { return new InstanceAdminStubSettings(this); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractMultiUseTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractMultiUseTransaction.java index 7d16f895976..da1ad2051c7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractMultiUseTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractMultiUseTransaction.java @@ -42,13 +42,15 @@ abstract class AbstractMultiUseTransaction extends AbstractBaseUnitOfWork { /** In-memory savepoint implementation that is used by the Connection API. */ static class Savepoint { private final String name; + private final boolean autoSavepoint; static Savepoint of(String name) { - return new Savepoint(name); + return new Savepoint(name, false); } - Savepoint(String name) { + Savepoint(String name, boolean autoSavepoint) { this.name = name; + this.autoSavepoint = autoSavepoint; } /** Returns the index of the first statement that was executed after this savepoint. */ @@ -61,17 +63,23 @@ int getMutationPosition() { return -1; } + boolean isAutoSavepoint() { + return this.autoSavepoint; + } + @Override public boolean equals(Object o) { if (!(o instanceof Savepoint)) { return false; } - return Objects.equals(((Savepoint) o).name, name); + Savepoint other = (Savepoint) o; + return Objects.equals(other.name, this.name) + && Objects.equals(other.autoSavepoint, this.autoSavepoint); } @Override public int hashCode() { - return name.hashCode(); + return Objects.hash(this.name, this.autoSavepoint); } @Override diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java index d0c06fa1d9d..b45d444b744 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractStatementParser.java @@ -16,9 +16,13 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.connection.SimpleParser.isValidIdentifierChar; +import static com.google.cloud.spanner.connection.StatementHintParser.convertHintsToOptions; + import com.google.api.core.InternalApi; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.Options.ReadQueryUpdateTransactionOption; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.Statement; @@ -169,6 +173,7 @@ public static class ParsedStatement { private final Statement statement; private final String sqlWithoutComments; private final boolean returningClause; + private final ReadQueryUpdateTransactionOption[] optionsFromHints; private static ParsedStatement clientSideStatement( ClientSideStatementImpl clientSideStatement, @@ -182,15 +187,27 @@ private static ParsedStatement ddl(Statement statement, String sqlWithoutComment } private static ParsedStatement query( - Statement statement, String sqlWithoutComments, QueryOptions defaultQueryOptions) { + Statement statement, + String sqlWithoutComments, + QueryOptions defaultQueryOptions, + ReadQueryUpdateTransactionOption[] optionsFromHints) { return new ParsedStatement( - StatementType.QUERY, null, statement, sqlWithoutComments, defaultQueryOptions, false); + StatementType.QUERY, + null, + statement, + sqlWithoutComments, + defaultQueryOptions, + false, + optionsFromHints); } private static ParsedStatement update( - Statement statement, String sqlWithoutComments, boolean returningClause) { + Statement statement, + String sqlWithoutComments, + boolean returningClause, + ReadQueryUpdateTransactionOption[] optionsFromHints) { return new ParsedStatement( - StatementType.UPDATE, statement, sqlWithoutComments, returningClause); + StatementType.UPDATE, statement, sqlWithoutComments, returningClause, optionsFromHints); } private static ParsedStatement unknown(Statement statement, String sqlWithoutComments) { @@ -208,18 +225,20 @@ private ParsedStatement( this.statement = statement; this.sqlWithoutComments = Preconditions.checkNotNull(sqlWithoutComments); this.returningClause = false; + this.optionsFromHints = EMPTY_OPTIONS; } private ParsedStatement( StatementType type, Statement statement, String sqlWithoutComments, - boolean returningClause) { - this(type, null, statement, sqlWithoutComments, null, returningClause); + boolean returningClause, + ReadQueryUpdateTransactionOption[] optionsFromHints) { + this(type, null, statement, sqlWithoutComments, null, returningClause, optionsFromHints); } private ParsedStatement(StatementType type, Statement statement, String sqlWithoutComments) { - this(type, null, statement, sqlWithoutComments, null, false); + this(type, null, statement, sqlWithoutComments, null, false, EMPTY_OPTIONS); } private ParsedStatement( @@ -228,33 +247,37 @@ private ParsedStatement( Statement statement, String sqlWithoutComments, QueryOptions defaultQueryOptions, - boolean returningClause) { + boolean returningClause, + ReadQueryUpdateTransactionOption[] optionsFromHints) { Preconditions.checkNotNull(type); this.type = type; this.clientSideStatement = clientSideStatement; this.statement = statement == null ? null : mergeQueryOptions(statement, defaultQueryOptions); this.sqlWithoutComments = Preconditions.checkNotNull(sqlWithoutComments); this.returningClause = returningClause; + this.optionsFromHints = optionsFromHints; } private ParsedStatement copy(Statement statement, QueryOptions defaultQueryOptions) { return new ParsedStatement( this.type, this.clientSideStatement, - statement, + statement.withReplacedSql(this.statement.getSql()), this.sqlWithoutComments, defaultQueryOptions, - this.returningClause); + this.returningClause, + this.optionsFromHints); } private ParsedStatement forCache() { return new ParsedStatement( this.type, this.clientSideStatement, - null, + Statement.of(this.statement.getSql()), this.sqlWithoutComments, null, - this.returningClause); + this.returningClause, + this.optionsFromHints); } @Override @@ -287,6 +310,11 @@ public boolean hasReturningClause() { return this.returningClause; } + @InternalApi + public ReadQueryUpdateTransactionOption[] getOptionsFromHints() { + return this.optionsFromHints; + } + /** * @return true if the statement is a query that will return a {@link * com.google.cloud.spanner.ResultSet}. @@ -480,14 +508,23 @@ ParsedStatement parse(Statement statement, QueryOptions defaultQueryOptions) { } private ParsedStatement internalParse(Statement statement, QueryOptions defaultQueryOptions) { + StatementHintParser statementHintParser = + new StatementHintParser(getDialect(), statement.getSql()); + ReadQueryUpdateTransactionOption[] optionsFromHints = EMPTY_OPTIONS; + if (statementHintParser.hasStatementHints() + && !statementHintParser.getClientSideStatementHints().isEmpty()) { + statement = + statement.toBuilder().replace(statementHintParser.getSqlWithoutClientSideHints()).build(); + optionsFromHints = convertHintsToOptions(statementHintParser.getClientSideStatementHints()); + } String sql = removeCommentsAndTrim(statement.getSql()); ClientSideStatementImpl client = parseClientSideStatement(sql); if (client != null) { return ParsedStatement.clientSideStatement(client, statement, sql); } else if (isQuery(sql)) { - return ParsedStatement.query(statement, sql, defaultQueryOptions); + return ParsedStatement.query(statement, sql, defaultQueryOptions, optionsFromHints); } else if (isUpdateStatement(sql)) { - return ParsedStatement.update(statement, sql, checkReturningClause(sql)); + return ParsedStatement.update(statement, sql, checkReturningClause(sql), optionsFromHints); } else if (isDdlStatement(sql)) { return ParsedStatement.ddl(statement, sql); } @@ -621,6 +658,10 @@ public String removeCommentsAndTrim(String sql) { /** Removes any statement hints at the beginning of the statement. */ abstract String removeStatementHint(String sql); + @VisibleForTesting + static final ReadQueryUpdateTransactionOption[] EMPTY_OPTIONS = + new ReadQueryUpdateTransactionOption[0]; + /** Parameter information with positional parameters translated to named parameters. */ @InternalApi public static class ParametersInfo { @@ -697,9 +738,10 @@ public boolean checkReturningClause(String sql) { return checkReturningClauseInternal(sql); } + abstract Dialect getDialect(); + /** - * <<<<<<< HEAD Returns true if this dialect supports nested comments. ======= <<<<<<< HEAD - * Returns true if this dialect supports nested comments. >>>>>>> main + * Returns true if this dialect supports nested comments. * *
    *
  • This method should return false for dialects that consider this to be a valid comment: @@ -757,18 +799,6 @@ public boolean checkReturningClause(String sql) { /** Returns the query parameter prefix that should be used for this dialect. */ abstract String getQueryParameterPrefix(); - /** - * Returns true for characters that can be used as the first character in unquoted identifiers. - */ - boolean isValidIdentifierFirstChar(char c) { - return Character.isLetter(c) || c == UNDERSCORE; - } - - /** Returns true for characters that can be used in unquoted identifiers. */ - boolean isValidIdentifierChar(char c) { - return isValidIdentifierFirstChar(c) || Character.isDigit(c) || c == DOLLAR; - } - /** Reads a dollar-quoted string literal from position index in the given sql string. */ String parseDollarQuotedString(String sql, int index) { // Look ahead to the next dollar sign (if any). Everything in between is the quote tag. @@ -812,9 +842,9 @@ int skip(String sql, int currentIndex, @Nullable StringBuilder result) { } else if (currentChar == HYPHEN && sql.length() > (currentIndex + 1) && sql.charAt(currentIndex + 1) == HYPHEN) { - return skipSingleLineComment(sql, currentIndex, result); + return skipSingleLineComment(sql, /* prefixLength = */ 2, currentIndex, result); } else if (currentChar == DASH && supportsHashSingleLineComments()) { - return skipSingleLineComment(sql, currentIndex, result); + return skipSingleLineComment(sql, /* prefixLength = */ 1, currentIndex, result); } else if (currentChar == SLASH && sql.length() > (currentIndex + 1) && sql.charAt(currentIndex + 1) == ASTERISK) { @@ -826,44 +856,31 @@ int skip(String sql, int currentIndex, @Nullable StringBuilder result) { } /** Skips a single-line comment from startIndex and adds it to result if result is not null. */ - static int skipSingleLineComment(String sql, int startIndex, @Nullable StringBuilder result) { - int endIndex = sql.indexOf('\n', startIndex + 2); - if (endIndex == -1) { - endIndex = sql.length(); - } else { - // Include the newline character. - endIndex++; + int skipSingleLineComment( + String sql, int prefixLength, int startIndex, @Nullable StringBuilder result) { + return skipSingleLineComment(getDialect(), sql, prefixLength, startIndex, result); + } + + static int skipSingleLineComment( + Dialect dialect, + String sql, + int prefixLength, + int startIndex, + @Nullable StringBuilder result) { + SimpleParser simpleParser = new SimpleParser(dialect, sql, startIndex, false); + if (simpleParser.skipSingleLineComment(prefixLength)) { + appendIfNotNull(result, sql.substring(startIndex, simpleParser.getPos())); } - appendIfNotNull(result, sql.substring(startIndex, endIndex)); - return endIndex; + return simpleParser.getPos(); } /** Skips a multi-line comment from startIndex and adds it to result if result is not null. */ int skipMultiLineComment(String sql, int startIndex, @Nullable StringBuilder result) { - // Current position is start + '/*'.length(). - int pos = startIndex + 2; - // PostgreSQL allows comments to be nested. That is, the following is allowed: - // '/* test /* inner comment */ still a comment */' - int level = 1; - while (pos < sql.length()) { - if (supportsNestedComments() - && sql.charAt(pos) == SLASH - && sql.length() > (pos + 1) - && sql.charAt(pos + 1) == ASTERISK) { - level++; - } - if (sql.charAt(pos) == ASTERISK && sql.length() > (pos + 1) && sql.charAt(pos + 1) == SLASH) { - level--; - if (level == 0) { - pos += 2; - appendIfNotNull(result, sql.substring(startIndex, pos)); - return pos; - } - } - pos++; + SimpleParser simpleParser = new SimpleParser(getDialect(), sql, startIndex, false); + if (simpleParser.skipMultiLineComment()) { + appendIfNotNull(result, sql.substring(startIndex, simpleParser.getPos())); } - appendIfNotNull(result, sql.substring(startIndex)); - return sql.length(); + return simpleParser.getPos(); } /** Skips a quoted string from startIndex. */ diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java index d43e14a177b..c0859b57903 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java @@ -33,6 +33,7 @@ import com.google.cloud.spanner.PartitionOptions; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerBatchUpdateException; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; @@ -1370,6 +1371,12 @@ default DatabaseClient getDatabaseClient() { throw new UnsupportedOperationException("Not implemented"); } + /** The {@link Spanner} instance that is used by this {@link Connection}. */ + @InternalApi + default Spanner getSpanner() { + throw new UnsupportedOperationException("Not implemented"); + } + /** * This query option is used internally to indicate that a query is executed by the library itself * to fetch metadata. These queries are specifically allowed to be executed even when a DDL batch diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java index 96c509a16aa..d0cb7169793 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java @@ -32,6 +32,7 @@ import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.Options; import com.google.cloud.spanner.Options.QueryOption; +import com.google.cloud.spanner.Options.ReadQueryUpdateTransactionOption; import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.Options.UpdateOption; import com.google.cloud.spanner.PartitionOptions; @@ -305,8 +306,8 @@ static UnitOfWorkType of(TransactionMode transactionMode) { setDefaultTransactionOptions(); } - @VisibleForTesting - Spanner getSpanner() { + @Override + public Spanner getSpanner() { return this.spanner; } @@ -1154,6 +1155,7 @@ public ResultSet partitionQuery( "Only queries can be partitioned. Invalid statement: " + query.getSql()); } + QueryOption[] combinedOptions = concat(parsedStatement.getOptionsFromHints(), options); UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(); return get( transaction.partitionQueryAsync( @@ -1161,7 +1163,8 @@ public ResultSet partitionQuery( parsedStatement, getEffectivePartitionOptions(partitionOptions), mergeDataBoost( - mergeQueryRequestOptions(parsedStatement, mergeQueryStatementTag(options))))); + mergeQueryRequestOptions( + parsedStatement, mergeQueryStatementTag(combinedOptions))))); } private PartitionOptions getEffectivePartitionOptions( @@ -1455,6 +1458,34 @@ private List parseUpdateStatements(Iterable updates) return parsedStatements; } + private UpdateOption[] concat( + ReadQueryUpdateTransactionOption[] statementOptions, UpdateOption[] argumentOptions) { + if (statementOptions == null || statementOptions.length == 0) { + return argumentOptions; + } + if (argumentOptions == null || argumentOptions.length == 0) { + return statementOptions; + } + UpdateOption[] result = + Arrays.copyOf(statementOptions, statementOptions.length + argumentOptions.length); + System.arraycopy(argumentOptions, 0, result, statementOptions.length, argumentOptions.length); + return result; + } + + private QueryOption[] concat( + ReadQueryUpdateTransactionOption[] statementOptions, QueryOption[] argumentOptions) { + if (statementOptions == null || statementOptions.length == 0) { + return argumentOptions; + } + if (argumentOptions == null || argumentOptions.length == 0) { + return statementOptions; + } + QueryOption[] result = + Arrays.copyOf(statementOptions, statementOptions.length + argumentOptions.length); + System.arraycopy(argumentOptions, 0, result, statementOptions.length, argumentOptions.length); + return result; + } + private QueryOption[] mergeDataBoost(QueryOption... options) { if (this.dataBoostEnabled) { options = appendQueryOption(options, Options.dataBoostEnabled(true)); @@ -1531,19 +1562,20 @@ private ResultSet internalExecuteQuery( && (analyzeMode != AnalyzeMode.NONE || statement.hasReturningClause())), "Statement must either be a query or a DML mode with analyzeMode!=NONE or returning clause"); boolean isInternalMetadataQuery = isInternalMetadataQuery(options); + QueryOption[] combinedOptions = concat(statement.getOptionsFromHints(), options); UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(isInternalMetadataQuery); if (autoPartitionMode && statement.getType() == StatementType.QUERY && !isInternalMetadataQuery) { return runPartitionedQuery( - statement.getStatement(), PartitionOptions.getDefaultInstance(), options); + statement.getStatement(), PartitionOptions.getDefaultInstance(), combinedOptions); } return get( transaction.executeQueryAsync( callType, statement, analyzeMode, - mergeQueryRequestOptions(statement, mergeQueryStatementTag(options)))); + mergeQueryRequestOptions(statement, mergeQueryStatementTag(combinedOptions)))); } private AsyncResultSet internalExecuteQueryAsync( @@ -1558,25 +1590,27 @@ private AsyncResultSet internalExecuteQueryAsync( ConnectionPreconditions.checkState( !(autoPartitionMode && statement.getType() == StatementType.QUERY), "Partitioned queries cannot be executed asynchronously"); - UnitOfWork transaction = - getCurrentUnitOfWorkOrStartNewUnitOfWork(isInternalMetadataQuery(options)); + boolean isInternalMetadataQuery = isInternalMetadataQuery(options); + QueryOption[] combinedOptions = concat(statement.getOptionsFromHints(), options); + UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(isInternalMetadataQuery); return ResultSets.toAsyncResultSet( transaction.executeQueryAsync( callType, statement, analyzeMode, - mergeQueryRequestOptions(statement, mergeQueryStatementTag(options))), + mergeQueryRequestOptions(statement, mergeQueryStatementTag(combinedOptions))), spanner.getAsyncExecutorProvider(), - options); + combinedOptions); } private ApiFuture internalExecuteUpdateAsync( final CallType callType, final ParsedStatement update, UpdateOption... options) { Preconditions.checkArgument( update.getType() == StatementType.UPDATE, "Statement must be an update"); + UpdateOption[] combinedOptions = concat(update.getOptionsFromHints(), options); UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(); return transaction.executeUpdateAsync( - callType, update, mergeUpdateRequestOptions(mergeUpdateStatementTag(options))); + callType, update, mergeUpdateRequestOptions(mergeUpdateStatementTag(combinedOptions))); } private ApiFuture internalAnalyzeUpdateAsync( @@ -1586,16 +1620,22 @@ private ApiFuture internalAnalyzeUpdateAsync( UpdateOption... options) { Preconditions.checkArgument( update.getType() == StatementType.UPDATE, "Statement must be an update"); + UpdateOption[] combinedOptions = concat(update.getOptionsFromHints(), options); UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(); return transaction.analyzeUpdateAsync( - callType, update, analyzeMode, mergeUpdateRequestOptions(mergeUpdateStatementTag(options))); + callType, + update, + analyzeMode, + mergeUpdateRequestOptions(mergeUpdateStatementTag(combinedOptions))); } private ApiFuture internalExecuteBatchUpdateAsync( CallType callType, List updates, UpdateOption... options) { + UpdateOption[] combinedOptions = + updates.isEmpty() ? options : concat(updates.get(0).getOptionsFromHints(), options); UnitOfWork transaction = getCurrentUnitOfWorkOrStartNewUnitOfWork(); return transaction.executeBatchUpdateAsync( - callType, updates, mergeUpdateRequestOptions(mergeUpdateStatementTag(options))); + callType, updates, mergeUpdateRequestOptions(mergeUpdateStatementTag(combinedOptions))); } private UnitOfWork getCurrentUnitOfWorkOrStartNewUnitOfWork() { @@ -1648,6 +1688,7 @@ UnitOfWork createNewUnitOfWork(boolean isInternalMetadataQuery) { .build(); case READ_WRITE_TRANSACTION: return ReadWriteTransaction.newBuilder() + .setUseAutoSavepointsForEmulator(options.useAutoSavepointsForEmulator()) .setDatabaseClient(dbClient) .setDelayTransactionStartUntilFirstWrite(delayTransactionStartUntilFirstWrite) .setRetryAbortsInternally(retryAbortsInternally) 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 de58117d4bc..f79a764a94c 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 @@ -1447,6 +1447,16 @@ public boolean isAutoConfigEmulator() { return autoConfigEmulator; } + /** + * Returns true if a connection should generate auto-savepoints for retrying transactions on the + * emulator. This allows some more concurrent transactions on the emulator. + */ + boolean useAutoSavepointsForEmulator() { + // For now, this option is directly linked to the option autoConfigEmulator=true, which is the + // recommended way to configure the emulator for the Connection API. + return autoConfigEmulator; + } + public Dialect getDialect() { return dialect; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java index be4aa9d7f46..4f39c549de9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/PostgreSQLStatementParser.java @@ -16,6 +16,8 @@ package com.google.cloud.spanner.connection; +import static com.google.cloud.spanner.connection.SimpleParser.isValidIdentifierFirstChar; + import com.google.api.core.InternalApi; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; @@ -39,6 +41,11 @@ public class PostgreSQLStatementParser extends AbstractStatementParser { ClientSideStatements.getInstance(Dialect.POSTGRESQL).getCompiledStatements())); } + @Override + Dialect getDialect() { + return Dialect.POSTGRESQL; + } + /** * Indicates whether the parser supports the {@code EXPLAIN} clause. The PostgreSQL parser does * not support it. diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java index 05a8e899988..86d6feff90e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java @@ -63,6 +63,7 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.Callable; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; @@ -82,7 +83,38 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private static final AtomicLong ID_GENERATOR = new AtomicLong(); private static final String MAX_INTERNAL_RETRIES_EXCEEDED = "Internal transaction retry maximum exceeded"; - private static final int MAX_INTERNAL_RETRIES = 50; + private static final int DEFAULT_MAX_INTERNAL_RETRIES = 50; + + /** + * A reference to the currently active transaction on the emulator that was started by the same + * thread. This reference is only used when running on the emulator, and enables the Connection + * API to manually abort the current transaction on the emulator, so other transactions can try to + * make progress. + */ + private static final ThreadLocal CURRENT_ACTIVE_TRANSACTION = + new ThreadLocal<>(); + /** + * The name of the automatic savepoint that is generated by the Connection API if automatically + * aborting the current active transaction on the emulator is enabled. + */ + private static final String AUTO_SAVEPOINT_NAME = "_auto_savepoint"; + + /** + * Indicates whether an automatic savepoint should be generated after each statement, so the + * transaction can be manually aborted and retried by the Connection API when connected to the + * emulator. This feature is only intended for use with the Spanner emulator. When connected to + * real Spanner, the decision whether to abort a transaction or not should be delegated to + * Spanner. + */ + private final boolean useAutoSavepointsForEmulator; + /** + * The savepoint that was automatically generated after executing the last statement. This is used + * to abort transactions on the emulator, if one thread tries to execute concurrent transactions + * on the emulator, and would otherwise be deadlocked. + */ + private Savepoint autoSavepoint; + + private final int maxInternalRetries; private final ReentrantLock abortedLock = new ReentrantLock(); private final long transactionId; private final DatabaseClient dbClient; @@ -105,9 +137,20 @@ class ReadWriteTransaction extends AbstractMultiUseTransaction { private final List mutations = new ArrayList<>(); private Timestamp transactionStarted; - private static final class RollbackToSavepointException extends Exception {} + private static final class RollbackToSavepointException extends Exception { + private final Savepoint savepoint; + + RollbackToSavepointException(Savepoint savepoint) { + this.savepoint = Preconditions.checkNotNull(savepoint); + } + + Savepoint getSavepoint() { + return this.savepoint; + } + } static class Builder extends AbstractMultiUseTransaction.Builder { + private boolean useAutoSavepointsForEmulator; private DatabaseClient dbClient; private Boolean retryAbortsInternally; private boolean delayTransactionStartUntilFirstWrite; @@ -118,6 +161,11 @@ static class Builder extends AbstractMultiUseTransaction.Builder T runWithRetry(Callable callable) throws SpannerException { checkAborted(); try { checkRolledBackToSavepoint(); - return callable.call(); + T result = callable.call(); + if (this.useAutoSavepointsForEmulator) { + this.autoSavepoint = createAutoSavepoint(); + } + return result; } catch (final AbortedException aborted) { handleAborted(aborted); } catch (SpannerException e) { @@ -806,6 +871,20 @@ T runWithRetry(Callable callable) throws SpannerException { } } + private void maybeUpdateActiveTransaction() { + if (this.useAutoSavepointsForEmulator) { + if (CURRENT_ACTIVE_TRANSACTION.get() != null && CURRENT_ACTIVE_TRANSACTION.get() != this) { + ReadWriteTransaction activeTransaction = CURRENT_ACTIVE_TRANSACTION.get(); + if (activeTransaction.isActive() && activeTransaction.autoSavepoint != null) { + activeTransaction.rollbackToSavepoint(activeTransaction.autoSavepoint); + activeTransaction.autoSavepoint = null; + } + CURRENT_ACTIVE_TRANSACTION.remove(); + } + CURRENT_ACTIVE_TRANSACTION.set(this); + } + } + /** * Registers a {@link ResultSet} on this transaction that must be checked during a retry, and * returns a retryable {@link ResultSet}. @@ -878,7 +957,7 @@ private void addRetryStatement(RetriableStatement statement) { * {@link AbortedException}. */ private void handleAborted(AbortedException aborted) { - if (transactionRetryAttempts >= MAX_INTERNAL_RETRIES) { + if (transactionRetryAttempts >= maxInternalRetries) { // If the same statement in transaction keeps aborting, then we need to abort here. throwAbortWithRetryAttemptsExceeded(); } else if (retryAbortsInternally) { @@ -890,6 +969,9 @@ private void handleAborted(AbortedException aborted) { if (delay > 0L) { //noinspection BusyWait Thread.sleep(delay); + } else if (aborted.isEmulatorOnlySupportsOneTransactionException()) { + //noinspection BusyWait + Thread.sleep(ThreadLocalRandom.current().nextInt(50)); } } catch (InterruptedException ie) { Thread.currentThread().interrupt(); @@ -932,13 +1014,16 @@ private void handleAborted(AbortedException aborted) { this.state = UnitOfWorkState.ABORTED; this.abortedException = e; throw e; - } catch (AbortedException e) { + } catch (AbortedException abortedExceptionDuringRetry) { // Retry aborted, do another retry of the transaction. - if (transactionRetryAttempts >= MAX_INTERNAL_RETRIES) { + if (transactionRetryAttempts >= maxInternalRetries) { throwAbortWithRetryAttemptsExceeded(); } invokeTransactionRetryListenersOnFinish(RetryResult.RETRY_ABORTED_AND_RESTARTING); logger.fine(toString() + ": Internal transaction retry aborted, trying again"); + // Use the new aborted exception to determine both the backoff delay and how to handle + // the retry. + aborted = abortedExceptionDuringRetry; } catch (SpannerException e) { // unexpected exception logger.log( @@ -1051,7 +1136,12 @@ static class ReadWriteSavepoint extends Savepoint { private final int mutationPosition; ReadWriteSavepoint(String name, int statementPosition, int mutationPosition) { - super(name); + this(name, statementPosition, mutationPosition, false); + } + + ReadWriteSavepoint( + String name, int statementPosition, int mutationPosition, boolean autoSavepoint) { + super(name, autoSavepoint); this.statementPosition = statementPosition; this.mutationPosition = mutationPosition; } @@ -1072,6 +1162,10 @@ Savepoint savepoint(String name) { return new ReadWriteSavepoint(name, statements.size(), mutations.size()); } + private Savepoint createAutoSavepoint() { + return new ReadWriteSavepoint(AUTO_SAVEPOINT_NAME, statements.size(), mutations.size(), true); + } + @Override void rollbackToSavepoint(Savepoint savepoint) { get(rollbackAsync(CallType.SYNC, false)); @@ -1082,7 +1176,7 @@ void rollbackToSavepoint(Savepoint savepoint) { SpannerExceptionFactory.newSpannerException( ErrorCode.ABORTED, "Transaction has been rolled back to a savepoint", - new RollbackToSavepointException()); + new RollbackToSavepointException(savepoint)); // Clear all statements and mutations after the savepoint. this.statements.subList(savepoint.getStatementPosition(), this.statements.size()).clear(); this.mutations.subList(savepoint.getMutationPosition(), this.mutations.size()).clear(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java new file mode 100644 index 00000000000..0af86892dde --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SimpleParser.java @@ -0,0 +1,303 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static com.google.cloud.spanner.connection.AbstractStatementParser.ASTERISK; +import static com.google.cloud.spanner.connection.AbstractStatementParser.DASH; +import static com.google.cloud.spanner.connection.AbstractStatementParser.HYPHEN; +import static com.google.cloud.spanner.connection.AbstractStatementParser.SLASH; + +import com.google.cloud.spanner.Dialect; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import java.util.Objects; + +/** A very simple token-based parser for extracting relevant information from SQL strings. */ +class SimpleParser { + /** + * An immutable result from a parse action indicating whether the parse action was successful, and + * if so, what the value was. + */ + static class Result { + static final Result NOT_FOUND = new Result(null); + + static Result found(String value) { + return new Result(Preconditions.checkNotNull(value)); + } + + private final String value; + + private Result(String value) { + this.value = value; + } + + @Override + public int hashCode() { + return Objects.hashCode(this.value); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Result)) { + return false; + } + return Objects.equals(this.value, ((Result) o).value); + } + + @Override + public String toString() { + if (isValid()) { + return this.value; + } + return "NOT FOUND"; + } + + boolean isValid() { + return this.value != null; + } + + String getValue() { + return this.value; + } + } + + // TODO: Replace this with a direct reference to the dialect, and move the isXYZSupported methods + // from the AbstractStatementParser class to the Dialect class. + private final AbstractStatementParser statementParser; + + private final String sql; + + private final boolean treatHintCommentsAsTokens; + + private int pos; + + /** Constructs a simple parser for the given SQL string and dialect. */ + SimpleParser(Dialect dialect, String sql) { + this(dialect, sql, 0, /* treatHintCommentsAsTokens = */ false); + } + + /** + * Constructs a simple parser for the given SQL string and dialect. + * treatHintCommentsAsTokens indicates whether comments that start with '/*@' should be + * treated as tokens or not. This option may only be enabled if the dialect is PostgreSQL. + */ + SimpleParser(Dialect dialect, String sql, int pos, boolean treatHintCommentsAsTokens) { + Preconditions.checkArgument( + !(treatHintCommentsAsTokens && dialect != Dialect.POSTGRESQL), + "treatHintCommentsAsTokens can only be enabled for PostgreSQL"); + this.sql = sql; + this.pos = pos; + this.statementParser = AbstractStatementParser.getInstance(dialect); + this.treatHintCommentsAsTokens = treatHintCommentsAsTokens; + } + + Dialect getDialect() { + return this.statementParser.getDialect(); + } + + String getSql() { + return this.sql; + } + + int getPos() { + return this.pos; + } + + /** Returns true if this parser has more tokens. Advances the position to the first next token. */ + boolean hasMoreTokens() { + skipWhitespaces(); + return pos < sql.length(); + } + + /** + * Eats and returns the identifier at the current position. This implementation does not support + * quoted identifiers. + */ + Result eatIdentifier() { + // TODO: Implement support for quoted identifiers. + // TODO: Implement support for identifiers with multiple parts (e.g. my_schema.my_table). + if (!hasMoreTokens()) { + return Result.NOT_FOUND; + } + if (!isValidIdentifierFirstChar(sql.charAt(pos))) { + return Result.NOT_FOUND; + } + int startPos = pos; + while (pos < sql.length() && isValidIdentifierChar(sql.charAt(pos))) { + pos++; + } + return Result.found(sql.substring(startPos, pos)); + } + + /** + * Eats a single-quoted string. This implementation currently does not support escape sequences. + */ + Result eatSingleQuotedString() { + if (!eatToken('\'')) { + return Result.NOT_FOUND; + } + int startPos = pos; + while (pos < sql.length() && sql.charAt(pos) != '\'') { + if (sql.charAt(pos) == '\n') { + return Result.NOT_FOUND; + } + pos++; + } + if (pos == sql.length()) { + return Result.NOT_FOUND; + } + return Result.found(sql.substring(startPos, pos++)); + } + + boolean peekTokens(char... tokens) { + return internalEatTokens(/* updatePos = */ false, tokens); + } + + /** + * Returns true if the next tokens in the SQL string are equal to the given tokens, and advances + * the position of the parser to after the tokens. The position is not changed if the next tokens + * are not equal to the list of tokens. + */ + boolean eatTokens(char... tokens) { + return internalEatTokens(/* updatePos = */ true, tokens); + } + + /** + * Returns true if the next tokens in the SQL string are equal to the given tokens, and advances + * the position of the parser to after the tokens if updatePos is true. The position is not + * changed if the next tokens are not equal to the list of tokens, or if updatePos is false. + */ + private boolean internalEatTokens(boolean updatePos, char... tokens) { + int currentPos = pos; + for (char token : tokens) { + if (!eatToken(token)) { + pos = currentPos; + return false; + } + } + if (!updatePos) { + pos = currentPos; + } + return true; + } + + /** + * Returns true if the next token is equal to the given character, but does not advance the + * position of the parser. + */ + boolean peekToken(char token) { + int currentPos = pos; + boolean res = eatToken(token); + pos = currentPos; + return res; + } + + /** + * Returns true and advances the position of the parser if the next token is equal to the given + * character. + */ + boolean eatToken(char token) { + skipWhitespaces(); + if (pos < sql.length() && sql.charAt(pos) == token) { + pos++; + return true; + } + return false; + } + + /** + * Returns true if the given character is valid as the first character of an identifier. That + * means that it can be used as the first character of an unquoted identifier. + */ + static boolean isValidIdentifierFirstChar(char c) { + return Character.isLetter(c) || c == '_'; + } + + /** + * Returns true if the given character is a valid identifier character. That means that it can be + * used in an unquoted identifiers. + */ + static boolean isValidIdentifierChar(char c) { + return isValidIdentifierFirstChar(c) || Character.isDigit(c) || c == '$'; + } + + /** + * Skips all whitespaces, including comments, from the current position and advances the parser to + * the next actual token. + */ + @VisibleForTesting + void skipWhitespaces() { + while (pos < sql.length()) { + if (sql.charAt(pos) == HYPHEN && sql.length() > (pos + 1) && sql.charAt(pos + 1) == HYPHEN) { + skipSingleLineComment(/* prefixLength = */ 2); + } else if (statementParser.supportsHashSingleLineComments() && sql.charAt(pos) == DASH) { + skipSingleLineComment(/* prefixLength = */ 1); + } else if (sql.charAt(pos) == SLASH + && sql.length() > (pos + 1) + && sql.charAt(pos + 1) == ASTERISK) { + if (treatHintCommentsAsTokens && sql.length() > (pos + 2) && sql.charAt(pos + 2) == '@') { + break; + } + skipMultiLineComment(); + } else if (Character.isWhitespace(sql.charAt(pos))) { + pos++; + } else { + break; + } + } + } + + /** + * Skips through a single-line comment from the current position. The single-line comment is + * started by a prefix with the given length (e.g. either '#' or '--'). + */ + @VisibleForTesting + boolean skipSingleLineComment(int prefixLength) { + int endIndex = sql.indexOf('\n', pos + prefixLength); + if (endIndex == -1) { + pos = sql.length(); + return true; + } + pos = endIndex + 1; + return true; + } + + /** Skips through a multi-line comment from the current position. */ + @VisibleForTesting + boolean skipMultiLineComment() { + int level = 1; + pos += 2; + while (pos < sql.length()) { + if (statementParser.supportsNestedComments() + && sql.charAt(pos) == SLASH + && sql.length() > (pos + 1) + && sql.charAt(pos + 1) == ASTERISK) { + level++; + } + if (sql.charAt(pos) == ASTERISK && sql.length() > (pos + 1) && sql.charAt(pos + 1) == SLASH) { + level--; + if (level == 0) { + pos += 2; + return true; + } + } + pos++; + } + pos = sql.length(); + return false; + } +} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java index 892672ad0df..fdd10bbf5ae 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerStatementParser.java @@ -41,6 +41,11 @@ public SpannerStatementParser() throws CompileException { ClientSideStatements.getInstance(Dialect.GOOGLE_STANDARD_SQL).getCompiledStatements())); } + @Override + Dialect getDialect() { + return Dialect.GOOGLE_STANDARD_SQL; + } + /** * Indicates whether the parser supports the {@code EXPLAIN} clause. The Spanner parser does * support it. diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java new file mode 100644 index 00000000000..d6d4a7fa48c --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementHintParser.java @@ -0,0 +1,211 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import com.google.cloud.Tuple; +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Options.ReadQueryUpdateTransactionOption; +import com.google.cloud.spanner.Options.RpcPriority; +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.cloud.spanner.connection.SimpleParser.Result; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.spanner.v1.RequestOptions.Priority; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +/** A simple parser for extracting statement hints from SQL strings. */ +class StatementHintParser { + private static final char[] GOOGLE_SQL_START_HINT_TOKENS = new char[] {'@', '{'}; + private static final char[] POSTGRESQL_START_HINT_TOKENS = new char[] {'/', '*', '@'}; + private static final char[] GOOGLE_SQL_END_HINT_TOKENS = new char[] {'}'}; + private static final char[] POSTGRESQL_END_HINT_TOKENS = new char[] {'*', '/'}; + private static final String STATEMENT_TAG_HINT_NAME = "STATEMENT_TAG"; + private static final String RPC_PRIORITY_HINT_NAME = "RPC_PRIORITY"; + private static final ImmutableSet CLIENT_SIDE_STATEMENT_HINT_NAMES = + ImmutableSet.of(STATEMENT_TAG_HINT_NAME, RPC_PRIORITY_HINT_NAME); + + static final Map NO_HINTS = ImmutableMap.of(); + + private final boolean hasStatementHints; + + private final Map hints; + + private final String sqlWithoutClientSideHints; + + StatementHintParser(Dialect dialect, String sql) { + this(CLIENT_SIDE_STATEMENT_HINT_NAMES, dialect, sql); + } + + StatementHintParser( + ImmutableSet clientSideStatementHintNames, Dialect dialect, String sql) { + SimpleParser parser = + new SimpleParser( + dialect, + sql, + /* pos = */ 0, + /* treatHintCommentsAsTokens = */ dialect == Dialect.POSTGRESQL); + this.hasStatementHints = parser.peekTokens(getStartHintTokens(dialect)); + if (this.hasStatementHints) { + Tuple> hints = extract(parser, clientSideStatementHintNames); + this.sqlWithoutClientSideHints = hints.x(); + this.hints = hints.y(); + } else { + this.sqlWithoutClientSideHints = sql; + this.hints = NO_HINTS; + } + } + + private static char[] getStartHintTokens(Dialect dialect) { + switch (dialect) { + case POSTGRESQL: + return POSTGRESQL_START_HINT_TOKENS; + case GOOGLE_STANDARD_SQL: + default: + return GOOGLE_SQL_START_HINT_TOKENS; + } + } + + private static char[] getEndHintTokens(Dialect dialect) { + switch (dialect) { + case POSTGRESQL: + return POSTGRESQL_END_HINT_TOKENS; + case GOOGLE_STANDARD_SQL: + default: + return GOOGLE_SQL_END_HINT_TOKENS; + } + } + + /** + * Extracts any query/update options from client-side hints in the given statement. Currently, + * this method supports following client-side hints: + * + *
      + *
    • STATEMENT_TAG + *
    • RPC_PRIORITY + *
    + */ + static ReadQueryUpdateTransactionOption[] convertHintsToOptions(Map hints) { + ReadQueryUpdateTransactionOption[] result = new ReadQueryUpdateTransactionOption[hints.size()]; + int index = 0; + for (Entry hint : hints.entrySet()) { + result[index++] = convertHintToOption(hint.getKey(), hint.getValue()); + } + return result; + } + + private static ReadQueryUpdateTransactionOption convertHintToOption(String hint, String value) { + Preconditions.checkNotNull(value); + switch (Preconditions.checkNotNull(hint).toUpperCase(Locale.ENGLISH)) { + case STATEMENT_TAG_HINT_NAME: + return Options.tag(value); + case RPC_PRIORITY_HINT_NAME: + try { + Priority priority = Priority.valueOf(value); + return Options.priority(RpcPriority.fromProto(priority)); + } catch (IllegalArgumentException illegalArgumentException) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, + "Invalid RPC priority value: " + value, + illegalArgumentException); + } + default: + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, "Invalid hint name: " + hint); + } + } + + boolean hasStatementHints() { + return this.hasStatementHints; + } + + String getSqlWithoutClientSideHints() { + return this.sqlWithoutClientSideHints; + } + + Map getClientSideStatementHints() { + return this.hints; + } + + private static Tuple> extract( + SimpleParser parser, ImmutableSet clientSideStatementHintNames) { + String updatedSql = parser.getSql(); + int posBeforeHintToken = parser.getPos(); + int removedHintsLength = 0; + boolean allClientSideHints = true; + // This method is only called if the parser has hints, so it is safe to ignore this result. + parser.eatTokens(getStartHintTokens(parser.getDialect())); + ImmutableMap.Builder builder = ImmutableMap.builder(); + while (parser.hasMoreTokens()) { + int posBeforeHint = parser.getPos(); + boolean foundClientSideHint = false; + Result hintName = parser.eatIdentifier(); + if (!hintName.isValid()) { + return Tuple.of(parser.getSql(), NO_HINTS); + } + if (!parser.eatToken('=')) { + return Tuple.of(parser.getSql(), NO_HINTS); + } + Result hintValue = eatHintLiteral(parser); + if (!hintValue.isValid()) { + return Tuple.of(parser.getSql(), NO_HINTS); + } + if (clientSideStatementHintNames.contains(hintName.getValue().toUpperCase(Locale.ENGLISH))) { + builder.put(hintName.getValue(), hintValue.getValue()); + foundClientSideHint = true; + } else { + allClientSideHints = false; + } + boolean endOfHints = parser.peekTokens(getEndHintTokens(parser.getDialect())); + if (!endOfHints && !parser.eatToken(',')) { + return Tuple.of(parser.getSql(), NO_HINTS); + } + if (foundClientSideHint) { + // Remove the client-side hint from the SQL string that is sent to Spanner. + updatedSql = + updatedSql.substring(0, posBeforeHint - removedHintsLength) + + parser.getSql().substring(parser.getPos()); + removedHintsLength += parser.getPos() - posBeforeHint; + } + if (endOfHints) { + break; + } + } + if (!parser.eatTokens(getEndHintTokens(parser.getDialect()))) { + return Tuple.of(parser.getSql(), NO_HINTS); + } + if (allClientSideHints) { + // Only client-side hints found. Remove the entire hint block. + updatedSql = + parser.getSql().substring(0, posBeforeHintToken) + + parser.getSql().substring(parser.getPos()); + } + return Tuple.of(updatedSql, builder.build()); + } + + /** Eats a hint literal. This is a literal that could be a quoted string, or an identifier. */ + private static Result eatHintLiteral(SimpleParser parser) { + if (parser.peekToken('\'')) { + return parser.eatSingleQuotedString(); + } + return parser.eatIdentifier(); + } +} 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 8974c4287bb..53e360b801b 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 @@ -54,7 +54,6 @@ import com.google.api.gax.rpc.UnavailableException; import com.google.api.gax.rpc.WatchdogProvider; import com.google.api.pathtemplate.PathTemplate; -import com.google.cloud.NoCredentials; import com.google.cloud.RetryHelper; import com.google.cloud.RetryHelper.RetryHelperException; import com.google.cloud.grpc.GcpManagedChannelBuilder; @@ -344,19 +343,11 @@ public GapicSpannerRpc(final SpannerOptions options) { // This sets the response compressor (Server -> Client). .withEncoding(compressorName)) .setHeaderProvider(headerProviderWithUserAgent) - .setAllowNonDefaultServiceAccount(true) - // Attempts direct access to spanner service over gRPC to improve throughput, - // whether the attempt is allowed is totally controlled by service owner. - // We'll only attempt DirectPath if we are using real credentials. - // NoCredentials is used for plain text connections, for example when connecting to - // the emulator. - .setAttemptDirectPath( - options.isAttemptDirectPath() - && !Objects.equals( - options.getScopedCredentials(), NoCredentials.getInstance())); + .setAllowNonDefaultServiceAccount(true); String directPathXdsEnv = System.getenv("GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS"); boolean isAttemptDirectPathXds = Boolean.parseBoolean(directPathXdsEnv); if (isAttemptDirectPathXds) { + defaultChannelProviderBuilder.setAttemptDirectPath(true); defaultChannelProviderBuilder.setAttemptDirectPathXds(); } if (options.isUseVirtualThreads()) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java index dbc521b5ecb..4a60eb3ef9b 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java @@ -299,15 +299,6 @@ public SpannerStub createStub() throws IOException { "Transport not supported: %s", getTransportChannelProvider().getTransportName())); } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - /** Returns the default service name. */ @Override public String getServiceName() { @@ -808,15 +799,6 @@ public UnaryCallSettings.Builder rollbackSettings() { return batchWriteSettings; } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - @Override public SpannerStubSettings build() throws IOException { return new SpannerStubSettings(this); diff --git a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json index a01e9dbb010..92d5f0c9a0b 100644 --- a/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json +++ b/google-cloud-spanner/src/main/resources/META-INF/native-image/com.google.cloud.spanner.admin.instance.v1/reflect-config.json @@ -1817,6 +1817,15 @@ "allDeclaredClasses": true, "allPublicClasses": true }, + { + "name": "com.google.spanner.admin.instance.v1.FulfillmentPeriod", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, { "name": "com.google.spanner.admin.instance.v1.GetInstanceConfigRequest", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java index b57f3aa723d..f50ef5e2090 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractLatencyBenchmark.java @@ -38,6 +38,9 @@ public abstract class AbstractLatencyBenchmark { Integer.valueOf( MoreObjects.firstNonNull(System.getenv("SPANNER_TEST_JMH_NUM_PARALLEL_THREADS"), "30")); + static final int NUM_GRPC_CHANNELS = + Integer.valueOf( + MoreObjects.firstNonNull(System.getenv("SPANNER_TEST_JMH_NUM_GRPC_CHANNELS"), "4")); /** * Total number of reads per test run for 1 thread. Increasing the value here will increase the * duration of the benchmark. For ex - With PARALLEL_THREADS = 2, TOTAL_READS_PER_RUN = 200, there diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java index 760f4e8a659..bcc455ff9b1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractMockServerTest.java @@ -31,7 +31,7 @@ abstract class AbstractMockServerTest { protected static Server server; protected static LocalChannelProvider channelProvider; - private Spanner spanner; + protected Spanner spanner; @BeforeClass public static void startMockServer() throws IOException { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java index c1012d7ff8f..07f7967c2aa 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncRunnerTest.java @@ -33,6 +33,7 @@ import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.CreateSessionRequest; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; import io.grpc.Status; @@ -44,12 +45,17 @@ import java.util.concurrent.Executors; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.atomic.AtomicInteger; +import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class AsyncRunnerTest extends AbstractAsyncTransactionTest { + @After + public void clearRequests() { + mockSpanner.clearRequests(); + } @Test public void testAsyncRunner_doesNotReturnCommitTimestampBeforeCommit() { @@ -195,15 +201,28 @@ public void asyncRunnerUpdateAbortedWithoutGettingResult() throws Exception { executor); assertThat(result.get()).isNull(); assertThat(attempt.get()).isEqualTo(2); - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteSqlRequest.class, - // The retry will use an explicit BeginTransaction RPC because the first statement of - // the transaction did not return a transaction id during the initial attempt. - BeginTransactionRequest.class, - ExecuteSqlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + // The retry will use an explicit BeginTransaction RPC because the first statement of + // the transaction did not return a transaction id during the initial attempt. + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + // The retry will use an explicit BeginTransaction RPC because the first statement of + // the transaction did not return a transaction id during the initial attempt. + BeginTransactionRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } } @Test @@ -241,9 +260,18 @@ public void asyncRunnerWaitsUntilAsyncUpdateHasFinished() throws Exception { }, executor); res.get(); - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteSqlRequest.class, CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, ExecuteSqlRequest.class, CommitRequest.class); + } } @Test @@ -377,15 +405,28 @@ public void asyncRunnerBatchUpdateAbortedWithoutGettingResult() throws Exception executor); assertThat(result.get()).isNull(); assertThat(attempt.get()).isEqualTo(2); - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteSqlRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class, - ExecuteSqlRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + ExecuteSqlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } @Test @@ -423,9 +464,18 @@ public void asyncRunnerWaitsUntilAsyncBatchUpdateHasFinished() throws Exception }, executor); res.get(); - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + } } @Test @@ -520,4 +570,11 @@ public void asyncRunnerRead() throws Exception { executor); assertThat(val.get()).containsExactly("v1", "v2", "v3"); } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } 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 58b8e65974b..09d14cee3bf 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 @@ -49,6 +49,7 @@ import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; +import com.google.spanner.v1.CreateSessionRequest; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.RollbackRequest; @@ -344,18 +345,34 @@ public void asyncTransactionManagerFireAndForgetInvalidUpdate() throws Exception } } } - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - // The first update that fails. This will cause a transaction retry. - ExecuteSqlRequest.class, - // The retry will use an explicit BeginTransaction call. - BeginTransactionRequest.class, - // The first update will again fail, but now there is a transaction id, so the - // transaction can continue. - ExecuteSqlRequest.class, - ExecuteSqlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + // The first update that fails. This will cause a transaction retry. + ExecuteSqlRequest.class, + // The retry will use an explicit BeginTransaction call. + BeginTransactionRequest.class, + // The first update will again fail, but now there is a transaction id, so the + // transaction can continue. + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + // The first update that fails. This will cause a transaction retry. + ExecuteSqlRequest.class, + // The retry will use an explicit BeginTransaction call. + BeginTransactionRequest.class, + // The first update will again fail, but now there is a transaction id, so the + // transaction can continue. + ExecuteSqlRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } } @Test @@ -549,9 +566,18 @@ public void asyncTransactionManagerWaitsUntilAsyncUpdateHasFinished() throws Exc executor) .commitAsync() .get(); - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteSqlRequest.class, CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteSqlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, ExecuteSqlRequest.class, CommitRequest.class); + } break; } catch (AbortedException e) { txn = mgr.resetForRetryAsync(); @@ -655,12 +681,22 @@ public void asyncTransactionManagerFireAndForgetInvalidBatchUpdate() throws Exce } } } - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } @Test @@ -693,13 +729,24 @@ public void asyncTransactionManagerBatchUpdateAborted() throws Exception { assertThat(attempt.get()).isEqualTo(2); // There should only be 1 CommitRequest, as the first attempt should abort already after the // ExecuteBatchDmlRequest. - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - BeginTransactionRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } @Test @@ -730,13 +777,24 @@ public void asyncTransactionManagerBatchUpdateAbortedBeforeFirstStatement() thro assertThat(attempt.get()).isEqualTo(2); // There should only be 1 CommitRequest, as the first attempt should abort already after the // ExecuteBatchDmlRequest. - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - BeginTransactionRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } @Test @@ -785,14 +843,26 @@ public void asyncTransactionManagerWithBatchUpdateCommitAborted() throws Excepti } finally { mockSpanner.putStatementResult(StatementResult.update(UPDATE_STATEMENT, UPDATE_COUNT)); } - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class, - BeginTransactionRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } @Test @@ -831,23 +901,46 @@ public void asyncTransactionManagerBatchUpdateAbortedWithoutGettingResult() thro Iterable> requests = mockSpanner.getRequestTypes(); int size = Iterables.size(requests); assertThat(size).isIn(Range.closed(5, 6)); - if (size == 5) { - assertThat(requests) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - BeginTransactionRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + if (size == 6) { + assertThat(requests) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(requests) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } else { - assertThat(requests) - .containsExactly( - BatchCreateSessionsRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class, - BeginTransactionRequest.class, - ExecuteBatchDmlRequest.class, - CommitRequest.class); + if (size == 5) { + assertThat(requests) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(requests) + .containsExactly( + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class, + BeginTransactionRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } } } @@ -875,9 +968,18 @@ public void asyncTransactionManagerWithBatchUpdateCommitFails() throws Exception assertThat(e.getErrorCode()).isEqualTo(ErrorCode.RESOURCE_EXHAUSTED); assertThat(e.getMessage()).contains("mutation limit exceeded"); } - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + } } @Test @@ -901,9 +1003,18 @@ public void asyncTransactionManagerWaitsUntilAsyncBatchUpdateHasFinished() throw } } } - assertThat(mockSpanner.getRequestTypes()) - .containsExactly( - BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + if (isMultiplexedSessionsEnabled()) { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + CreateSessionRequest.class, + BatchCreateSessionsRequest.class, + ExecuteBatchDmlRequest.class, + CommitRequest.class); + } else { + assertThat(mockSpanner.getRequestTypes()) + .containsExactly( + BatchCreateSessionsRequest.class, ExecuteBatchDmlRequest.class, CommitRequest.class); + } } @Test @@ -1034,4 +1145,11 @@ public void onSuccess(Long aLong) { assertThat(res.get(10L, TimeUnit.SECONDS)).isNull(); } } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java index 743d21b587c..939114a7f60 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BaseSessionPoolTest.java @@ -85,15 +85,32 @@ SessionImpl mockSession() { return session; } - SessionImpl buildMockSession(ReadContext context) { - SpannerImpl spanner = mock(SpannerImpl.class); + SessionImpl mockMultiplexedSession() { + final SessionImpl session = mock(SessionImpl.class); + Map options = new HashMap<>(); + when(session.getIsMultiplexed()).thenReturn(true); + when(session.getOptions()).thenReturn(options); + when(session.getName()) + .thenReturn( + "projects/dummy/instances/dummy/database/dummy/sessions/session" + sessionIndex); + when(session.asyncClose()).thenReturn(ApiFutures.immediateFuture(Empty.getDefaultInstance())); + when(session.writeWithOptions(any(Iterable.class))) + .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); + when(session.writeAtLeastOnceWithOptions(any(Iterable.class))) + .thenReturn(new CommitResponse(com.google.spanner.v1.CommitResponse.getDefaultInstance())); + sessionIndex++; + return session; + } + + SessionImpl buildMockSession(SpannerImpl spanner, ReadContext context) { Map options = new HashMap<>(); options.put(Option.CHANNEL_HINT, channelHint.getAndIncrement()); final SessionImpl session = new SessionImpl( spanner, - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - options) { + new SessionReference( + "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, + options)) { @Override public ReadContext singleUse(TimestampBound bound) { // The below stubs are added so that we can mock keep-alive. @@ -122,16 +139,17 @@ public CommitResponse writeWithOptions( return session; } - SessionImpl buildMockMultiplexedSession(ReadContext context, Timestamp creationTime) { - SpannerImpl spanner = mock(SpannerImpl.class); + SessionImpl buildMockMultiplexedSession( + SpannerImpl spanner, ReadContext context, Timestamp creationTime) { Map options = new HashMap<>(); final SessionImpl session = new SessionImpl( spanner, - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - creationTime, - true, - options) { + new SessionReference( + "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, + creationTime, + true, + options)) { @Override public ReadContext singleUse(TimestampBound bound) { // The below stubs are added so that we can mock keep-alive. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java index b7c4834044a..8d05df538a5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchClientImplTest.java @@ -86,6 +86,9 @@ public void setUp() { GrpcTransportOptions transportOptions = mock(GrpcTransportOptions.class); when(transportOptions.getExecutorFactory()).thenReturn(mock(ExecutorFactory.class)); when(spannerOptions.getTransportOptions()).thenReturn(transportOptions); + SessionPoolOptions sessionPoolOptions = mock(SessionPoolOptions.class); + when(sessionPoolOptions.getPoolMaintainerClock()).thenReturn(Clock.INSTANCE); + when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); @SuppressWarnings("resource") SpannerImpl spanner = new SpannerImpl(gapicRpc, spannerOptions); client = new BatchClientImpl(spanner.getSessionClient(db)); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java index b67123e0a58..4bcc5d07401 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/BatchCreateSessionsSlowTest.java @@ -20,6 +20,7 @@ import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeFalse; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.cloud.NoCredentials; @@ -85,15 +86,22 @@ public static void stopServer() throws InterruptedException { @Before public void setUp() { + SessionPoolOptions sessionPoolOptions = + SessionPoolOptions.newBuilder().setFailOnSessionLeak().build(); spanner = SpannerOptions.newBuilder() .setProjectId(TEST_PROJECT) .setDatabaseRole(TEST_DATABASE_ROLE) .setChannelProvider(channelProvider) .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption(SessionPoolOptions.newBuilder().setFailOnSessionLeak().build()) + .setSessionPoolOption(sessionPoolOptions) .build() .getService(); + // BatchCreateSessions RPC is not invoked when multiplexed sessions is enabled and just RO + // transactions is used. + // Use a different transaction shape (for ex - RW transactions) which is presently unsupported + // with multiplexed sessions. + assumeFalse(sessionPoolOptions.getUseMultiplexedSession()); } @After diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java index 5af4ad4d41f..4b1d3361cc6 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ChannelUsageTest.java @@ -18,6 +18,7 @@ import static io.grpc.Grpc.TRANSPORT_ATTR_REMOTE_ADDR; import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeFalse; import com.google.cloud.NoCredentials; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; @@ -220,6 +221,9 @@ private SpannerOptions createSpannerOptions() { @Test public void testCreatesNumChannels() { try (Spanner spanner = createSpannerOptions().getService()) { + assumeFalse( + "GRPC-GCP is currently not supported with multiplexed sessions", + isMultiplexedSessionsEnabled(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1)) { while (resultSet.next()) {} @@ -231,6 +235,9 @@ public void testCreatesNumChannels() { @Test public void testUsesAllChannels() throws InterruptedException, ExecutionException { try (Spanner spanner = createSpannerOptions().getService()) { + assumeFalse( + "GRPC-GCP is currently not supported with multiplexed sessions", + isMultiplexedSessionsEnabled(spanner)); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(numChannels * 2)); @@ -257,4 +264,11 @@ public void testUsesAllChannels() throws InterruptedException, ExecutionExceptio } assertEquals(numChannels, executeSqlLocalIps.size()); } + + private boolean isMultiplexedSessionsEnabled(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index 057d85bb346..2a0c9c77c36 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -32,6 +32,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; +import static org.junit.Assume.assumeTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -2318,7 +2320,9 @@ public void singleUse() { assertThat(checkedOut).isEmpty(); try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { assertThat(rs.next()).isTrue(); - assertThat(checkedOut).hasSize(1); + if (!isMultiplexedSessionsEnabled()) { + assertThat(checkedOut).hasSize(1); + } assertThat(rs.getLong(0)).isEqualTo(1L); assertThat(rs.next()).isFalse(); } @@ -3009,6 +3013,8 @@ public void testDatabaseOrInstanceDoesNotExistOnCreate() { "Instance", SpannerExceptionFactory.INSTANCE_RESOURCE_TYPE, INSTANCE_NAME) }; for (StatusRuntimeException exception : exceptions) { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofStickyException(exception)); mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.ofStickyException(exception)); // Ensure there are no sessions in the pool by default. @@ -3175,6 +3181,8 @@ public void testGetInvalidatedClientMultipleTimes() { "Instance", SpannerExceptionFactory.INSTANCE_RESOURCE_TYPE, INSTANCE_NAME) }; for (StatusRuntimeException exception : exceptions) { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofStickyException(exception)); mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.ofStickyException(exception)); try (Spanner spanner = @@ -3648,6 +3656,9 @@ public void testBatchCreateSessionsPermissionDenied() { mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.ofStickyException( Status.PERMISSION_DENIED.withDescription("Not permitted").asRuntimeException())); + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofStickyException( + Status.PERMISSION_DENIED.withDescription("Not permitted").asRuntimeException())); try (Spanner spanner = SpannerOptions.newBuilder() .setProjectId("my-project") @@ -3662,6 +3673,9 @@ public void testBatchCreateSessionsPermissionDenied() { // Actually trying to get any results will cause an exception. SpannerException e = assertThrows(SpannerException.class, rs::next); assertEquals(ErrorCode.PERMISSION_DENIED, e.getErrorCode()); + } finally { + mockSpanner.setBatchCreateSessionsExecutionTime(SimulatedExecutionTime.none()); + mockSpanner.setCreateSessionExecutionTime(SimulatedExecutionTime.none()); } } @@ -3747,6 +3761,9 @@ public void testSpecificTimeout() { @Test public void testBatchCreateSessionsFailure_shouldNotPropagateToCloseMethod() { + assumeFalse( + "BatchCreateSessions RPC is not invoked for multiplexed sessions", + isMultiplexedSessionsEnabled()); try { // Simulate session creation failures on the backend. mockSpanner.setBatchCreateSessionsExecutionTime( @@ -3765,6 +3782,28 @@ public void testBatchCreateSessionsFailure_shouldNotPropagateToCloseMethod() { } } + @Test + public void testCreateSessionsFailure_shouldNotPropagateToCloseMethod() { + assumeTrue( + "CreateSessions is not invoked for regular sessions", isMultiplexedSessionsEnabled()); + try { + // Simulate session creation failures on the backend. + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.ofStickyException(Status.RESOURCE_EXHAUSTED.asRuntimeException())); + DatabaseClient client = + spannerWithEmptySessionPool.getDatabaseClient( + DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + // This will not cause any failure as getting a session from the pool is guaranteed to be + // non-blocking, and any exceptions will be delayed until actual query execution. + try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { + SpannerException e = assertThrows(SpannerException.class, rs::next); + assertThat(e.getErrorCode()).isEqualTo(ErrorCode.RESOURCE_EXHAUSTED); + } + } finally { + mockSpanner.setCreateSessionExecutionTime(SimulatedExecutionTime.none()); + } + } + @Test public void testReadWriteTransaction_usesOptions() { SessionPool pool = mock(SessionPool.class); @@ -5237,4 +5276,11 @@ private ListValue getRows(Dialect dialect) { return valuesBuilder.build(); } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java index d966d58dbd5..7579c4328d2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DefaultBenchmark.java @@ -31,7 +31,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; -import org.openjdk.jmh.annotations.AuxCounters; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; @@ -69,8 +68,7 @@ @Warmup(iterations = 0) public class DefaultBenchmark extends AbstractLatencyBenchmark { - @State(Scope.Thread) - @AuxCounters(org.openjdk.jmh.annotations.AuxCounters.Type.EVENTS) + @State(Scope.Benchmark) public static class BenchmarkState { // TODO(developer): Add your values here for PROJECT_ID, INSTANCE_ID, DATABASE_ID @@ -97,6 +95,7 @@ public void setup() throws Exception { .setWaitForMinSessions(org.threeten.bp.Duration.ofSeconds(20)) .build()) .setHost(SERVER_URL) + .setNumChannels(NUM_GRPC_CHANNELS) .build(); spanner = options.getService(); client = @@ -123,7 +122,8 @@ public void burstQueries(final BenchmarkState server) throws Exception { MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); List>> results = new ArrayList<>(PARALLEL_THREADS); for (int i = 0; i < PARALLEL_THREADS; i++) { - results.add(service.submit(() -> runBenchmarksForQueries(server, TOTAL_READS_PER_RUN))); + results.add( + service.submit(() -> runBenchmarksForSingleUseQueries(server, TOTAL_READS_PER_RUN))); } collectResultsAndPrint(service, results, TOTAL_READS_PER_RUN); } @@ -140,7 +140,8 @@ public void burstQueriesAndWrites(final BenchmarkState server) throws Exception MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); List>> results = new ArrayList<>(PARALLEL_THREADS); for (int i = 0; i < PARALLEL_THREADS; i++) { - results.add(service.submit(() -> runBenchmarksForQueries(server, TOTAL_READS_PER_RUN))); + results.add( + service.submit(() -> runBenchmarksForSingleUseQueries(server, TOTAL_READS_PER_RUN))); } for (int i = 0; i < PARALLEL_THREADS; i++) { results.add(service.submit(() -> runBenchmarkForUpdates(server, TOTAL_WRITES_PER_RUN))); @@ -167,25 +168,25 @@ public void burstUpdates(final BenchmarkState server) throws Exception { collectResultsAndPrint(service, results, TOTAL_WRITES_PER_RUN); } - private List runBenchmarksForQueries( + private List runBenchmarksForSingleUseQueries( final BenchmarkState server, int numberOfOperations) { List results = new ArrayList<>(numberOfOperations); // Execute one query to make sure everything has been warmed up. executeWarmup(server); for (int i = 0; i < numberOfOperations; i++) { - results.add(executeQuery(server)); + results.add(executeSingleUseQuery(server)); } return results; } private void executeWarmup(final BenchmarkState server) { for (int i = 0; i < WARMUP_REQUEST_COUNT; i++) { - executeQuery(server); + executeSingleUseQuery(server); } } - private java.time.Duration executeQuery(final BenchmarkState server) { + private java.time.Duration executeSingleUseQuery(final BenchmarkState server) { Stopwatch watch = Stopwatch.createStarted(); try (ResultSet rs = server.client.singleUse().executeQuery(getRandomisedReadStatement())) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/FailOnOverkillTraceComponentImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/FailOnOverkillTraceComponentImpl.java index 4d9b4ddd805..9e54af9c4e7 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/FailOnOverkillTraceComponentImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/FailOnOverkillTraceComponentImpl.java @@ -45,6 +45,7 @@ import io.opencensus.trace.propagation.PropagationComponent; import io.opencensus.trace.propagation.TextFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.List; @@ -62,7 +63,8 @@ public class FailOnOverkillTraceComponentImpl extends TraceComponent { private final Clock clock = ZeroTimeClock.getInstance(); private final ExportComponent exportComponent = new TestExportComponent(); private final TraceConfig traceConfig = new TestTraceConfig(); - private static final Map spans = new LinkedHashMap<>(); + private static final Map spans = + Collections.synchronizedMap(new LinkedHashMap<>()); private static final List annotations = new ArrayList<>(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java index 7a27123bdc3..efb012ba8e2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java @@ -97,6 +97,7 @@ public GceTestEnvConfig() { customChannelProviderBuilder .setEndpoint(DIRECT_PATH_ENDPOINT) .setAttemptDirectPath(true) + .setAttemptDirectPathXds() .setInterceptorProvider(interceptorProvider); builder.setChannelProvider(customChannelProviderBuilder.build()); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java index 62a25f9dc4d..69004a4913b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestWithClosedSessionsEnv.java @@ -18,6 +18,7 @@ import com.google.cloud.spanner.SessionPool.PooledSession; import com.google.cloud.spanner.SessionPool.PooledSessionFuture; +import com.google.cloud.spanner.SessionPool.SessionFutureWrapper; import com.google.cloud.spanner.testing.RemoteSpannerHelper; /** @@ -86,6 +87,20 @@ PooledSessionFuture getSession() { return session; } + @Override + SessionFutureWrapper getMultiplexedSession() { + SessionFutureWrapper session = super.getMultiplexedSession(); + if (invalidateNextSession) { + session.get().get().getDelegate().close(); + session.get().get().setAllowReplacing(false); + awaitDeleted(session.get().get().getDelegate()); + session.get().get().setAllowReplacing(allowReplacing); + invalidateNextSession = false; + } + session.get().get().setAllowReplacing(allowReplacing); + return session; + } + /** * Deleting a session server side takes some time. This method checks and waits until the * session really has been deleted. diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java index 18973bd2d9d..07e8bdae1bc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java @@ -585,6 +585,8 @@ private static void checkStreamException( private ConcurrentMap partialStatementResults = new ConcurrentHashMap<>(); private ConcurrentMap sessions = new ConcurrentHashMap<>(); + private ConcurrentMap multiplexedSessions = new ConcurrentHashMap<>(); + private ConcurrentMap sessionLastUsed = new ConcurrentHashMap<>(); private ConcurrentMap transactions = new ConcurrentHashMap<>(); private final Queue transactionsStarted = new ConcurrentLinkedQueue<>(); @@ -828,7 +830,7 @@ public void batchCreateSessions( response.addSession(session); numSessionsCreated.incrementAndGet(); } else { - sessions.remove(name); + removeSession(name); } } else { // Someone else tried to create a session with the same id. This should not be possible @@ -839,12 +841,12 @@ public void batchCreateSessions( responseObserver.onCompleted(); } catch (StatusRuntimeException e) { if (name != null) { - sessions.remove(name); + removeSession(name); } responseObserver.onError(e); } catch (Throwable e) { if (name != null) { - sessions.remove(name); + removeSession(name); } responseObserver.onError( Status.INTERNAL @@ -872,7 +874,7 @@ public void createSession( .setApproximateLastUseTime(now) .setMultiplexed(requestSession.getMultiplexed()) .build(); - Session prev = sessions.putIfAbsent(name, session); + Session prev = addSession(session); if (prev == null) { sessionLastUsed.put(name, Instant.now()); numSessionsCreated.incrementAndGet(); @@ -883,10 +885,10 @@ public void createSession( responseObserver.onError(Status.ALREADY_EXISTS.asRuntimeException()); } } catch (StatusRuntimeException e) { - sessions.remove(name); + removeSession(name); responseObserver.onError(e); } catch (Throwable e) { - sessions.remove(name); + removeSession(name); responseObserver.onError( Status.INTERNAL .withDescription("Create session failed: " + e.getMessage()) @@ -900,7 +902,7 @@ public void getSession(GetSessionRequest request, StreamObserver respon Preconditions.checkNotNull(request.getName()); try { getSessionExecutionTime.simulateExecutionTime(exceptions, stickyGlobalExceptions, freezeLock); - Session session = sessions.get(request.getName()); + Session session = getSession(request.getName()); if (session == null) { setSessionNotFound(request.getName(), responseObserver); } else { @@ -969,7 +971,7 @@ public void deleteSession(DeleteSessionRequest request, StreamObserver re try { deleteSessionExecutionTime.simulateExecutionTime( exceptions, stickyGlobalExceptions, freezeLock); - Session session = sessions.get(request.getName()); + Session session = getSession(request.getName()); if (session != null) { try { doDeleteSession(session); @@ -986,7 +988,7 @@ public void deleteSession(DeleteSessionRequest request, StreamObserver re } void doDeleteSession(Session session) { - sessions.remove(session.getName()); + removeSession(session.getName()); transactionCounters.remove(session.getName()); sessionLastUsed.remove(session.getName()); } @@ -995,7 +997,7 @@ void doDeleteSession(Session session) { public void executeSql(ExecuteSqlRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1081,7 +1083,7 @@ public void executeBatchDml( ExecuteBatchDmlRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1184,7 +1186,7 @@ public void executeStreamingSql( requests.add(request); } Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1586,7 +1588,7 @@ private void throwTransactionAborted(ByteString transactionId) { public void read(final ReadRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1619,7 +1621,7 @@ public void streamingRead( final ReadRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1822,7 +1824,7 @@ public void beginTransaction( BeginTransactionRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1884,7 +1886,10 @@ private void setReadTimestamp(TransactionOptions options, Transaction.Builder bu } private void simulateAbort(Session session, ByteString transactionId) { - ensureMostRecentTransaction(session, transactionId); + if (!session.getMultiplexed()) { + // multiplexed sessions allow concurrent transactions on a single session. + ensureMostRecentTransaction(session, transactionId); + } if (isReadWriteTransaction(transactionId)) { if (abortNextStatement.getAndSet(false) || abortProbability > random.nextDouble()) { rollbackTransaction(transactionId); @@ -1933,7 +1938,7 @@ private void ensureMostRecentTransaction(Session session, ByteString transaction public void commit(CommitRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -1995,7 +2000,7 @@ public void batchWrite( BatchWriteRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getSession()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -2023,7 +2028,7 @@ private void commitTransaction(ByteString transactionId) { public void rollback(RollbackRequest request, StreamObserver responseObserver) { requests.add(request); Preconditions.checkNotNull(request.getTransactionId()); - Session session = sessions.get(request.getSession()); + Session session = getSession(request.getSession()); if (session == null) { setSessionNotFound(request.getSession(), responseObserver); return; @@ -2100,7 +2105,7 @@ private void partition( TransactionSelector transactionSelector, PartitionOptions options, StreamObserver responseObserver) { - Session session = sessions.get(sessionName); + Session session = getSession(sessionName); if (session == null) { setSessionNotFound(sessionName, responseObserver); return; @@ -2133,6 +2138,10 @@ public int numSessionsCreated() { return numSessionsCreated.get(); } + public Map getSessions() { + return sessions; + } + @Override public List getRequests() { return new ArrayList<>(this.requests); @@ -2399,4 +2408,31 @@ public SimulatedExecutionTime getStreamingReadExecutionTime() { public void setStreamingReadExecutionTime(SimulatedExecutionTime streamingReadExecutionTime) { this.streamingReadExecutionTime = Preconditions.checkNotNull(streamingReadExecutionTime); } + + Session addSession(Session session) { + Session prev; + if (session.getMultiplexed()) { + prev = multiplexedSessions.putIfAbsent(session.getName(), session); + } else { + prev = sessions.putIfAbsent(session.getName(), session); + } + return prev; + } + + void removeSession(String name) { + if (multiplexedSessions.containsKey(name)) { + multiplexedSessions.remove(name); + } else { + sessions.remove(name); + } + } + + Session getSession(String name) { + if (multiplexedSessions.containsKey(name)) { + return multiplexedSessions.get(name); + } else if (sessions.containsKey(name)) { + return sessions.get(name); + } + return null; + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionMaintainerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionMaintainerTest.java index 2c3ada10803..457004a18fb 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionMaintainerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionMaintainerTest.java @@ -28,7 +28,7 @@ import static org.mockito.MockitoAnnotations.initMocks; import com.google.cloud.Timestamp; -import com.google.cloud.spanner.SessionPool.MultiplexedSession; +import com.google.cloud.spanner.SessionPool.CachedSession; import com.google.cloud.spanner.SessionPool.MultiplexedSessionInitializationConsumer; import com.google.cloud.spanner.SessionPool.MultiplexedSessionMaintainerConsumer; import com.google.cloud.spanner.SessionPool.Position; @@ -37,8 +37,11 @@ import io.opentelemetry.api.OpenTelemetry; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,7 +60,7 @@ public class MultiplexedSessionMaintainerTest extends BaseSessionPoolTest { private DatabaseId db = DatabaseId.of("projects/p/instances/i/databases/unused"); private SessionPoolOptions options; private FakeClock clock = new FakeClock(); - private List multiplexedSessionsRemoved = new ArrayList<>(); + private List multiplexedSessionsRemoved = new ArrayList<>(); @Before public void setUp() { @@ -75,13 +78,16 @@ public void setUp() { .setIncStep(1) .setKeepAliveIntervalMinutes(2) .setUseMultiplexedSession(true) + .setPoolMaintainerClock(clock) .build(); + when(spannerOptions.getSessionPoolOptions()).thenReturn(options); + Assume.assumeTrue(options.getUseMultiplexedSession()); multiplexedSessionsRemoved.clear(); } @Test public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStaleSessionIsRemoved() - throws InterruptedException { + throws Exception { doAnswer( invocation -> { MultiplexedSessionInitializationConsumer consumer = @@ -92,11 +98,12 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale Instant.ofEpochMilli(clock.currentTimeMillis.get()).getEpochSecond(), 0); consumer.onSessionReady( setupMockSession( - buildMockMultiplexedSession(mockContext, timestamp.toProto()), mockContext)); + buildMockMultiplexedSession(client, mockContext, timestamp.toProto()), + mockContext)); return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); doAnswer( invocation -> { MultiplexedSessionMaintainerConsumer consumer = @@ -107,16 +114,17 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale Instant.ofEpochMilli(clock.currentTimeMillis.get()).getEpochSecond(), 0); consumer.onSessionReady( setupMockSession( - buildMockMultiplexedSession(mockContext, timestamp.toProto()), mockContext)); + buildMockMultiplexedSession(client, mockContext, timestamp.toProto()), + mockContext)); return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); SessionPool pool = createPool(); // Run one maintenance loop. - SessionFutureWrapper session1 = pool.getMultiplexedSessionWithFallback(); + CachedSession session1 = pool.getMultiplexedSessionWithFallback().get().get(); runMaintenanceLoop(clock, pool, 1); assertTrue(multiplexedSessionsRemoved.isEmpty()); @@ -126,10 +134,11 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale // Run second maintenance loop. the first session would now be stale since it has now existed // for more than 7 days. runMaintenanceLoop(clock, pool, 1); - SessionFutureWrapper session2 = pool.getMultiplexedSessionWithFallback(); - assertNotEquals(session1.get().getName(), session2.get().getName()); + + CachedSession session2 = pool.getMultiplexedSessionWithFallback().get().get(); + assertNotEquals(session1.getName(), session2.getName()); assertEquals(1, multiplexedSessionsRemoved.size()); - assertTrue(multiplexedSessionsRemoved.contains(session1.get().get())); + assertTrue(getNameOfSessionRemoved().contains(session1.getName())); // Advance clock by 8 days clock.currentTimeMillis.addAndGet(Duration.ofDays(8).toMillis()); @@ -138,10 +147,10 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale // for more than 7 days runMaintenanceLoop(clock, pool, 1); - SessionFutureWrapper session3 = pool.getMultiplexedSessionWithFallback(); - assertNotEquals(session2.get().getName(), session3.get().getName()); + CachedSession session3 = pool.getMultiplexedSessionWithFallback().get().get(); + assertNotEquals(session2.getName(), session3.getName()); assertEquals(2, multiplexedSessionsRemoved.size()); - assertTrue(multiplexedSessionsRemoved.contains(session2.get().get())); + assertTrue(getNameOfSessionRemoved().contains(session2.getName())); } @Test @@ -157,11 +166,12 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale Instant.ofEpochMilli(clock.currentTimeMillis.get()).getEpochSecond(), 0); consumer.onSessionReady( setupMockSession( - buildMockMultiplexedSession(mockContext, timestamp.toProto()), mockContext)); + buildMockMultiplexedSession(client, mockContext, timestamp.toProto()), + mockContext)); return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); SessionPool pool = createPool(); // Run one maintenance loop. @@ -192,11 +202,12 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale Instant.ofEpochMilli(clock.currentTimeMillis.get()).getEpochSecond(), 0); consumer.onSessionReady( setupMockSession( - buildMockMultiplexedSession(mockContext, timestamp.toProto()), mockContext)); + buildMockMultiplexedSession(client, mockContext, timestamp.toProto()), + mockContext)); return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); doAnswer( invocation -> { MultiplexedSessionMaintainerConsumer consumer = @@ -206,7 +217,7 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); SessionPool pool = createPool(); // Advance clock by 8 days @@ -217,7 +228,7 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale runMaintenanceLoop(clock, pool, 1); assertTrue(multiplexedSessionsRemoved.isEmpty()); verify(sessionClient, times(1)) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); // Advance clock by 10s and now mock session creation to be successful. clock.currentTimeMillis.addAndGet(Duration.ofSeconds(10).toMillis()); @@ -231,11 +242,12 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale Instant.ofEpochMilli(clock.currentTimeMillis.get()).getEpochSecond(), 0); consumer.onSessionReady( setupMockSession( - buildMockMultiplexedSession(mockContext, timestamp.toProto()), mockContext)); + buildMockMultiplexedSession(client, mockContext, timestamp.toProto()), + mockContext)); return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); // Run one maintenance loop. Attempt should be ignored as it has not been 10 minutes since last // attempt. runMaintenanceLoop(clock, pool, 1); @@ -243,7 +255,7 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale assertTrue(multiplexedSessionsRemoved.isEmpty()); assertEquals(session1.get().getName(), session2.get().getName()); verify(sessionClient, times(1)) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); // Advance clock by 15 minutes clock.currentTimeMillis.addAndGet(Duration.ofMinutes(15).toMillis()); @@ -251,10 +263,10 @@ public void testMaintainMultiplexedSession_whenNewSessionCreated_assertThatStale // the last attempt. runMaintenanceLoop(clock, pool, 1); SessionFutureWrapper session3 = pool.getMultiplexedSessionWithFallback(); - assertTrue(multiplexedSessionsRemoved.contains(session1.get().get())); + assertTrue(getNameOfSessionRemoved().contains(session1.get().get().getName())); assertNotEquals(session1.get().getName(), session3.get().getName()); verify(sessionClient, times(2)) - .createMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionMaintainerConsumer.class)); } private SessionImpl setupMockSession(final SessionImpl session, final ReadContext mockContext) { @@ -283,4 +295,10 @@ private SessionPool createPool() { }; return pool; } + + Set getNameOfSessionRemoved() { + return multiplexedSessionsRemoved.stream() + .map(session -> session.getName()) + .collect(Collectors.toSet()); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionPoolTest.java index d2aae568451..5e96e519fc7 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionPoolTest.java @@ -36,6 +36,7 @@ import io.opentelemetry.api.OpenTelemetry; import java.io.PrintWriter; import java.io.StringWriter; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -81,6 +82,8 @@ public void setUp() { .setMaxSessions(2) .setUseMultiplexedSession(true) .build(); + when(spannerOptions.getSessionPoolOptions()).thenReturn(options); + Assume.assumeTrue(options.getUseMultiplexedSession()); } @Test @@ -97,7 +100,7 @@ public void testGetMultiplexedSession_whenSessionInitializationSucceeded_assertS assertNotNull(multiplexedSessionFuture.get()); } verify(sessionClient, times(1)) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); } @Test @@ -136,7 +139,7 @@ public void testGetMultiplexedSession_whenSessionCreationFailed_assertErrorForWa return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); options = options .toBuilder() @@ -151,7 +154,7 @@ public void testGetMultiplexedSession_whenSessionCreationFailed_assertErrorForWa for (int i = 0; i < 5; i++) { SpannerException e = assertThrows( - SpannerException.class, () -> pool.getMultiplexedSessionWithFallback().get()); + SpannerException.class, () -> pool.getMultiplexedSessionWithFallback().get().get()); assertEquals(ErrorCode.DEADLINE_EXCEEDED, e.getErrorCode()); } // assert that all 5 requests failed with exception @@ -168,6 +171,6 @@ private void setupMockMultiplexedSessionCreation() { return null; }) .when(sessionClient) - .createMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java new file mode 100644 index 00000000000..ff976141d96 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MultiplexedSessionsBenchmark.java @@ -0,0 +1,183 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.cloud.spanner.BenchmarkingUtilityScripts.collectResults; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningScheduledExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; + +/** + * Benchmarks for measuring existing latencies of various APIs using the Java Client with + * multiplexed sessions. The benchmarks are bound to the Maven profile `benchmark` and can be + * executed like this: + * mvn clean test -DskipTests -Pbenchmark -Dbenchmark.name=MultiplexedSessionsBenchmark + * Test Table Schema : + * + *

    CREATE TABLE FOO ( id INT64 NOT NULL, BAZ INT64, BAR INT64, ) PRIMARY KEY(id); + * + *

    Below are a few considerations here: 1. We use all default options with multiplexed sessions + * for this test because that is what most customers would be using. 2. The test schema uses a + * numeric primary key. To ensure that the reads/updates are distributed across a large query space, + * we insert 10^5 records. Utility at {@link BenchmarkingUtilityScripts} can be used for loading + * data. 3. For queries, we make sure that the query is sampled randomly across a large query space. + * This ensure we don't cause hot-spots. 4. For avoid cold start issues, we execute 1 query/update + * and ignore its latency from the final reported metrics. + */ +@BenchmarkMode(Mode.AverageTime) +@Fork(value = 1, warmups = 0) +@Measurement(batchSize = 1, iterations = 1, timeUnit = TimeUnit.MILLISECONDS) +@OutputTimeUnit(TimeUnit.SECONDS) +@Warmup(iterations = 0) +public class MultiplexedSessionsBenchmark extends AbstractLatencyBenchmark { + + @State(Scope.Benchmark) + public static class BenchmarkState { + + // TODO(developer): Add your values here for PROJECT_ID, INSTANCE_ID, DATABASE_ID + private static final String INSTANCE_ID = ""; + private static final String DATABASE_ID = ""; + private static final String SERVER_URL = "https://staging-wrenchworks.sandbox.googleapis.com"; + private Spanner spanner; + private DatabaseClientImpl client; + + @Param({"100"}) + int minSessions; + + @Param({"400"}) + int maxSessions; + + @Setup(Level.Iteration) + public void setup() throws Exception { + SpannerOptions.enableOpenTelemetryMetrics(); + SpannerOptions.enableOpenTelemetryTraces(); + SpannerOptions options = + SpannerOptions.newBuilder() + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setMinSessions(minSessions) + .setMaxSessions(maxSessions) + .setWaitForMinSessions(org.threeten.bp.Duration.ofSeconds(20)) + .setUseMultiplexedSession(true) + .build()) + .setHost(SERVER_URL) + .setNumChannels(NUM_GRPC_CHANNELS) + .build(); + spanner = options.getService(); + client = + (DatabaseClientImpl) + spanner.getDatabaseClient( + DatabaseId.of(options.getProjectId(), INSTANCE_ID, DATABASE_ID)); + } + + @TearDown(Level.Iteration) + public void teardown() throws Exception { + spanner.close(); + } + } + + /** Measures the time needed to execute a burst of queries. */ + @Benchmark + public void burstQueries(final BenchmarkState server) throws Exception { + final DatabaseClientImpl client = server.client; + SessionPool pool = client.pool; + assertThat(pool.totalSessions()) + .isEqualTo(server.spanner.getOptions().getSessionPoolOptions().getMinSessions()); + + ListeningScheduledExecutorService service = + MoreExecutors.listeningDecorator(Executors.newScheduledThreadPool(PARALLEL_THREADS)); + List>> results = new ArrayList<>(PARALLEL_THREADS); + for (int i = 0; i < PARALLEL_THREADS; i++) { + results.add( + service.submit(() -> runBenchmarksForSingleUseQueries(server, TOTAL_READS_PER_RUN))); + } + collectResultsAndPrint(service, results, TOTAL_READS_PER_RUN); + } + + private List runBenchmarksForSingleUseQueries( + final BenchmarkState server, int numberOfOperations) { + List results = new ArrayList<>(numberOfOperations); + // Execute one query to make sure everything has been warmed up. + executeWarmup(server); + + for (int i = 0; i < numberOfOperations; i++) { + results.add(executeSingleUseQuery(server)); + } + return results; + } + + private void executeWarmup(final BenchmarkState server) { + for (int i = 0; i < WARMUP_REQUEST_COUNT; i++) { + executeSingleUseQuery(server); + } + } + + private java.time.Duration executeSingleUseQuery(final BenchmarkState server) { + Stopwatch watch = Stopwatch.createStarted(); + + try (ResultSet rs = server.client.singleUse().executeQuery(getRandomisedReadStatement())) { + while (rs.next()) { + assertEquals(1, rs.getColumnCount()); + assertNotNull(rs.getValue(0)); + } + } catch (Throwable t) { + // ignore exception + System.out.println("Got exception = " + t); + } + return watch.elapsed(); + } + + static Statement getRandomisedReadStatement() { + int randomKey = ThreadLocalRandom.current().nextInt(TOTAL_RECORDS); + return Statement.newBuilder(SELECT_QUERY).bind(ID_COLUMN_NAME).to(randomKey).build(); + } + + void collectResultsAndPrint( + ListeningScheduledExecutorService service, + List>> results, + int numOperationsPerThread) + throws Exception { + final List collectResults = + collectResults( + service, results, numOperationsPerThread * PARALLEL_THREADS, Duration.ofMinutes(60)); + printResults(collectResults); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java index 7152486c458..8a4859fa132 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java @@ -103,6 +103,10 @@ public class OpenTelemetrySpanTest { private static final Statement INVALID_UPDATE_STATEMENT = Statement.of("UPDATE NON_EXISTENT_TABLE SET BAR=1 WHERE BAZ=2"); + private List expectedCreateMultiplexedSessionsRequestEvents = + ImmutableList.of("Request for 1 multiplexed session returned 1 session"); + + private int expectedCreateMultiplexedSessionsRequestEventsCount = 1; private List expectedBatchCreateSessionsRequestEvents = ImmutableList.of("Requesting 2 sessions", "Request for 2 sessions returned 2 sessions"); @@ -117,21 +121,6 @@ public class OpenTelemetrySpanTest { private int expectedExecuteStreamingQueryEventsCount = 1; - private List expectedReadOnlyTransactionSingleUseEvents = - ImmutableList.of("Acquiring session", "Acquired session", "Using Session"); - - private int expectedReadOnlyTransactionSingleUseEventsCount = 3; - - private List expectedReadOnlyTransactionMultiUseEvents = - ImmutableList.of( - "Acquiring session", - "Acquired session", - "Using Session", - "Creating Transaction", - "Transaction Creation Done"); - - private int expectedReadOnlyTransactionMultiUseEventsCount = 5; - private List expectedReadWriteTransactionErrorEvents = ImmutableList.of( "Acquiring session", @@ -167,33 +156,6 @@ public class OpenTelemetrySpanTest { "Transaction Attempt Succeeded"); private int expectedReadWriteTransactionErrorWithBeginTransactionEventsCount = 11; - private List expectedReadOnlyTransactionSpans = - ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.ExecuteStreamingQuery", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadOnlyTransaction"); - - private List expectedReadWriteTransactionWithCommitSpans = - ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.Commit", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadWriteTransaction"); - - private List expectedReadWriteTransactionSpans = - ImmutableList.of( - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadWriteTransaction"); - - private List expectedReadWriteTransactionWithCommitAndBeginTransactionSpans = - ImmutableList.of( - "CloudSpannerOperation.BeginTransaction", - "CloudSpannerOperation.BatchCreateSessionsRequest", - "CloudSpannerOperation.Commit", - "CloudSpannerOperation.BatchCreateSessions", - "CloudSpanner.ReadWriteTransaction"); @BeforeClass public static void setupOpenTelemetry() { @@ -287,6 +249,25 @@ public void tearDown() { @Test public void singleUse() { + List expectedReadOnlyTransactionSingleUseEvents = + isMultiplexedSessionsEnabled() + ? ImmutableList.of("Using Session") + : ImmutableList.of("Acquiring session", "Acquired session", "Using Session"); + List expectedReadOnlyTransactionSpans = + isMultiplexedSessionsEnabled() + ? ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadOnlyTransaction") + : ImmutableList.of( + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadOnlyTransaction"); + int expectedReadOnlyTransactionSingleUseEventsCount = isMultiplexedSessionsEnabled() ? 1 : 3; + try (ResultSet rs = client.singleUse().executeQuery(SELECT1)) { while (rs.next()) { // Just consume the result set. @@ -303,6 +284,12 @@ public void singleUse() { spanItem -> { actualSpanItems.add(spanItem.getName()); switch (spanItem.getName()) { + case "CloudSpannerOperation.CreateMultiplexedSession": + verifyRequestEvents( + spanItem, + expectedCreateMultiplexedSessionsRequestEvents, + expectedCreateMultiplexedSessionsRequestEventsCount); + break; case "CloudSpannerOperation.BatchCreateSessionsRequest": verifyRequestEvents( spanItem, @@ -337,6 +324,31 @@ public void singleUse() { @Test public void multiUse() { + List expectedReadOnlyTransactionSpans = + isMultiplexedSessionsEnabled() + ? ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadOnlyTransaction") + : ImmutableList.of( + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.ExecuteStreamingQuery", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadOnlyTransaction"); + List expectedReadOnlyTransactionMultiUseEvents = + isMultiplexedSessionsEnabled() + ? ImmutableList.of("Using Session", "Creating Transaction", "Transaction Creation Done") + : ImmutableList.of( + "Acquiring session", + "Acquired session", + "Using Session", + "Creating Transaction", + "Transaction Creation Done"); + + int expectedReadOnlyTransactionMultiUseEventsCount = isMultiplexedSessionsEnabled() ? 3 : 5; + try (ReadOnlyTransaction tx = client.readOnlyTransaction()) { try (ResultSet rs = tx.executeQuery(SELECT1)) { while (rs.next()) { @@ -352,6 +364,12 @@ public void multiUse() { spanItem -> { actualSpanItems.add(spanItem.getName()); switch (spanItem.getName()) { + case "CloudSpannerOperation.CreateMultiplexedSession": + verifyRequestEvents( + spanItem, + expectedCreateMultiplexedSessionsRequestEvents, + expectedCreateMultiplexedSessionsRequestEventsCount); + break; case "CloudSpannerOperation.BatchCreateSessionsRequest": verifyRequestEvents( spanItem, @@ -386,6 +404,19 @@ public void multiUse() { @Test public void transactionRunner() { + List expectedReadWriteTransactionWithCommitSpans = + isMultiplexedSessionsEnabled() + ? ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.Commit", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction") + : ImmutableList.of( + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.Commit", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction"); TransactionRunner runner = client.readWriteTransaction(); runner.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT)); List actualSpanItems = new ArrayList<>(); @@ -395,6 +426,12 @@ public void transactionRunner() { spanItem -> { actualSpanItems.add(spanItem.getName()); switch (spanItem.getName()) { + case "CloudSpannerOperation.CreateMultiplexedSession": + verifyRequestEvents( + spanItem, + expectedCreateMultiplexedSessionsRequestEvents, + expectedCreateMultiplexedSessionsRequestEventsCount); + break; case "CloudSpannerOperation.BatchCreateSessionsRequest": verifyRequestEvents( spanItem, @@ -426,6 +463,17 @@ public void transactionRunner() { @Test public void transactionRunnerWithError() { + List expectedReadWriteTransactionSpans = + isMultiplexedSessionsEnabled() + ? ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction") + : ImmutableList.of( + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction"); TransactionRunner runner = client.readWriteTransaction(); SpannerException e = assertThrows( @@ -440,6 +488,12 @@ public void transactionRunnerWithError() { spanItem -> { actualSpanItems.add(spanItem.getName()); switch (spanItem.getName()) { + case "CloudSpannerOperation.CreateMultiplexedSession": + verifyRequestEvents( + spanItem, + expectedCreateMultiplexedSessionsRequestEvents, + expectedCreateMultiplexedSessionsRequestEventsCount); + break; case "CloudSpannerOperation.BatchCreateSessionsRequest": verifyRequestEvents( spanItem, @@ -468,6 +522,21 @@ public void transactionRunnerWithError() { @Test public void transactionRunnerWithFailedAndBeginTransaction() { + List expectedReadWriteTransactionWithCommitAndBeginTransactionSpans = + isMultiplexedSessionsEnabled() + ? ImmutableList.of( + "CloudSpannerOperation.CreateMultiplexedSession", + "CloudSpannerOperation.BeginTransaction", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.Commit", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction") + : ImmutableList.of( + "CloudSpannerOperation.BeginTransaction", + "CloudSpannerOperation.BatchCreateSessionsRequest", + "CloudSpannerOperation.Commit", + "CloudSpannerOperation.BatchCreateSessions", + "CloudSpanner.ReadWriteTransaction"); Long updateCount = client .readWriteTransaction() @@ -492,6 +561,12 @@ public void transactionRunnerWithFailedAndBeginTransaction() { spanItem -> { actualSpanItems.add(spanItem.getName()); switch (spanItem.getName()) { + case "CloudSpannerOperation.CreateMultiplexedSession": + verifyRequestEvents( + spanItem, + expectedCreateMultiplexedSessionsRequestEvents, + expectedCreateMultiplexedSessionsRequestEventsCount); + break; case "CloudSpannerOperation.BatchCreateSessionsRequest": verifyRequestEvents( spanItem, @@ -536,4 +611,11 @@ private static void verifySpans(List actualSpanItems, List expec expectedSpansItems.stream().sorted().collect(Collectors.toList()), actualSpanItems.stream().distinct().sorted().collect(Collectors.toList())); } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java index 6801c82b66c..13dd8500b76 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ReadAsyncTest.java @@ -185,6 +185,8 @@ public void pointReadNotFound() throws Exception { @Test public void invalidDatabase() throws Exception { + mockSpanner.setCreateSessionExecutionTime( + SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); mockSpanner.setBatchCreateSessionsExecutionTime( SimulatedExecutionTime.stickyDatabaseNotFoundException("invalid-database")); DatabaseClient invalidClient = @@ -258,14 +260,23 @@ public void closeTransactionBeforeEndOfAsyncQuery() throws Exception { // Wait until at least one row has been fetched. At that moment there should be one session // checked out. dataReceived.await(); - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); + + if (isMultiplexedSessionsEnabled()) { + assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); + } else { + assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); + } } // The read-only transaction is now closed, but the ready callback will continue to receive // data. As it tries to put the data into a synchronous queue and the underlying buffer can also // only hold 1 row, the async result set has not yet finished. The read-only transaction will // release the session back into the pool when all async statements have finished. The number of // sessions in use is therefore still 1. - assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); + if (isMultiplexedSessionsEnabled()) { + assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(0); + } else { + assertThat(clientImpl.pool.getNumberOfSessionsInUse()).isEqualTo(1); + } List resultList = new ArrayList<>(); do { results.drainTo(resultList); @@ -439,4 +450,11 @@ public void cancel() throws Exception { assertThat(e.getErrorCode()).isEqualTo(ErrorCode.CANCELLED); assertThat(values).containsExactly("v1"); } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java index d153696ab45..899bec4c622 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResumableStreamIteratorTest.java @@ -26,6 +26,7 @@ import com.google.api.client.util.BackOff; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.common.collect.AbstractIterator; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.protobuf.ByteString; import com.google.protobuf.Duration; @@ -52,11 +53,13 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; import org.mockito.Mockito; /** Unit tests for {@link ResumableStreamIterator}. */ -@RunWith(JUnit4.class) +@RunWith(Parameterized.class) public class ResumableStreamIteratorTest { interface Starter { AbstractResultSet.CloseableIterator startStream( @@ -69,6 +72,14 @@ interface ResultSetStream { void close(); } + @Parameter(0) + public ErrorCode errorCodeParameter; + + @Parameters(name = "errorCodeParameter = {0}") + public static List data() { + return ImmutableList.of(ErrorCode.UNAVAILABLE, ErrorCode.RESOURCE_EXHAUSTED); + } + private static StatusRuntimeException statusWithRetryInfo(ErrorCode code) { Metadata.Key key = ProtoUtils.keyForProto(RetryInfo.getDefaultInstance()); Metadata trailers = new Metadata(); @@ -223,7 +234,7 @@ public void restart() { Mockito.when(s1.next()) .thenReturn(resultSet(ByteString.copyFromUtf8("r1"), "a")) .thenReturn(resultSet(ByteString.copyFromUtf8("r2"), "b")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r2"))) @@ -244,7 +255,7 @@ public void restartWithHoldBack() { .thenReturn(resultSet(ByteString.copyFromUtf8("r2"), "b")) .thenReturn(resultSet(null, "X")) .thenReturn(resultSet(null, "X")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r2"))) @@ -265,7 +276,7 @@ public void restartWithHoldBackMidStream() { .thenReturn(resultSet(null, "b")) .thenReturn(resultSet(null, "c")) .thenReturn(resultSet(ByteString.copyFromUtf8("r2"), "d")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r2"))) @@ -360,7 +371,7 @@ public void bufferLimitRestart() { Mockito.when(s1.next()) .thenReturn(resultSet(ByteString.copyFromUtf8("r1"), "a")) .thenReturn(resultSet(ByteString.copyFromUtf8("r2"), "b")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r2"))) @@ -380,7 +391,7 @@ public void bufferLimitRestartWithinLimitAtStartOfResults() { Mockito.when(starter.startStream(null)).thenReturn(new ResultSetIterator(s1)); Mockito.when(s1.next()) .thenReturn(resultSet(null, "XXXXXX")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(null)).thenReturn(new ResultSetIterator(s2)); @@ -400,7 +411,7 @@ public void bufferLimitRestartWithinLimitMidResults() { Mockito.when(s1.next()) .thenReturn(resultSet(ByteString.copyFromUtf8("r1"), "a")) .thenReturn(resultSet(null, "XXXXXX")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r1"))) @@ -422,11 +433,11 @@ public void bufferLimitMissingTokensUnsafeToRetry() { .thenReturn(resultSet(ByteString.copyFromUtf8("r1"), "a")) .thenReturn(resultSet(null, "b")) .thenReturn(resultSet(null, "c")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); assertThat(consumeAtMost(3, resumableStreamIterator)).containsExactly("a", "b", "c").inOrder(); SpannerException e = assertThrows(SpannerException.class, () -> resumableStreamIterator.next()); - assertThat(e.getErrorCode()).isEqualTo(ErrorCode.UNAVAILABLE); + assertThat(e.getErrorCode()).isEqualTo(errorCodeParameter); } @Test @@ -439,7 +450,7 @@ public void bufferLimitMissingTokensSafeToRetry() { .thenReturn(resultSet(ByteString.copyFromUtf8("r1"), "a")) .thenReturn(resultSet(null, "b")) .thenReturn(resultSet(ByteString.copyFromUtf8("r3"), "c")) - .thenThrow(new RetryableException(ErrorCode.UNAVAILABLE, "failed by test")); + .thenThrow(new RetryableException(errorCodeParameter, "failed by test")); ResultSetStream s2 = Mockito.mock(ResultSetStream.class); Mockito.when(starter.startStream(ByteString.copyFromUtf8("r3"))) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java index 85b91ed3981..42a62be33aa 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/RetryOnInvalidatedSessionTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; @@ -217,11 +218,12 @@ public void setUp() throws InterruptedException { } // This prevents repeated retries for a large number of sessions in the pool. builder.setMinSessions(1); + SessionPoolOptions sessionPoolOptions = builder.build(); spanner = SpannerOptions.newBuilder() .setProjectId("[PROJECT]") .setChannelProvider(channelProvider) - .setSessionPoolOption(builder.build()) + .setSessionPoolOption(sessionPoolOptions) .setCredentials(NoCredentials.getInstance()) .build() .getService(); @@ -259,6 +261,9 @@ private T assertThrowsSessionNotFoundIfShouldFail(Supplier supplier) { @Test public void singleUseSelect() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); // This call will receive an invalidated session that will be replaced on the first call to // rs.next(). try (ReadContext context = client.singleUse()) { @@ -270,6 +275,9 @@ public void singleUseSelect() throws InterruptedException { @Test public void singleUseSelectAsync() throws Exception { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); ApiFuture> list; try (AsyncResultSet rs = client.singleUse().executeQueryAsync(SELECT1AND2)) { list = rs.toListAsync(TO_LONG, executor); @@ -279,6 +287,9 @@ public void singleUseSelectAsync() throws Exception { @Test public void singleUseRead() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUse()) { try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -288,6 +299,9 @@ public void singleUseRead() throws InterruptedException { @Test public void singleUseReadUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUse()) { try (ResultSet rs = context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { @@ -298,6 +312,9 @@ public void singleUseReadUsingIndex() throws InterruptedException { @Test public void singleUseReadRow() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUse()) { assertThrowsSessionNotFoundIfShouldFail( () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); @@ -306,6 +323,9 @@ public void singleUseReadRow() throws InterruptedException { @Test public void singleUseReadRowUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUse()) { assertThrowsSessionNotFoundIfShouldFail( () -> @@ -315,6 +335,9 @@ public void singleUseReadRowUsingIndex() throws InterruptedException { @Test public void singleUseReadOnlyTransactionSelect() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUseReadOnlyTransaction()) { try (ResultSet rs = context.executeQuery(SELECT1AND2)) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -324,6 +347,9 @@ public void singleUseReadOnlyTransactionSelect() throws InterruptedException { @Test public void singleUseReadOnlyTransactionRead() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUseReadOnlyTransaction()) { try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -333,6 +359,9 @@ public void singleUseReadOnlyTransactionRead() throws InterruptedException { @Test public void singlUseReadOnlyTransactionReadUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUseReadOnlyTransaction()) { try (ResultSet rs = context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { @@ -343,6 +372,9 @@ public void singlUseReadOnlyTransactionReadUsingIndex() throws InterruptedExcept @Test public void singleUseReadOnlyTransactionReadRow() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUseReadOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); @@ -351,6 +383,9 @@ public void singleUseReadOnlyTransactionReadRow() throws InterruptedException { @Test public void singleUseReadOnlyTransactionReadRowUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.singleUseReadOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> @@ -360,6 +395,9 @@ public void singleUseReadOnlyTransactionReadRowUsingIndex() throws InterruptedEx @Test public void readOnlyTransactionSelect() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.executeQuery(SELECT1AND2)) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -369,6 +407,9 @@ public void readOnlyTransactionSelect() throws InterruptedException { @Test public void readOnlyTransactionRead() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -378,6 +419,9 @@ public void readOnlyTransactionRead() throws InterruptedException { @Test public void readOnlyTransactionReadUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { @@ -388,6 +432,9 @@ public void readOnlyTransactionReadUsingIndex() throws InterruptedException { @Test public void readOnlyTransactionReadRow() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); @@ -396,6 +443,9 @@ public void readOnlyTransactionReadRow() throws InterruptedException { @Test public void readOnlyTransactionReadRowUsingIndex() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> @@ -405,6 +455,9 @@ public void readOnlyTransactionReadRowUsingIndex() throws InterruptedException { @Test public void readOnlyTransactionSelectNonRecoverable() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.executeQuery(SELECT1AND2)) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -419,6 +472,9 @@ public void readOnlyTransactionSelectNonRecoverable() throws InterruptedExceptio @Test public void readOnlyTransactionReadNonRecoverable() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.read("FOO", KeySet.all(), Collections.singletonList("BAR"))) { assertThrowsSessionNotFoundIfShouldFail(() -> rs.next()); @@ -432,6 +488,9 @@ public void readOnlyTransactionReadNonRecoverable() throws InterruptedException @Test public void readOnlyTransactionReadUsingIndexNonRecoverable() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { try (ResultSet rs = context.readUsingIndex("FOO", "IDX", KeySet.all(), Collections.singletonList("BAR"))) { @@ -447,6 +506,9 @@ public void readOnlyTransactionReadUsingIndexNonRecoverable() throws Interrupted @Test public void readOnlyTransactionReadRowNonRecoverable() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> context.readRow("FOO", Key.of(), Collections.singletonList("BAR"))); @@ -459,6 +521,9 @@ public void readOnlyTransactionReadRowNonRecoverable() throws InterruptedExcepti @Test public void readOnlyTransactionReadRowUsingIndexNonRecoverable() throws InterruptedException { + assumeFalse( + "Multiplexed session do not throw a SessionNotFound errors. ", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); try (ReadContext context = client.readOnlyTransaction()) { assertThrowsSessionNotFoundIfShouldFail( () -> diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java index 3094282f07b..c0ae8de97c9 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionClientTests.java @@ -125,6 +125,9 @@ public ScheduledExecutorService get() { doNothing().when(span).end(); doNothing().when(span).addAnnotation("Starting Commit"); when(spanner.getRpc()).thenReturn(rpc); + SessionPoolOptions sessionPoolOptions = mock(SessionPoolOptions.class); + when(sessionPoolOptions.getPoolMaintainerClock()).thenReturn(Clock.INSTANCE); + when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java index 8236e509008..72befe8a2b4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java @@ -98,7 +98,9 @@ public void setUp() { GrpcTransportOptions transportOptions = mock(GrpcTransportOptions.class); when(transportOptions.getExecutorFactory()).thenReturn(mock(ExecutorFactory.class)); when(spannerOptions.getTransportOptions()).thenReturn(transportOptions); - when(spannerOptions.getSessionPoolOptions()).thenReturn(mock(SessionPoolOptions.class)); + SessionPoolOptions sessionPoolOptions = mock(SessionPoolOptions.class); + when(sessionPoolOptions.getPoolMaintainerClock()).thenReturn(Clock.INSTANCE); + when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); when(spannerOptions.getOpenTelemetry()).thenReturn(OpenTelemetry.noop()); @SuppressWarnings("resource") SpannerImpl spanner = new SpannerImpl(rpc, spannerOptions); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java index 91352cc1a14..4672f03aeff 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolLeakTest.java @@ -21,6 +21,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeFalse; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.cloud.NoCredentials; @@ -106,19 +107,23 @@ public void tearDown() { @Test public void testIgnoreLeakedSession() { for (boolean trackStackTraceofSessionCheckout : new boolean[] {true, false}) { - SpannerOptions.Builder builder = - SpannerOptions.newBuilder() - .setProjectId("[PROJECT]") - .setChannelProvider(channelProvider) - .setCredentials(NoCredentials.getInstance()); - builder.setSessionPoolOption( + SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder() .setMinSessions(0) .setMaxSessions(2) .setIncStep(1) .setFailOnSessionLeak() .setTrackStackTraceOfSessionCheckout(trackStackTraceofSessionCheckout) - .build()); + .build(); + assumeFalse( + "Session Leaks do not occur with Multiplexed Sessions", + sessionPoolOptions.getUseMultiplexedSession()); + SpannerOptions.Builder builder = + SpannerOptions.newBuilder() + .setProjectId("[PROJECT]") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()); + builder.setSessionPoolOption(sessionPoolOptions); Spanner spanner = builder.build().getService(); DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("[PROJECT]", "[INSTANCE]", "[DATABASE]")); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java new file mode 100644 index 00000000000..c74806161f6 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerMockServerTest.java @@ -0,0 +1,181 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.common.base.Stopwatch; +import com.google.protobuf.ListValue; +import com.google.protobuf.Value; +import com.google.spanner.v1.BatchCreateSessionsRequest; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.StructType; +import com.google.spanner.v1.StructType.Field; +import com.google.spanner.v1.Type; +import com.google.spanner.v1.TypeCode; +import java.util.concurrent.TimeUnit; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; + +@RunWith(JUnit4.class) +public class SessionPoolMaintainerMockServerTest extends AbstractMockServerTest { + private final FakeClock clock = new FakeClock(); + + @BeforeClass + public static void setupResults() { + mockSpanner.putStatementResult( + StatementResult.query( + Statement.of("SELECT 1"), + com.google.spanner.v1.ResultSet.newBuilder() + .setMetadata( + ResultSetMetadata.newBuilder() + .setRowType( + StructType.newBuilder() + .addFields( + Field.newBuilder() + .setName("C") + .setType(Type.newBuilder().setCode(TypeCode.INT64).build()) + .build()) + .build()) + .build()) + .addRows( + ListValue.newBuilder() + .addValues(Value.newBuilder().setStringValue("1").build()) + .build()) + .build())); + } + + @Before + public void createSpannerInstance() { + clock.currentTimeMillis.set(System.currentTimeMillis()); + spanner = + SpannerOptions.newBuilder() + .setProjectId("p") + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setPoolMaintainerClock(clock) + .setWaitForMinSessions(Duration.ofSeconds(10L)) + .setFailOnSessionLeak() + .build()) + .build() + .getService(); + } + + @Test + public void testMaintain() { + int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + assertEquals(minSessions, mockSpanner.getSessions().size()); + assertEquals(0, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + clock.currentTimeMillis.addAndGet(Duration.ofMinutes(35).toMillis()); + client.pool.poolMaintainer.maintainPool(); + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + client.pool.poolMaintainer.maintainPool(); + assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + clock.currentTimeMillis.addAndGet(Duration.ofMinutes(21).toMillis()); + + // Most sessions are considered idle and are removed. Freeze the mock Spanner server to prevent + // the replenish action to fill the pool again before we check the number of sessions in the + // pool. + mockSpanner.freeze(); + client.pool.poolMaintainer.maintainPool(); + assertEquals(2, client.pool.totalSessions()); + mockSpanner.unfreeze(); + + // The pool should be replenished. + client.pool.poolMaintainer.maintainPool(); + assertEquals(minSessions, client.pool.getTotalSessionsPlusNumSessionsBeingCreated()); + Stopwatch watch = Stopwatch.createStarted(); + //noinspection StatementWithEmptyBody + while (client.pool.totalSessions() < minSessions + && watch.elapsed(TimeUnit.MILLISECONDS) + < spanner.getOptions().getSessionPoolOptions().getWaitForMinSessions().toMillis()) { + // wait for the pool to be replenished. + } + assertEquals(minSessions, client.pool.totalSessions()); + } + + @Test + public void testSessionNotFoundIsRetried() { + assumeFalse( + "Session not found errors are not relevant for multiplexed sessions", + spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()); + + int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + assertEquals(minSessions, mockSpanner.getSessions().size()); + + // Remove all sessions from the backend. + mockSpanner.getSessions().clear(); + + // Sessions have been removed from the backend, but this will still succeed, as Session not + // found errors are retried by the client. + try (ResultSet resultSet = client.singleUse().executeQuery(Statement.of("SELECT 1"))) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + + int numRequests = mockSpanner.countRequestsOfType(ExecuteSqlRequest.class); + assertTrue( + String.format("Number of requests should be larger than 1, but was %d", numRequests), + numRequests > 1); + } + + @Test + public void testMaintainerReplenishesPoolIfAllAreInvalid() { + int minSessions = spanner.getOptions().getSessionPoolOptions().getMinSessions(); + DatabaseClientImpl client = + (DatabaseClientImpl) spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + assertEquals(minSessions, mockSpanner.getSessions().size()); + + // Remove all sessions from the backend. + mockSpanner.getSessions().clear(); + // Advance the clock of the maintainer to mark all sessions are eligible for maintenance. + clock.currentTimeMillis.addAndGet(Duration.ofMinutes(35).toMillis()); + // Run the maintainer. This will ping one session, which again will cause it to be replaced. + client.pool.poolMaintainer.maintainPool(); + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + + // The session will be replaced using a single BatchCreateSessions call. + Stopwatch watch = Stopwatch.createStarted(); + //noinspection StatementWithEmptyBody + while (client.pool.totalSessions() < minSessions + && watch.elapsed(TimeUnit.MILLISECONDS) + < spanner.getOptions().getSessionPoolOptions().getWaitForMinSessions().toMillis()) { + // wait for the pool to be replenished. + } + assertEquals(minSessions, client.pool.totalSessions()); + assertEquals( + spanner.getOptions().getNumChannels() + 1, + mockSpanner.countRequestsOfType(BatchCreateSessionsRequest.class)); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java index b489511b73b..9e55851ef4d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolMaintainerTest.java @@ -76,7 +76,9 @@ public void setUp() { .setMaxSessions(5) .setIncStep(1) .setKeepAliveIntervalMinutes(2) + .setPoolMaintainerClock(clock) .build(); + when(spannerOptions.getSessionPoolOptions()).thenReturn(options); idledSessions.clear(); pingedSessions.clear(); } @@ -92,7 +94,7 @@ private void setupMockSessionCreation() { for (int i = 0; i < sessionCount; i++) { ReadContext mockContext = mock(ReadContext.class); consumer.onSessionReady( - setupMockSession(buildMockSession(mockContext), mockContext)); + setupMockSession(buildMockSession(client, mockContext), mockContext)); } }); return null; 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 1f4d591488b..76123d0ac68 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 @@ -22,6 +22,7 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.SessionPoolOptions.InactiveTransactionRemovalOptions; import java.util.ArrayList; @@ -249,6 +250,8 @@ public void testRandomizePositionQPSThreshold() { @Test public void testUseMultiplexedSession() { + // skip these tests since this configuration can have dual behaviour in different test-runners + assumeFalse(SessionPoolOptions.newBuilder().build().getUseMultiplexedSession()); assertEquals(false, SessionPoolOptions.newBuilder().build().getUseMultiplexedSession()); assertEquals( true, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java index 02502399e10..6d2d1f19efe 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolStressTest.java @@ -68,7 +68,6 @@ public class SessionPoolStressTest extends BaseSessionPoolTest { DatabaseId db = DatabaseId.of("projects/p/instances/i/databases/unused"); SessionPool pool; - SessionPoolOptions options; ExecutorService createExecutor = Executors.newSingleThreadExecutor(); final Object lock = new Object(); Random random = new Random(); @@ -109,7 +108,7 @@ private void setupSpanner(DatabaseId db) { for (int s = 0; s < sessionCount; s++) { SessionImpl session; synchronized (lock) { - session = getMockedSession(context); + session = getMockedSession(mockSpanner, context); setupSession(session, context); sessions.put(session.getName(), false); if (sessions.size() > maxAliveSessions) { @@ -128,15 +127,15 @@ private void setupSpanner(DatabaseId db) { Mockito.anyInt(), Mockito.anyBoolean(), Mockito.any(SessionConsumer.class)); } - SessionImpl getMockedSession(ReadContext context) { - SpannerImpl spanner = mock(SpannerImpl.class); + SessionImpl getMockedSession(SpannerImpl spanner, ReadContext context) { Map options = new HashMap<>(); options.put(Option.CHANNEL_HINT, channelHint.getAndIncrement()); final SessionImpl session = new SessionImpl( spanner, - "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, - options) { + new SessionReference( + "projects/dummy/instances/dummy/databases/dummy/sessions/session" + sessionIndex, + options)) { @Override public ReadContext singleUse(TimestampBound bound) { // The below stubs are added so that we can mock keep-alive. @@ -208,6 +207,7 @@ public void stressTest() throws Exception { int maxSessions = concurrentThreads / 2; SessionPoolOptions.Builder builder = SessionPoolOptions.newBuilder() + .setPoolMaintainerClock(clock) .setMinSessions(minSessions) .setMaxSessions(maxSessions) .setInactiveTransactionRemovalOptions( @@ -219,9 +219,11 @@ public void stressTest() throws Exception { } else { builder.setFailIfPoolExhausted(); } + SessionPoolOptions sessionPoolOptions = builder.build(); + when(spannerOptions.getSessionPoolOptions()).thenReturn(sessionPoolOptions); pool = SessionPool.createPool( - builder.build(), + sessionPoolOptions, new TestExecutorFactory(), mockSpanner.getSessionClient(db), clock, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java index a391a66ec83..75580c25124 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionPoolTest.java @@ -17,6 +17,7 @@ package com.google.cloud.spanner; import static com.google.cloud.spanner.MetricRegistryConstants.GET_SESSION_TIMEOUTS; +import static com.google.cloud.spanner.MetricRegistryConstants.IS_MULTIPLEXED_KEY; import static com.google.cloud.spanner.MetricRegistryConstants.MAX_ALLOWED_SESSIONS; import static com.google.cloud.spanner.MetricRegistryConstants.MAX_IN_USE_SESSIONS; import static com.google.cloud.spanner.MetricRegistryConstants.METRIC_PREFIX; @@ -31,6 +32,7 @@ import static com.google.cloud.spanner.MetricRegistryConstants.NUM_WRITE_SESSIONS; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_DEFAULT_LABEL_VALUES; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS; +import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS; import static com.google.cloud.spanner.MetricRegistryConstants.SPANNER_LABEL_KEYS_WITH_TYPE; import static com.google.cloud.spanner.SpannerOptionsTest.runWithSystemProperty; import static com.google.common.truth.Truth.assertThat; @@ -62,6 +64,7 @@ import com.google.cloud.spanner.MetricRegistryTestUtils.PointWithFunction; import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode; import com.google.cloud.spanner.SessionClient.SessionConsumer; +import com.google.cloud.spanner.SessionPool.MultiplexedSessionInitializationConsumer; import com.google.cloud.spanner.SessionPool.PooledSession; import com.google.cloud.spanner.SessionPool.PooledSessionFuture; import com.google.cloud.spanner.SessionPool.Position; @@ -139,9 +142,6 @@ public class SessionPoolTest extends BaseSessionPoolTest { private final ExecutorService executor = Executors.newSingleThreadExecutor(); @Parameter public int minSessions; - @Parameter(1) - public boolean useMultiplexed; - @Mock SpannerImpl client; @Mock SessionClient sessionClient; @Mock SpannerOptions spannerOptions; @@ -154,14 +154,9 @@ public class SessionPoolTest extends BaseSessionPoolTest { private final TraceWrapper tracer = new TraceWrapper(Tracing.getTracer(), OpenTelemetry.noop().getTracer("")); - @Parameters(name = "min sessions = {0}, use multiplexed = {1}") + @Parameters(name = "min sessions = {0}") public static Collection data() { - List params = new ArrayList<>(); - params.add(new Object[] {0, false}); - params.add(new Object[] {1, false}); - params.add(new Object[] {1, true}); - - return params; + return Arrays.asList(new Object[][] {{0}, {1}}); } private SessionPool createPool() { @@ -249,7 +244,6 @@ public void setUp() { .setMaxSessions(2) .setIncStep(1) .setBlockIfPoolExhausted() - .setUseMultiplexedSession(useMultiplexed) .build(); } @@ -270,6 +264,15 @@ private void setupMockSessionCreation() { .when(sessionClient) .asyncBatchCreateSessions( Mockito.anyInt(), Mockito.anyBoolean(), any(SessionConsumer.class)); + doAnswer( + invocation -> + executor.submit( + () -> { + SessionConsumer consumer = invocation.getArgument(0, SessionConsumer.class); + consumer.onSessionReady(mockMultiplexedSession()); + })) + .when(sessionClient) + .asyncCreateMultiplexedSession(any(SessionConsumer.class)); } @Test @@ -730,16 +733,24 @@ public void failOnPoolExhaustion() { @Test public void idleSessionCleanup() throws Exception { ReadContext context = mock(ReadContext.class); + + FakeClock clock = new FakeClock(); + clock.currentTimeMillis.set(System.currentTimeMillis()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .build(); - SessionImpl session1 = buildMockSession(context); - SessionImpl session2 = buildMockSession(context); - SessionImpl session3 = buildMockSession(context); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(spannerOptions.getSessionPoolOptions()).thenReturn(options); + SessionImpl session1 = buildMockSession(spanner, context); + SessionImpl session2 = buildMockSession(spanner, context); + SessionImpl session3 = buildMockSession(spanner, context); final LinkedList sessions = new LinkedList<>(Arrays.asList(session1, session2, session3)); doAnswer( @@ -755,9 +766,6 @@ public void idleSessionCleanup() throws Exception { .when(sessionClient) .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); - mockKeepAlive(context); pool = createPool(clock); @@ -798,18 +806,18 @@ public void idleSessionCleanup() throws Exception { @Test public void longRunningTransactionsCleanup_whenActionSetToClose_verifyInactiveSessionsClosed() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .setCloseIfInactiveTransactions() // set option to close inactive transactions .build(); - - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); // Make sure pool has been initialized @@ -844,16 +852,17 @@ public void longRunningTransactionsCleanup_whenActionSetToClose_verifyInactiveSe @Test public void longRunningTransactionsCleanup_whenActionSetToWarn_verifyInactiveSessionsOpen() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) + .setPoolMaintainerClock(clock) .setWarnIfInactiveTransactions() // set option to warn (via logs) inactive transactions .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); // Make sure pool has been initialized @@ -892,17 +901,18 @@ public void longRunningTransactionsCleanup_whenActionSetToWarn_verifyInactiveSes public void longRunningTransactionsCleanup_whenUtilisationBelowThreshold_verifyInactiveSessionsOpen() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .setCloseIfInactiveTransactions() // set option to close inactive transactions .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); pool.getSession().close(); @@ -999,17 +1009,18 @@ public void longRunningTransactionsCleanup_whenActionSetToWarn_verifyInactiveSes @Test public void longRunningTransactionsCleanup_whenBelowDurationThreshold_verifyInactiveSessionsOpen() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .setCloseIfInactiveTransactions() // set option to close inactive transactions .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); // Make sure pool has been initialized @@ -1042,17 +1053,18 @@ public void longRunningTransactionsCleanup_whenBelowDurationThreshold_verifyInac @Test public void longRunningTransactionsCleanup_whenException_doNothing() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .setCloseIfInactiveTransactions() // set option to close inactive transactions .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); // Make sure pool has been initialized @@ -1086,17 +1098,18 @@ public void longRunningTransactionsCleanup_whenException_doNothing() throws Exce public void longRunningTransactionsCleanup_whenTaskRecurrenceBelowThreshold_verifyInactiveSessionsOpen() throws Exception { - setupForLongRunningTransactionsCleanup(); + Clock clock = mock(Clock.class); + when(clock.instant()).thenReturn(Instant.now()); options = SessionPoolOptions.newBuilder() .setMinSessions(1) .setMaxSessions(3) .setIncStep(1) .setMaxIdleSessions(0) + .setPoolMaintainerClock(clock) .setCloseIfInactiveTransactions() // set option to close inactive transactions .build(); - Clock clock = mock(Clock.class); - when(clock.instant()).thenReturn(Instant.now()); + setupForLongRunningTransactionsCleanup(options); pool = createPool(clock); // Make sure pool has been initialized @@ -1130,11 +1143,15 @@ public void longRunningTransactionsCleanup_whenException_doNothing() throws Exce pool.closeAsync(new SpannerImpl.ClosedException()).get(5L, TimeUnit.SECONDS); } - private void setupForLongRunningTransactionsCleanup() { + private void setupForLongRunningTransactionsCleanup(SessionPoolOptions sessionPoolOptions) { ReadContext context = mock(ReadContext.class); - SessionImpl session1 = buildMockSession(context); - SessionImpl session2 = buildMockSession(context); - SessionImpl session3 = buildMockSession(context); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions options = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(options); + when(options.getSessionPoolOptions()).thenReturn(sessionPoolOptions); + SessionImpl session1 = buildMockSession(spanner, context); + SessionImpl session2 = buildMockSession(spanner, context); + SessionImpl session3 = buildMockSession(spanner, context); final LinkedList sessions = new LinkedList<>(Arrays.asList(session1, session2, session3)); @@ -1157,10 +1174,21 @@ private void setupForLongRunningTransactionsCleanup() { @Test public void keepAlive() throws Exception { ReadContext context = mock(ReadContext.class); - options = SessionPoolOptions.newBuilder().setMinSessions(2).setMaxSessions(3).build(); - final SessionImpl mockSession1 = buildMockSession(context); - final SessionImpl mockSession2 = buildMockSession(context); - final SessionImpl mockSession3 = buildMockSession(context); + FakeClock clock = new FakeClock(); + clock.currentTimeMillis.set(System.currentTimeMillis()); + options = + SessionPoolOptions.newBuilder() + .setMinSessions(2) + .setMaxSessions(3) + .setPoolMaintainerClock(clock) + .build(); + SpannerImpl spanner = mock(SpannerImpl.class); + SpannerOptions spannerOptions = mock(SpannerOptions.class); + when(spanner.getOptions()).thenReturn(spannerOptions); + when(spannerOptions.getSessionPoolOptions()).thenReturn(options); + final SessionImpl mockSession1 = buildMockSession(spanner, context); + final SessionImpl mockSession2 = buildMockSession(spanner, context); + final SessionImpl mockSession3 = buildMockSession(spanner, context); final LinkedList sessions = new LinkedList<>(Arrays.asList(mockSession1, mockSession2, mockSession3)); @@ -1182,8 +1210,6 @@ public void keepAlive() throws Exception { }) .when(sessionClient) .asyncBatchCreateSessions(anyInt(), Mockito.anyBoolean(), any(SessionConsumer.class)); - FakeClock clock = new FakeClock(); - clock.currentTimeMillis.set(System.currentTimeMillis()); pool = createPool(clock); PooledSessionFuture session1 = pool.getSession(); PooledSessionFuture session2 = pool.getSession(); @@ -1769,19 +1795,70 @@ public void testOpenCensusSessionMetrics() throws Exception { assertThat(getSessionsTimeouts.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); assertThat(getSessionsTimeouts.get(0).values()).isEqualTo(labelValues); + List labelValuesWithRegularSessions = new ArrayList<>(labelValues); + labelValuesWithRegularSessions.add(LabelValue.create("false")); + List labelValuesWithMultiplexedSessions = new ArrayList<>(labelValues); + labelValuesWithMultiplexedSessions.add(LabelValue.create("true")); List numAcquiredSessions = record.getMetrics().get(METRIC_PREFIX + NUM_ACQUIRED_SESSIONS); - assertThat(numAcquiredSessions.size()).isEqualTo(1); - assertThat(numAcquiredSessions.get(0).value()).isEqualTo(2L); - assertThat(numAcquiredSessions.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); - assertThat(numAcquiredSessions.get(0).values()).isEqualTo(labelValues); + assertThat(numAcquiredSessions.size()).isEqualTo(2); + PointWithFunction regularSessionMetric = + numAcquiredSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("false"))) + .findFirst() + .get(); + PointWithFunction multiplexedSessionMetric = + numAcquiredSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("true"))) + .findFirst() + .get(); + // verify metrics for regular sessions + assertThat(regularSessionMetric.value()).isEqualTo(2L); + assertThat(regularSessionMetric.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); + assertThat(regularSessionMetric.values()).isEqualTo(labelValuesWithRegularSessions); + + // verify metrics for multiplexed sessions + assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); + assertThat(multiplexedSessionMetric.keys()) + .isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); + assertThat(multiplexedSessionMetric.values()).isEqualTo(labelValuesWithMultiplexedSessions); List numReleasedSessions = record.getMetrics().get(METRIC_PREFIX + NUM_RELEASED_SESSIONS); - assertThat(numReleasedSessions.size()).isEqualTo(1); - assertThat(numReleasedSessions.get(0).value()).isEqualTo(0); - assertThat(numReleasedSessions.get(0).keys()).isEqualTo(SPANNER_LABEL_KEYS); - assertThat(numReleasedSessions.get(0).values()).isEqualTo(labelValues); + assertThat(numReleasedSessions.size()).isEqualTo(2); + + regularSessionMetric = + numReleasedSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("false"))) + .findFirst() + .get(); + multiplexedSessionMetric = + numReleasedSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("true"))) + .findFirst() + .get(); + // verify metrics for regular sessions + assertThat(regularSessionMetric.value()).isEqualTo(0L); + assertThat(regularSessionMetric.keys()).isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); + assertThat(regularSessionMetric.values()).isEqualTo(labelValuesWithRegularSessions); + + // verify metrics for multiplexed sessions + assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); + assertThat(multiplexedSessionMetric.keys()) + .isEqualTo(SPANNER_LABEL_KEYS_WITH_MULTIPLEXED_SESSIONS); + assertThat(multiplexedSessionMetric.values()).isEqualTo(labelValuesWithMultiplexedSessions); List maxAllowedSessions = record.getMetrics().get(METRIC_PREFIX + MAX_ALLOWED_SESSIONS); @@ -1847,12 +1924,46 @@ public void testOpenCensusSessionMetrics() throws Exception { session1.close(); numAcquiredSessions = record.getMetrics().get(METRIC_PREFIX + NUM_ACQUIRED_SESSIONS); - assertThat(numAcquiredSessions.size()).isEqualTo(1); - assertThat(numAcquiredSessions.get(0).value()).isEqualTo(3L); + assertThat(numAcquiredSessions.size()).isEqualTo(2); + regularSessionMetric = + numAcquiredSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("false"))) + .findFirst() + .get(); + multiplexedSessionMetric = + numAcquiredSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("true"))) + .findFirst() + .get(); + assertThat(regularSessionMetric.value()).isEqualTo(3L); + assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); numReleasedSessions = record.getMetrics().get(METRIC_PREFIX + NUM_RELEASED_SESSIONS); - assertThat(numReleasedSessions.size()).isEqualTo(1); - assertThat(numReleasedSessions.get(0).value()).isEqualTo(3L); + assertThat(numReleasedSessions.size()).isEqualTo(2); + regularSessionMetric = + numReleasedSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("false"))) + .findFirst() + .get(); + multiplexedSessionMetric = + numReleasedSessions.stream() + .filter( + x -> + x.keys().contains(IS_MULTIPLEXED_KEY) + && x.values().contains(LabelValue.create("true"))) + .findFirst() + .get(); + assertThat(regularSessionMetric.value()).isEqualTo(3L); + assertThat(multiplexedSessionMetric.value()).isEqualTo(0L); maxInUseSessions = record.getMetrics().get(METRIC_PREFIX + MAX_IN_USE_SESSIONS); assertThat(maxInUseSessions.size()).isEqualTo(1); @@ -2080,6 +2191,12 @@ public void testGetDatabaseRole() throws Exception { @Test public void testWaitOnMinSessionsWhenSessionsAreCreatedBeforeTimeout() { + options = + SessionPoolOptions.newBuilder() + .setMinSessions(minSessions) + .setMaxSessions(minSessions + 1) + .setWaitForMinSessions(Duration.ofSeconds(5)) + .build(); doAnswer( invocation -> executor.submit( @@ -2090,13 +2207,17 @@ public void testWaitOnMinSessionsWhenSessionsAreCreatedBeforeTimeout() { })) .when(sessionClient) .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); + doAnswer( + invocation -> + executor.submit( + () -> { + MultiplexedSessionInitializationConsumer consumer = + invocation.getArgument(0, MultiplexedSessionInitializationConsumer.class); + consumer.onSessionReady(mockMultiplexedSession()); + })) + .when(sessionClient) + .asyncCreateMultiplexedSession(any(MultiplexedSessionInitializationConsumer.class)); - options = - SessionPoolOptions.newBuilder() - .setMinSessions(minSessions) - .setMaxSessions(minSessions + 1) - .setWaitForMinSessions(Duration.ofSeconds(5)) - .build(); pool = createPool(new FakeClock(), new FakeMetricRegistry(), SPANNER_DEFAULT_LABEL_VALUES); pool.maybeWaitOnMinSessions(); assertTrue(pool.getNumberOfSessionsInPool() >= minSessions); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanExceptionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanExceptionTest.java new file mode 100644 index 00000000000..2f16cd7c922 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanExceptionTest.java @@ -0,0 +1,88 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.NoCredentials; +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import io.grpc.ManagedChannelBuilder; +import java.util.ArrayList; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; + +@RunWith(JUnit4.class) +public class SpanExceptionTest extends AbstractMockServerTest { + + @Test + public void testReadOnlyTransaction() throws InterruptedException, ExecutionException { + try (Spanner spanner = + SpannerOptions.newBuilder() + .setProjectId("my-project") + .setHost(String.format("http://localhost:%d", getPort())) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .setCredentials(NoCredentials.getInstance()) + .setSessionPoolOption( + SessionPoolOptions.newBuilder() + .setMaxSessions(10) + .setAcquireSessionTimeout(Duration.ofMillis(10)) + // .setAcquireSessionTimeout(null) + .build()) + .build() + .getService()) { + DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d")); + + int numThreads = 25; + ExecutorService service = Executors.newFixedThreadPool(numThreads); + ArrayList> futures = new ArrayList<>(numThreads); + try (ReadOnlyTransaction readOnlyTransaction = client.readOnlyTransaction()) { + for (int i = 0; i < numThreads; i++) { + futures.add(service.submit(() -> executeRandom(readOnlyTransaction))); + } + service.shutdown(); + assertTrue(service.awaitTermination(60L, TimeUnit.SECONDS)); + // Verify that all threads finished without any unexpected errors. + for (Future future : futures) { + assertNull(future.get()); + } + } + } + } + + private Void executeRandom(ReadOnlyTransaction readOnlyTransaction) { + try (ResultSet resultSet = readOnlyTransaction.executeQuery(SELECT_RANDOM_STATEMENT)) { + while (resultSet.next()) { + // ignore + } + } catch (SpannerException spannerException) { + if (spannerException.getErrorCode() == ErrorCode.RESOURCE_EXHAUSTED) { + // This is the expected error code, so ignore. + return null; + } + throw spannerException; + } + return null; + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java index 11361b6cd24..9a13731b0f7 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpanTest.java @@ -201,7 +201,7 @@ public void setUp() throws Exception { .setSessionPoolOption( SessionPoolOptions.newBuilder() .setMinSessions(2) - .setWaitForMinSessions(Duration.ofSeconds(5)) + .setWaitForMinSessions(Duration.ofSeconds(10)) .build()); spanner = builder.build().getService(); @@ -301,11 +301,27 @@ public void singleUse() { "Acquired session", "Using Session", "Starting/Resuming stream"); - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); + List expectedAnnotationsForMultiplexedSession = + ImmutableList.of( + "Requesting 2 sessions", + "Request for 2 sessions returned 2 sessions", + "Request for 1 multiplexed session returned 1 session", + "Creating 2 sessions", + "Using Session", + "Starting/Resuming stream"); + if (spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession()) { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); + } else { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotations); + } } @Test @@ -335,11 +351,29 @@ public void multiUse() { "Starting/Resuming stream", "Creating Transaction", "Transaction Creation Done"); - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); + List expectedAnnotationsForMultiplexedSession = + ImmutableList.of( + "Requesting 2 sessions", + "Request for 2 sessions returned 2 sessions", + "Request for 1 multiplexed session returned 1 session", + "Creating 2 sessions", + "Using Session", + "Starting/Resuming stream", + "Creating Transaction", + "Transaction Creation Done"); + if (isMultiplexedSessionsEnabled()) { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); + } else { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotations); + } } @Test @@ -364,11 +398,32 @@ public void transactionRunner() { "Requesting 2 sessions", "Request for 2 sessions returned 2 sessions", "Creating 2 sessions"); - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); + List expectedAnnotationsForMultiplexedSession = + ImmutableList.of( + "Acquiring session", + "Acquired session", + "Using Session", + "Starting Transaction Attempt", + "Starting Commit", + "Commit Done", + "Transaction Attempt Succeeded", + "Requesting 2 sessions", + "Request for 2 sessions returned 2 sessions", + "Request for 1 multiplexed session returned 1 session", + "Creating 2 sessions"); + if (isMultiplexedSessionsEnabled()) { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); + } else { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotations); + } } @Test @@ -381,7 +436,13 @@ public void transactionRunnerWithError() { assertEquals(ErrorCode.INVALID_ARGUMENT, e.getErrorCode()); Map spans = failOnOverkillTraceComponent.getSpans(); - assertThat(spans.size()).isEqualTo(3); + + if (isMultiplexedSessionsEnabled()) { + assertEquals(spans.toString(), 4, spans.size()); + assertThat(spans).containsEntry("CloudSpannerOperation.CreateMultiplexedSession", true); + } else { + assertThat(spans.size()).isEqualTo(3); + } assertThat(spans).containsEntry("CloudSpanner.ReadWriteTransaction", true); assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessions", true); assertThat(spans).containsEntry("CloudSpannerOperation.BatchCreateSessionsRequest", true); @@ -396,17 +457,42 @@ public void transactionRunnerWithError() { "Requesting 2 sessions", "Request for 2 sessions returned 2 sessions", "Creating 2 sessions"); - - verifyAnnotations( - failOnOverkillTraceComponent.getAnnotations().stream() - .distinct() - .collect(Collectors.toList()), - expectedAnnotations); + List expectedAnnotationsForMultiplexedSession = + ImmutableList.of( + "Acquiring session", + "Acquired session", + "Using Session", + "Starting Transaction Attempt", + "Transaction Attempt Failed in user operation", + "Requesting 2 sessions", + "Request for 1 multiplexed session returned 1 session", + "Request for 2 sessions returned 2 sessions", + "Creating 2 sessions"); + if (isMultiplexedSessionsEnabled()) { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotationsForMultiplexedSession); + } else { + verifyAnnotations( + failOnOverkillTraceComponent.getAnnotations().stream() + .distinct() + .collect(Collectors.toList()), + expectedAnnotations); + } } private void verifyAnnotations(List actualAnnotations, List expectedAnnotations) { assertEquals( - actualAnnotations.stream().distinct().sorted().collect(Collectors.toList()), - expectedAnnotations.stream().sorted().collect(Collectors.toList())); + expectedAnnotations.stream().sorted().collect(Collectors.toList()), + actualAnnotations.stream().distinct().sorted().collect(Collectors.toList())); + } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java index ad45f9039a3..8c5b9be5e07 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerGaxRetryTest.java @@ -21,6 +21,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.api.gax.retrying.RetrySettings; @@ -28,15 +29,20 @@ import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.protobuf.ListValue; +import com.google.rpc.RetryInfo; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.StructType; import com.google.spanner.v1.StructType.Field; import com.google.spanner.v1.TypeCode; +import io.grpc.Metadata; import io.grpc.Server; +import io.grpc.Status; import io.grpc.StatusRuntimeException; import io.grpc.inprocess.InProcessServerBuilder; +import io.grpc.protobuf.ProtoUtils; import java.io.IOException; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.junit.After; import org.junit.AfterClass; @@ -84,6 +90,14 @@ public class SpannerGaxRetryTest { SimulatedExecutionTime.ofMinimumAndRandomTime(1000, 0); private static final StatusRuntimeException UNAVAILABLE = io.grpc.Status.UNAVAILABLE.withDescription("Retryable test exception.").asRuntimeException(); + private static final StatusRuntimeException RESOURCE_EXHAUSTED_NON_RETRYABLE = + Status.RESOURCE_EXHAUSTED + .withDescription("Non-retryable test exception.") + .asRuntimeException(); + private static final StatusRuntimeException RESOURCE_EXHAUSTED_RETRYABLE = + Status.RESOURCE_EXHAUSTED + .withDescription("Retryable test exception.") + .asRuntimeException(createRetryInfo()); private static final StatusRuntimeException FAILED_PRECONDITION = io.grpc.Status.FAILED_PRECONDITION .withDescription("Non-retryable test exception.") @@ -130,7 +144,16 @@ public void setUp() throws Exception { .setChannelProvider(channelProvider) .setCredentials(NoCredentials.getInstance()); // Make sure the session pool is empty by default. - builder.setSessionPoolOption(SessionPoolOptions.newBuilder().setMinSessions(0).build()); + SessionPoolOptions sessionPoolOptions = + SessionPoolOptions.newBuilder().setMinSessions(0).build(); + + // Add a wait time for sessions to be initialized. In this case, since minSessions = 0, the + // wait time is for multiplexed sessions + if (sessionPoolOptions.getUseMultiplexedSession()) { + sessionPoolOptions = + sessionPoolOptions.toBuilder().setWaitForMinSessions(Duration.ofSeconds(5)).build(); + } + builder.setSessionPoolOption(sessionPoolOptions); // Create one client with default timeout values and one with short timeout values specifically // for the test cases that expect a DEADLINE_EXCEEDED. spanner = builder.build().getService(); @@ -183,6 +206,19 @@ public void tearDown() { spanner.close(); } + static Metadata createRetryInfo() { + Metadata trailers = new Metadata(); + RetryInfo retryInfo = + RetryInfo.newBuilder() + .setRetryDelay( + com.google.protobuf.Duration.newBuilder() + .setNanos((int) TimeUnit.MILLISECONDS.toNanos(1L)) + .setSeconds(0L)) + .build(); + trailers.put(ProtoUtils.keyForProto(RetryInfo.getDefaultInstance()), retryInfo); + return trailers; + } + private void warmUpSessionPool(DatabaseClient client) { for (int i = 0; i < 10; i++) { int retryCount = 0; @@ -206,6 +242,11 @@ private void warmUpSessionPool(DatabaseClient client) { @Test public void singleUseTimeout() { + if (isMultiplexedSessionsEnabled()) { + // for multiplexed sessions CreateSessions RPC is already completed during start-up + // hence, we are setting a strict delay with the next RPC + mockSpanner.setExecuteStreamingSqlExecutionTime(ONE_SECOND); + } mockSpanner.setBatchCreateSessionsExecutionTime(ONE_SECOND); try (ResultSet rs = clientWithTimeout.singleUse().executeQuery(SELECT1AND2)) { SpannerException e = assertThrows(SpannerException.class, () -> rs.next()); @@ -215,9 +256,29 @@ public void singleUseTimeout() { @Test public void singleUseUnavailable() { - mockSpanner.addException(UNAVAILABLE); - try (ResultSet rs = client.singleUse().executeQuery(SELECT1AND2)) { - while (rs.next()) {} + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException(UNAVAILABLE)); + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1AND2)) { + assertTrue(resultSet.next()); + } + } + + @Test + public void singleUseResourceExhausted_nonRetryable() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException(RESOURCE_EXHAUSTED_NON_RETRYABLE)); + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1AND2)) { + SpannerException exception = assertThrows(SpannerException.class, resultSet::next); + assertEquals(ErrorCode.RESOURCE_EXHAUSTED, exception.getErrorCode()); + } + } + + @Test + public void singleUseResourceExhausted_retryable() { + mockSpanner.setExecuteStreamingSqlExecutionTime( + SimulatedExecutionTime.ofException(RESOURCE_EXHAUSTED_RETRYABLE)); + try (ResultSet resultSet = client.singleUse().executeQuery(SELECT1AND2)) { + assertTrue(resultSet.next()); } } @@ -250,6 +311,11 @@ public void singleUseInternal() { @Test public void singleUseReadOnlyTransactionTimeout() { + if (isMultiplexedSessionsEnabled()) { + // for multiplexed sessions CreateSessions RPC is already completed during start-up + // hence, we are setting a strict delay with the next RPC + mockSpanner.setExecuteStreamingSqlExecutionTime(ONE_SECOND); + } mockSpanner.setBatchCreateSessionsExecutionTime(ONE_SECOND); try (ResultSet rs = clientWithTimeout.singleUseReadOnlyTransaction().executeQuery(SELECT1AND2)) { @@ -384,4 +450,11 @@ public void transactionManagerUnavailable() { } } } + + private boolean isMultiplexedSessionsEnabled() { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java index 6cb16eb3bef..d30df09d4c3 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TransactionRunnerImplTest.java @@ -304,7 +304,9 @@ public void inlineBegin() { SessionImpl session = new SessionImpl( - spanner, "projects/p/instances/i/databases/d/sessions/s", Collections.EMPTY_MAP) {}; + spanner, + new SessionReference( + "projects/p/instances/i/databases/d/sessions/s", Collections.EMPTY_MAP)) {}; session.setCurrentSpan(new OpenTelemetrySpan(mock(io.opentelemetry.api.trace.Span.class))); TransactionRunnerImpl runner = new TransactionRunnerImpl(session); runner.setSpan(span); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java index 9af443293ad..1a5cfdf73e4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/AbstractMockServerTest.java @@ -19,6 +19,7 @@ import com.google.cloud.spanner.ForceCloseSpannerFunction; import com.google.cloud.spanner.MockSpannerServiceImpl; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.Statement; import com.google.cloud.spanner.admin.database.v1.MockDatabaseAdminImpl; import com.google.cloud.spanner.admin.instance.v1.MockInstanceAdminImpl; @@ -293,4 +294,11 @@ protected ExecuteSqlRequest getLastExecuteSqlRequest() { ITConnection createITConnection(ConnectionOptions options) { return new ITConnectionImpl(options); } + + boolean isMultiplexedSessionsEnabled(Spanner spanner) { + if (spanner.getOptions() == null || spanner.getOptions().getSessionPoolOptions() == null) { + return false; + } + return spanner.getOptions().getSessionPoolOptions().getUseMultiplexedSession(); + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java index 85025ad91bc..d88882fc4c2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionTest.java @@ -289,8 +289,12 @@ public void testMaxSessions() assertThat(count1.isDone()).isTrue(); assertThat(count2.isDone()).isTrue(); + if (isMultiplexedSessionsEnabled(connection1.getSpanner())) { + assertThat(mockSpanner.numSessionsCreated()).isEqualTo(2); + } else { + assertThat(mockSpanner.numSessionsCreated()).isEqualTo(1); + } } - assertThat(mockSpanner.numSessionsCreated()).isEqualTo(1); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java index 2536b74f104..95bb4fb8fa0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/PartitionedQueryMockServerTest.java @@ -93,8 +93,12 @@ public void testPartitionQuery() { assertFalse(resultSet.next()); } } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -116,8 +120,12 @@ public void testPartitionQueryInReadOnlyTransaction() { assertFalse(resultSet.next()); } } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -147,12 +155,16 @@ public void testMixNormalAndPartitionQueryInReadOnlyTransaction() { readTimestamps.add(connection.getReadTimestamp()); connection.commit(); } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } // The above will start two transactions: // 1. The initial 'normal' read-only transaction. // 2. The batch read-only transaction. The latter will use the same read timestamp as the normal // read-only transaction. - assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(4, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); @@ -181,6 +193,7 @@ public void testRunPartition() { int maxPartitions = 5; try (Connection connection = createConnection()) { connection.setAutocommit(true); + boolean isMultiplexedSessionCreated = false; for (boolean dataBoostEnabled : new boolean[] {false, true}) { connection.setDataBoostEnabled(dataBoostEnabled); assertEquals(dataBoostEnabled, connection.isDataBoostEnabled()); @@ -203,8 +216,23 @@ public void testRunPartition() { // each partition just returns all rows of the query. assertEquals(generatedRowCount * maxPartitions, rowCount); } - - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + int createSessionRequestCounts = + mockSpanner.countRequestsOfType(CreateSessionRequest.class); + int expectedCreateSessionsRPC = 1; + if (isMultiplexedSessionsEnabled(connection.getSpanner()) && !isMultiplexedSessionCreated) { + // in one of the iterations there will be one additional RPC to create a multiplexed + // session + assertTrue( + createSessionRequestCounts >= expectedCreateSessionsRPC + && createSessionRequestCounts <= expectedCreateSessionsRPC + 1); + if (createSessionRequestCounts == expectedCreateSessionsRPC + 1) { + isMultiplexedSessionCreated = true; + } + } else { + assertEquals( + expectedCreateSessionsRPC, + mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); assertEquals(maxPartitions, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); @@ -256,6 +284,7 @@ public void testRunPartitionUsingSql() { assertFalse(resultSet.next()); } + boolean isMultiplexedSessionCreated = false; for (boolean useLiteral : new boolean[] {true, false}) { try (ResultSet partitions = connection.executeQuery( @@ -286,8 +315,24 @@ public void testRunPartitionUsingSql() { // so each partition just returns all rows of the query. assertEquals(generatedRowCount * maxPartitions, rowCount); } - - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + int createSessionRequestCounts = + mockSpanner.countRequestsOfType(CreateSessionRequest.class); + int expectedCreateSessionsRPC = 1; + if (isMultiplexedSessionsEnabled(connection.getSpanner()) + && !isMultiplexedSessionCreated) { + // in one of the iterations there will be one additional RPC to create a multiplexed + // session + assertTrue( + createSessionRequestCounts >= expectedCreateSessionsRPC + && createSessionRequestCounts <= expectedCreateSessionsRPC + 1); + if (createSessionRequestCounts == expectedCreateSessionsRPC + 1) { + isMultiplexedSessionCreated = true; + } + } else { + assertEquals( + expectedCreateSessionsRPC, + mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); assertEquals(maxPartitions, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); @@ -329,8 +374,12 @@ public void testRunPartitionedQuery() { // count will be maxPartitions * generatedRowCount. assertEquals(maxPartitions * generatedRowCount, rowCount); } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -358,8 +407,12 @@ public void testRunEmptyPartitionedQuery() { assertNotNull(resultSet.getType()); assertEquals(24, resultSet.getType().getStructFields().size()); } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -429,9 +482,13 @@ public void testRunPartitionedQueryUsingSql() { assertEquals(maxPartitions * generatedRowCount, rowCount); } } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } // We have 2 requests of each, as we run the query with data boost both enabled and disabled. - assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -487,8 +544,12 @@ public void testRunPartitionedQueryWithError() { rowCount, maxPartitions, generatedRowCount, generatedRowCount, errorIndex), rowCount <= (maxPartitions * generatedRowCount - (generatedRowCount - errorIndex))); } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(1, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -530,8 +591,12 @@ public void testRunPartitionedQueryWithMaxParallelism() { assertEquals(maxPartitions * generatedRowCount, rowCount); } } + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(6, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(5, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(5, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(5, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(5, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } @@ -605,8 +670,12 @@ public void testAutoPartitionMode() { exception .getMessage() .contains("Partition query is not supported for read/write transaction")); + if (isMultiplexedSessionsEnabled(connection.getSpanner())) { + assertEquals(3, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } else { + assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); + } } - assertEquals(2, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); assertEquals(2, mockSpanner.countRequestsOfType(PartitionQueryRequest.class)); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java new file mode 100644 index 00000000000..2f51e7d0443 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SimpleParserTest.java @@ -0,0 +1,224 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static com.google.cloud.spanner.connection.SimpleParser.Result.NOT_FOUND; +import static com.google.cloud.spanner.connection.SimpleParser.Result.found; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.Dialect; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class SimpleParserTest { + + @Parameters(name = "dialect = {0}") + public static Object[] data() { + return Dialect.values(); + } + + @Parameter public Dialect dialect; + + SimpleParser parserFor(String sql) { + return new SimpleParser(dialect, sql); + } + + @Test + public void testResultHashCode() { + assertEquals(0, NOT_FOUND.hashCode()); + assertEquals(found("foo").hashCode(), found("foo").hashCode()); + assertNotEquals(found("foo").hashCode(), found("bar").hashCode()); + assertNotEquals(NOT_FOUND.hashCode(), found("bar").hashCode()); + } + + @Test + public void testResultEquals() { + assertEquals(found("foo"), found("foo")); + assertNotEquals(found("foo"), found("bar")); + assertNotEquals(NOT_FOUND, found("bar")); + assertNotEquals(found("foo"), new Object()); + assertNotEquals(NOT_FOUND, new Object()); + } + + @Test + public void testResultToString() { + assertEquals("foo", found("foo").toString()); + assertEquals("NOT FOUND", NOT_FOUND.toString()); + } + + @Test + public void testResultGetValue() { + assertEquals("foo", found("foo").getValue()); + assertNull(NOT_FOUND.getValue()); + } + + @Test + public void testEatToken() { + assertTrue(parserFor("(foo").eatToken('(')); + assertTrue(parserFor("(").eatToken('(')); + assertTrue(parserFor("( ").eatToken('(')); + assertTrue(parserFor("\t( foo").eatToken('(')); + + assertFalse(parserFor("foo(").eatToken('(')); + assertFalse(parserFor("").eatToken('(')); + } + + @Test + public void testEatTokenAdvancesPosition() { + SimpleParser parser = parserFor("@{test=value}"); + assertEquals(0, parser.getPos()); + assertTrue(parser.eatToken('@')); + assertEquals(1, parser.getPos()); + + assertFalse(parser.eatToken('(')); + assertEquals(1, parser.getPos()); + + assertTrue(parser.eatToken('{')); + assertEquals(2, parser.getPos()); + } + + @Test + public void testEatTokensAdvancesPosition() { + SimpleParser parser = parserFor("@{test=value}"); + assertEquals(0, parser.getPos()); + assertTrue(parser.eatTokens('@', '{')); + assertEquals(2, parser.getPos()); + + assertFalse(parser.eatTokens('@', '{')); + assertEquals(2, parser.getPos()); + + parser = parserFor("@ /* comment */ { test=value}"); + assertEquals(0, parser.getPos()); + assertTrue(parser.eatTokens('@', '{')); + assertEquals("@ /* comment */ {".length(), parser.getPos()); + } + + @Test + public void testPeekTokenKeepsPosition() { + SimpleParser parser = parserFor("@{test=value}"); + assertEquals(0, parser.getPos()); + assertTrue(parser.peekToken('@')); + assertEquals(0, parser.getPos()); + + assertFalse(parser.peekToken('{')); + assertEquals(0, parser.getPos()); + } + + @Test + public void testPeekTokensKeepsPosition() { + SimpleParser parser = parserFor("@{test=value}"); + assertEquals(0, parser.getPos()); + assertTrue(parser.peekTokens('@', '{')); + assertEquals(0, parser.getPos()); + } + + @Test + public void testEatIdentifier() { + assertEquals(found("foo"), parserFor("foo").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo(id)").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo bar").eatIdentifier()); + + assertEquals(found("foo"), parserFor(" foo bar").eatIdentifier()); + assertEquals(found("foo"), parserFor("\tfoo").eatIdentifier()); + assertEquals(found("bar"), parserFor("\n bar").eatIdentifier()); + assertEquals(found("foo"), parserFor(" foo").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo\"bar\"").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo.bar").eatIdentifier()); + + assertEquals(found("foo"), parserFor("foo) bar").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo- bar").eatIdentifier()); + assertEquals(found("foo"), parserFor("foo/ bar").eatIdentifier()); + assertEquals(found("foo$"), parserFor("foo$ bar").eatIdentifier()); + assertEquals(found("f$oo"), parserFor("f$oo bar").eatIdentifier()); + assertEquals(found("_foo"), parserFor("_foo bar").eatIdentifier()); + assertEquals(found("øfoo"), parserFor("øfoo bar").eatIdentifier()); + + assertEquals(NOT_FOUND, parserFor("\"foo").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("\\foo").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("1foo").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("-foo").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("$foo").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor(" ").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("\n").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("/* comment */").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("-- comment").eatIdentifier()); + assertEquals(NOT_FOUND, parserFor("/* comment").eatIdentifier()); + + String nestedCommentFollowedByIdentifier = + "/* comment /* nested comment */ " + + "still a comment if nested comments are supported, " + + "and otherwise the start of an identifier. */ test"; + if (AbstractStatementParser.getInstance(dialect).supportsNestedComments()) { + assertEquals(found("test"), parserFor(nestedCommentFollowedByIdentifier).eatIdentifier()); + } else { + // The parser does not look ahead if the rest of the SQL string is malformed. It just reads + // from the current position. + assertEquals(found("still"), parserFor(nestedCommentFollowedByIdentifier).eatIdentifier()); + } + + if (AbstractStatementParser.getInstance(dialect).supportsHashSingleLineComments()) { + assertEquals(found("test"), parserFor("# comment\ntest").eatIdentifier()); + } else { + // '#' is not a valid start of an identifier. + assertEquals(NOT_FOUND, parserFor("# not a comment\ntest").eatIdentifier()); + } + } + + @Test + public void testEatSingleQuotedString() { + assertEquals(found("test"), parserFor("'test'").eatSingleQuotedString()); + assertEquals(found("test"), parserFor(" 'test' ").eatSingleQuotedString()); + assertEquals(found("test"), parserFor("\n'test'").eatSingleQuotedString()); + assertEquals(found("test"), parserFor("\t'test'").eatSingleQuotedString()); + assertEquals(found("test test"), parserFor(" 'test test' ").eatSingleQuotedString()); + assertEquals(found("test\t"), parserFor("'test\t'").eatSingleQuotedString()); + assertEquals( + found("test"), parserFor("/* comment */'test'/*comment*/").eatSingleQuotedString()); + assertEquals(found("test"), parserFor("-- comment\n'test'--comment\n").eatSingleQuotedString()); + assertEquals( + found("test /* not a comment */"), + parserFor("'test /* not a comment */'").eatSingleQuotedString()); + + assertEquals(NOT_FOUND, parserFor("test").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("'test").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("test'").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("\"test\"").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("'test\n'").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("'\ntest'").eatSingleQuotedString()); + assertEquals(NOT_FOUND, parserFor("'te\nst'").eatSingleQuotedString()); + } + + @Test + public void testEatSingleQuotedStringAdvancesPosition() { + SimpleParser parser = parserFor("'test 1' 'test 2' "); + assertEquals(found("test 1"), parser.eatSingleQuotedString()); + assertEquals("'test 1'".length(), parser.getPos()); + assertEquals(found("test 2"), parser.eatSingleQuotedString()); + assertEquals("'test 1' 'test 2'".length(), parser.getPos()); + assertEquals(NOT_FOUND, parser.eatSingleQuotedString()); + assertEquals(parser.getSql().length(), parser.getPos()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementHintParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementHintParserTest.java new file mode 100644 index 00000000000..d1f276849f0 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementHintParserTest.java @@ -0,0 +1,210 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection; + +import static com.google.cloud.spanner.connection.StatementHintParser.NO_HINTS; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.spanner.Dialect; +import com.google.common.collect.ImmutableMap; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class StatementHintParserTest { + + @Parameters(name = "dialect = {0}") + public static Object[] data() { + return Dialect.values(); + } + + @Parameter public Dialect dialect; + + StatementHintParser parserFor(String sql) { + return new StatementHintParser(dialect, sql); + } + + String getStartHint() { + return dialect == Dialect.POSTGRESQL ? "/*@" : "@{"; + } + + String getEndHint() { + return dialect == Dialect.POSTGRESQL ? "*/" : "}"; + } + + String encloseInHint(String sql) { + return getStartHint() + sql + getEndHint(); + } + + @Test + public void testNoHints() { + assertFalse(parserFor("select foo from bar").hasStatementHints()); + assertFalse(parserFor("/* comment */ select foo from bar").hasStatementHints()); + assertFalse(parserFor("select foo from bar").hasStatementHints()); + assertFalse(parserFor("select foo from bar").hasStatementHints()); + } + + @Test + public void testExtractHints() { + StatementHintParser parser; + + parser = parserFor(encloseInHint("statement_tag=tag1") + " select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals(ImmutableMap.of("statement_tag", "tag1"), parser.getClientSideStatementHints()); + assertEquals(" select 1", parser.getSqlWithoutClientSideHints()); + + parser = parserFor(encloseInHint("statement_tag=tag1, other_hint=value") + " select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals(ImmutableMap.of("statement_tag", "tag1"), parser.getClientSideStatementHints()); + assertEquals( + encloseInHint(" other_hint=value") + " select 1", parser.getSqlWithoutClientSideHints()); + + parser = parserFor(encloseInHint("other_hint=value") + " select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals(NO_HINTS, parser.getClientSideStatementHints()); + assertEquals( + encloseInHint("other_hint=value") + " select 1", parser.getSqlWithoutClientSideHints()); + + parser = parserFor(encloseInHint("statement_tag=tag1, rpc_priority=high") + " select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("statement_tag", "tag1", "rpc_priority", "high"), + parser.getClientSideStatementHints()); + assertEquals(" select 1", parser.getSqlWithoutClientSideHints()); + + parser = parserFor(encloseInHint("rpc_priority=medium, statement_tag='value 2'") + " select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("rpc_priority", "medium", "statement_tag", "value 2"), + parser.getClientSideStatementHints()); + assertEquals(" select 1", parser.getSqlWithoutClientSideHints()); + + parser = + parserFor( + "/* comment */ " + + encloseInHint( + "/*comment*/statement_tag--comment\n" + + "=--comment\nvalue1\n,rpc_priority=Low/*comment*/") + + " /* yet another comment */ select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("statement_tag", "value1", "rpc_priority", "Low"), + parser.getClientSideStatementHints()); + assertEquals(" /* yet another comment */ select 1", parser.getSqlWithoutClientSideHints()); + + parser = + parserFor( + "/* comment */ " + + encloseInHint( + "/*comment*/statement_tag--comment\n" + + "=--comment\nvalue1\n," + + "/* other hint comment */ other_hint='some value',\n" + + "rpc_priority=Low/*comment*/") + + " /* yet another comment */ select 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("statement_tag", "value1", "rpc_priority", "Low"), + parser.getClientSideStatementHints()); + assertEquals( + "/* comment */ " + + encloseInHint( + "/*comment*//* other hint comment */ other_hint='some value',\n" + "/*comment*/") + + " /* yet another comment */ select 1", + parser.getSqlWithoutClientSideHints()); + + parser = + parserFor( + encloseInHint( + "statement_tag=tag1,\n" + + "other_hint1='some value',\n" + + "rpc_priority=low,\n" + + "other_hint2=value") + + "\nselect 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("statement_tag", "tag1", "rpc_priority", "low"), + parser.getClientSideStatementHints()); + assertEquals( + encloseInHint("\nother_hint1='some value',\n" + "\n" + "other_hint2=value") + "\nselect 1", + parser.getSqlWithoutClientSideHints()); + + parser = + parserFor( + encloseInHint( + "hint1=value1,\n" + + "other_hint1='some value',\n" + + "rpc_priority=low,\n" + + "other_hint2=value") + + "\nselect 1"); + assertTrue(parser.hasStatementHints()); + assertEquals(ImmutableMap.of("rpc_priority", "low"), parser.getClientSideStatementHints()); + assertEquals( + encloseInHint( + "hint1=value1,\n" + "other_hint1='some value',\n" + "\n" + "other_hint2=value") + + "\nselect 1", + parser.getSqlWithoutClientSideHints()); + + parser = + parserFor( + encloseInHint( + "hint1=value1,\n" + + "hint2=value2,\n" + + "rpc_priority=low,\n" + + "statement_tag=tag") + + "\nselect 1"); + assertTrue(parser.hasStatementHints()); + assertEquals( + ImmutableMap.of("rpc_priority", "low", "statement_tag", "tag"), + parser.getClientSideStatementHints()); + assertEquals( + encloseInHint("hint1=value1,\nhint2=value2,\n\n") + "\nselect 1", + parser.getSqlWithoutClientSideHints()); + } + + @Test + public void testExtractInvalidHints() { + assertInvalidHints("@{statement_tag=value value}"); + assertInvalidHints("@statement_tag=value"); + assertInvalidHints("{statement_tag=value}"); + assertInvalidHints("@{statement_tag=value"); + assertInvalidHints("@{statement_tag=value,"); + assertInvalidHints("@{statement_tag=value,}"); + assertInvalidHints("@statement_tag=value}"); + assertInvalidHints("@{statement_tag=}"); + assertInvalidHints("@{=value}"); + assertInvalidHints("@{}"); + assertInvalidHints("@{statement_tag=value,}"); + assertInvalidHints("@{statement_tag=value1,hint2=value2,}"); + assertInvalidHints("@{@statement_tag=value1}"); + assertInvalidHints("@{statement_tag=@value1}"); + assertInvalidHints("@{statement_tag value1}"); + assertInvalidHints("@{statement_tag='value1}"); + assertInvalidHints("@{statement_tag=value1'}"); + } + + private void assertInvalidHints(String sql) { + StatementHintParser parser = parserFor(sql); + assertEquals(NO_HINTS, parser.getClientSideStatementHints()); + assertSame(sql, parser.getSqlWithoutClientSideHints()); + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java index 3739aa11064..57758886738 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/StatementParserTest.java @@ -1575,8 +1575,9 @@ public void testPostgreSQLReturningClause() { parser.parse(Statement.of("insert into t1 select 10.returning*")).hasReturningClause()); } - int skipSingleLineComment(String sql, int startIndex) { - return AbstractStatementParser.skipSingleLineComment(sql, startIndex, null); + int skipSingleLineComment(String sql, int prefixLength, int startIndex) { + return AbstractStatementParser.skipSingleLineComment( + dialect, sql, prefixLength, startIndex, null); } int skipMultiLineComment(String sql, int startIndex) { @@ -1606,12 +1607,12 @@ public void testConcatenatedLiterals() { public void testSkipSingleLineComment() { assumeTrue(dialect == Dialect.POSTGRESQL); - assertEquals(7, skipSingleLineComment("-- foo\n", 0)); - assertEquals(7, skipSingleLineComment("-- foo\nbar", 0)); - assertEquals(6, skipSingleLineComment("-- foo", 0)); - assertEquals(11, skipSingleLineComment("bar -- foo\n", 4)); - assertEquals(11, skipSingleLineComment("bar -- foo\nbar", 4)); - assertEquals(10, skipSingleLineComment("bar -- foo", 4)); + assertEquals(7, skipSingleLineComment("-- foo\n", 2, 0)); + assertEquals(7, skipSingleLineComment("-- foo\nbar", 2, 0)); + assertEquals(6, skipSingleLineComment("-- foo", 2, 0)); + assertEquals(11, skipSingleLineComment("bar -- foo\n", 2, 4)); + assertEquals(11, skipSingleLineComment("bar -- foo\nbar", 2, 4)); + assertEquals(10, skipSingleLineComment("bar -- foo", 2, 4)); } @Test diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TaggingTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TaggingTest.java index ada17bca219..80210cb7094 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TaggingTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/TaggingTest.java @@ -18,25 +18,49 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; +import com.google.cloud.spanner.MockSpannerServiceImpl; import com.google.cloud.spanner.ResultSet; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.Statement; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteSqlRequest; -import java.util.Arrays; +import java.util.Collections; import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; -@RunWith(JUnit4.class) +@RunWith(Parameterized.class) public class TaggingTest extends AbstractMockServerTest { + @Parameters(name = "dialect = {0}") + public static Object[] data() { + return Dialect.values(); + } + + @Parameter public Dialect dialect; + + private Dialect currentDialect; + + @Before + public void setupDialect() { + if (currentDialect != dialect) { + mockSpanner.putStatementResult( + MockSpannerServiceImpl.StatementResult.detectDialectResult(dialect)); + SpannerPool.closeSpannerPool(); + currentDialect = dialect; + } + } + @After public void clearRequests() { mockSpanner.clearRequests(); @@ -46,12 +70,8 @@ public void clearRequests() { public void testStatementTagNotAllowedForCommit() { try (Connection connection = createConnection()) { connection.setStatementTag("tag-1"); - try { - connection.commit(); - fail("missing expected exception"); - } catch (SpannerException e) { - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - } + SpannerException exception = assertThrows(SpannerException.class, connection::commit); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); } } @@ -59,12 +79,8 @@ public void testStatementTagNotAllowedForCommit() { public void testStatementTagNotAllowedForRollback() { try (Connection connection = createConnection()) { connection.setStatementTag("tag-1"); - try { - connection.rollback(); - fail("missing expected exception"); - } catch (SpannerException e) { - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - } + SpannerException exception = assertThrows(SpannerException.class, connection::rollback); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); } } @@ -74,12 +90,11 @@ public void testStatementTagNotAllowedInsideBatch() { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); connection.startBatchDml(); - try { - connection.setStatementTag("tag-1"); - fail("missing expected exception"); - } catch (SpannerException e) { - assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); - } + + SpannerException exception = + assertThrows(SpannerException.class, () -> connection.setStatementTag("tag-1")); + assertEquals(ErrorCode.FAILED_PRECONDITION, exception.getErrorCode()); + connection.abortBatch(); } } @@ -90,7 +105,8 @@ public void testQuery_NoTags() { try (Connection connection = createConnection()) { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); - try (ResultSet rs = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); assertEquals( "", @@ -172,7 +188,7 @@ public void testBatchUpdate_NoTags() { try (Connection connection = createConnection()) { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); - connection.executeBatchUpdate(Arrays.asList(INSERT_STATEMENT)); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); assertEquals( @@ -201,7 +217,8 @@ public void testQuery_StatementTag() { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); connection.setStatementTag("tag-1"); - try (ResultSet rs = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); assertEquals( "tag-1", @@ -221,7 +238,8 @@ public void testQuery_StatementTag() { mockSpanner.clearRequests(); // The tag should automatically be cleared after a statement. - try (ResultSet rs = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); assertEquals( "", @@ -346,7 +364,7 @@ public void testBatchUpdate_StatementTag() { for (boolean autocommit : new boolean[] {true, false}) { connection.setAutocommit(autocommit); connection.setStatementTag("tag-3"); - connection.executeBatchUpdate(Arrays.asList(INSERT_STATEMENT)); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); assertEquals( @@ -366,7 +384,7 @@ public void testBatchUpdate_StatementTag() { mockSpanner.clearRequests(); - connection.executeBatchUpdate(Arrays.asList(INSERT_STATEMENT)); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); assertEquals( @@ -393,7 +411,8 @@ public void testBatchUpdate_StatementTag() { public void testQuery_TransactionTag() { try (Connection connection = createConnection()) { connection.setTransactionTag("tag-1"); - try (ResultSet rs = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} connection.commit(); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); @@ -430,7 +449,8 @@ public void testQuery_TransactionTag() { mockSpanner.clearRequests(); // The tag should automatically be cleared after a statement. - try (ResultSet rs = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} + //noinspection EmptyTryBlock + try (ResultSet ignore = connection.executeQuery(SELECT_COUNT_STATEMENT)) {} connection.commit(); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); @@ -550,7 +570,7 @@ public void testUpdate_TransactionTag() { public void testBatchUpdate_TransactionTag() { try (Connection connection = createConnection()) { connection.setTransactionTag("tag-3"); - connection.executeBatchUpdate(Arrays.asList(INSERT_STATEMENT)); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); connection.commit(); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); @@ -586,7 +606,7 @@ public void testBatchUpdate_TransactionTag() { mockSpanner.clearRequests(); - connection.executeBatchUpdate(Arrays.asList(INSERT_STATEMENT)); + connection.executeBatchUpdate(Collections.singletonList(INSERT_STATEMENT)); connection.commit(); assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); @@ -705,34 +725,170 @@ public void testRunBatch_TransactionTag() { @Test public void testShowSetTags() { try (Connection connection = createConnection()) { - connection.execute(Statement.of("SET STATEMENT_TAG='tag1'")); + connection.execute(Statement.of(String.format("SET %sSTATEMENT_TAG='tag1'", prefix()))); try (ResultSet rs = - connection.execute(Statement.of("SHOW VARIABLE STATEMENT_TAG")).getResultSet()) { + connection + .execute(Statement.of(String.format("SHOW VARIABLE %sSTATEMENT_TAG", prefix()))) + .getResultSet()) { assertTrue(rs.next()); - assertEquals("tag1", rs.getString("STATEMENT_TAG")); + assertEquals("tag1", rs.getString(String.format("%sSTATEMENT_TAG", prefix()))); assertFalse(rs.next()); } - connection.execute(Statement.of("SET STATEMENT_TAG=''")); + connection.execute(Statement.of(String.format("SET %sSTATEMENT_TAG=''", prefix()))); try (ResultSet rs = - connection.execute(Statement.of("SHOW VARIABLE STATEMENT_TAG")).getResultSet()) { + connection + .execute(Statement.of(String.format("SHOW VARIABLE %sSTATEMENT_TAG", prefix()))) + .getResultSet()) { assertTrue(rs.next()); - assertEquals("", rs.getString("STATEMENT_TAG")); + assertEquals("", rs.getString(String.format("%sSTATEMENT_TAG", prefix()))); assertFalse(rs.next()); } - connection.execute(Statement.of("SET TRANSACTION_TAG='tag2'")); + connection.execute(Statement.of(String.format("SET %sTRANSACTION_TAG='tag2'", prefix()))); try (ResultSet rs = - connection.execute(Statement.of("SHOW VARIABLE TRANSACTION_TAG")).getResultSet()) { + connection + .execute(Statement.of(String.format("SHOW VARIABLE %sTRANSACTION_TAG", prefix()))) + .getResultSet()) { assertTrue(rs.next()); - assertEquals("tag2", rs.getString("TRANSACTION_TAG")); + assertEquals("tag2", rs.getString(String.format("%sTRANSACTION_TAG", prefix()))); assertFalse(rs.next()); } - connection.execute(Statement.of("SET TRANSACTION_TAG=''")); + connection.execute(Statement.of(String.format("SET %sTRANSACTION_TAG=''", prefix()))); try (ResultSet rs = - connection.execute(Statement.of("SHOW VARIABLE TRANSACTION_TAG")).getResultSet()) { + connection + .execute(Statement.of(String.format("SHOW VARIABLE %sTRANSACTION_TAG", prefix()))) + .getResultSet()) { assertTrue(rs.next()); - assertEquals("", rs.getString("TRANSACTION_TAG")); + assertEquals("", rs.getString(String.format("%sTRANSACTION_TAG", prefix()))); assertFalse(rs.next()); } } } + + @Test + public void testQuery_StatementTagHint() { + String sql = SELECT_COUNT_STATEMENT.getSql(); + + try (Connection connection = createConnection()) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + //noinspection EmptyTryBlock + try (ResultSet ignore = + connection.executeQuery(Statement.of(statementTagHint("tag-1") + sql))) {} + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + "tag-1", + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getRequestTag()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testUpdate_StatementTagHint() { + String sql = INSERT_STATEMENT.getSql(); + + try (Connection connection = createConnection()) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + connection.executeUpdate(Statement.of(statementTagHint("tag-2") + sql)); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + "tag-2", + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getRequestTag()); + assertEquals( + "", + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getTransactionTag()); + + mockSpanner.clearRequests(); + } + } + } + + @Test + public void testPartitionedUpdate_StatementTagHint() { + String sql = INSERT_STATEMENT.getSql(); + + try (Connection connection = createConnection()) { + connection.setAutocommit(true); + connection.setAutocommitDmlMode(AutocommitDmlMode.PARTITIONED_NON_ATOMIC); + connection.executeUpdate(Statement.of(statementTagHint("tag-4") + sql)); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + assertEquals( + "tag-4", + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getRequestTag()); + assertEquals( + "", + mockSpanner + .getRequestsOfType(ExecuteSqlRequest.class) + .get(0) + .getRequestOptions() + .getTransactionTag()); + + mockSpanner.clearRequests(); + } + } + + @Test + public void testBatchUpdate_StatementTagHint() { + String sql = INSERT_STATEMENT.getSql(); + + try (Connection connection = createConnection()) { + for (boolean autocommit : new boolean[] {true, false}) { + connection.setAutocommit(autocommit); + connection.executeBatchUpdate( + Collections.singletonList(Statement.of(statementTagHint("tag-3") + sql))); + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteBatchDmlRequest.class)); + assertEquals( + "tag-3", + mockSpanner + .getRequestsOfType(ExecuteBatchDmlRequest.class) + .get(0) + .getRequestOptions() + .getRequestTag()); + assertEquals( + "", + mockSpanner + .getRequestsOfType(ExecuteBatchDmlRequest.class) + .get(0) + .getRequestOptions() + .getTransactionTag()); + + mockSpanner.clearRequests(); + } + } + } + + private String statementTagHint(String tag) { + switch (dialect) { + case POSTGRESQL: + return "/*@statement_tag='" + tag + "'*/"; + case GOOGLE_STANDARD_SQL: + default: + return "@{statement_tag='" + tag + "'}"; + } + } + + private String prefix() { + return dialect == Dialect.POSTGRESQL ? "SPANNER." : ""; + } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITEmulatorConcurrentTransactionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITEmulatorConcurrentTransactionsTest.java new file mode 100644 index 00000000000..95d188f4f0a --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITEmulatorConcurrentTransactionsTest.java @@ -0,0 +1,176 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.connection.it; + +import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.Mutation; +import com.google.cloud.spanner.ParallelIntegrationTest; +import com.google.cloud.spanner.ResultSet; +import com.google.cloud.spanner.Statement; +import com.google.cloud.spanner.connection.Connection; +import com.google.cloud.spanner.connection.ITAbstractSpannerTest; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@Category(ParallelIntegrationTest.class) +@RunWith(JUnit4.class) +public class ITEmulatorConcurrentTransactionsTest extends ITAbstractSpannerTest { + @Override + public void appendConnectionUri(StringBuilder uri) { + uri.append(";autoConfigEmulator=true;autoCommit=false"); + } + + @Override + public boolean doCreateDefaultTestTable() { + return true; + } + + @BeforeClass + public static void onlyOnEmulator() { + assumeTrue("This test is only intended for the emulator", isUsingEmulator()); + } + + @Before + public void clearTestData() { + try (ITConnection connection = createConnection()) { + connection.bufferedWrite(Mutation.delete("TEST", KeySet.all())); + connection.commit(); + } + } + + @Test + public void testInnerTransaction() { + try (Connection connection1 = createConnection(); + Connection connection2 = createConnection()) { + // Run two transactions: + // 1. First start one transaction. + // 2. Then start another transaction and commit that transaction. + // 3. Then commit the first transaction. + assertEquals( + 1, + connection1.executeUpdate(Statement.of("insert into test (id, name) values (1, 'One')"))); + assertEquals( + 1, + connection2.executeUpdate(Statement.of("insert into test (id, name) values (2, 'Two')"))); + connection2.commit(); + connection1.commit(); + } + verifyRowCount(2L); + } + + @Test + public void testOverlappingTransactions() { + try (Connection connection1 = createConnection(); + Connection connection2 = createConnection()) { + // Run two transactions: + // 1. First start one transaction. + // 2. Then start another transaction. + // 3. Then commit the first transaction. + // 4. Then commit the second transaction. + assertEquals( + 1, + connection1.executeUpdate(Statement.of("insert into test (id, name) values (1, 'One')"))); + assertEquals( + 1, + connection2.executeUpdate(Statement.of("insert into test (id, name) values (2, 'Two')"))); + connection1.commit(); + connection2.commit(); + } + verifyRowCount(2L); + } + + @Test + public void testSingleThreadRandomTransactions() { + AtomicInteger numRowsInserted = new AtomicInteger(); + runRandomTransactions(numRowsInserted); + verifyRowCount(numRowsInserted.get()); + } + + @Test + public void testMultiThreadedRandomTransactions() throws InterruptedException { + int numThreads = ThreadLocalRandom.current().nextInt(10) + 5; + ExecutorService executor = Executors.newFixedThreadPool(numThreads); + AtomicInteger numRowsInserted = new AtomicInteger(); + for (int thread = 0; thread < numThreads; thread++) { + executor.submit(() -> runRandomTransactions(numRowsInserted)); + } + executor.shutdown(); + assertTrue(executor.awaitTermination(30L, TimeUnit.SECONDS)); + verifyRowCount(numRowsInserted.get()); + } + + private void runRandomTransactions(AtomicInteger numRowsInserted) { + int numTransactions = ThreadLocalRandom.current().nextInt(25) + 5; + String sql = "insert into test (id, name) values (@id, 'test')"; + List connections = new ArrayList<>(numTransactions); + try { + for (int i = 0; i < numTransactions; i++) { + connections.add(createConnection()); + } + while (!connections.isEmpty()) { + int index = ThreadLocalRandom.current().nextInt(connections.size()); + Connection connection = connections.get(index); + if (ThreadLocalRandom.current().nextInt(10) < 3) { + connection.commit(); + connection.close(); + assertEquals(connection, connections.remove(index)); + } else { + assertEquals( + 1, + connection.executeUpdate( + Statement.newBuilder(sql) + .bind("id") + .to(ThreadLocalRandom.current().nextLong()) + .build())); + numRowsInserted.incrementAndGet(); + } + } + } finally { + for (Connection connection : connections) { + connection.close(); + } + } + } + + private void verifyRowCount(long expected) { + try (Connection connection = createConnection()) { + try (ResultSet resultSet = + connection.executeQuery(Statement.of("select count(1) from test"))) { + assertTrue(resultSet.next()); + assertEquals(expected, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + } +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java index efbffcfa899..6ffb0e1ca68 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java @@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeFalse; import com.google.cloud.spanner.AbortedException; import com.google.cloud.spanner.Database; @@ -59,6 +60,11 @@ public class ITClosedSessionTest { @BeforeClass public static void setUpDatabase() { + // For multiplexed sessions, it will never be invalidated by the server and hence the client + // will never receive an exception with code NOT_FOUND and the text 'Session not found'. + assumeFalse( + env.getTestHelper().getOptions().getSessionPoolOptions().getUseMultiplexedSession()); + // Empty database. db = env.getTestHelper().createTestDatabase(); client = (DatabaseClientWithClosedSessionImpl) env.getTestHelper().getDatabaseClient(db); diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index 0bbbb06ae7a..8719bed073a 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.64.0 + 6.65.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.64.0 + 6.65.0 diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml index 4f37e87882f..1b4669dec47 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.64.0 + 6.65.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.64.0 + 6.65.0 diff --git a/grpc-google-cloud-spanner-executor-v1/pom.xml b/grpc-google-cloud-spanner-executor-v1/pom.xml index d0e574942cd..1badbea9d44 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.64.0 + 6.65.0 grpc-google-cloud-spanner-executor-v1 GRPC library for google-cloud-spanner com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml index 4bb969ad45e..36b613acd8b 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.64.0 + 6.65.0 grpc-google-cloud-spanner-v1 GRPC library for grpc-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 diff --git a/pom.xml b/pom.xml index 00c407149eb..1f64799e749 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-spanner-parent pom - 6.64.0 + 6.65.0 Google Cloud Spanner Parent https://github.com/googleapis/java-spanner @@ -14,7 +14,7 @@ com.google.cloud sdk-platform-java-config - 3.28.1 + 3.29.0 @@ -61,47 +61,47 @@ com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-executor-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-executor-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.64.0 + 6.65.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.64.0 + 6.65.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.64.0 + 6.65.0 com.google.cloud google-cloud-spanner - 6.64.0 + 6.65.0 diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml index 53693abc677..58a1fd5b53f 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.64.0 + 6.65.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.64.0 + 6.65.0 diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java index 2e53c120215..03fe9603fd2 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java index d8c35b5b084..75527a2c9e3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java index 6aa3731f217..5a2963f8b9f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfoOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface BackupInfoOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java index 3a51c8dbecb..bd25d67c5ab 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface BackupOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java index 5bc7b7041c3..2901738e77a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public final class BackupProto { diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java index cb876487e5f..e2b2ad93d01 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public final class CommonProto { diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java index be4686b9636..7f2f0db1d12 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java index 1054af9a00c..eb15f76cee4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CopyBackupEncryptionConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java index 0343cb71996..11cc6e03107 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java index f5cb5f5501b..80229fdd762 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CopyBackupMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java index cb0a37356b8..7b95919bd1e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java index 9a2022a3e7e..5481d8c278e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CopyBackupRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java index 19d1bd405a1..9e09936de85 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java index d9db127641b..7c639eb2a94 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CreateBackupEncryptionConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java index 702f5f11ebd..a3bd040f9b3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java index c59449fe7b4..89f2d482ede 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CreateBackupMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java index 3c20d5eaa3f..ab34f8aa33a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java index 43381990f80..63535e00207 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CreateBackupRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java index 968049a4ce0..bfb92410086 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java index 4a74cfa4e5f..b67d3f8bfe1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CreateDatabaseMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java index 8059b3ae53e..57b155ae65a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java index 61caab08428..db215630c65 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface CreateDatabaseRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java index 2842ec2b468..0fe161abbbe 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java index 93cb88c18d1..3ef5ebce606 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseDialect.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java index 72c3d2e2ba5..18345d9ad61 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface DatabaseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java index c3b65f4705e..ccfc053b9fe 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java index 512a0227136..aa452bbf47a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRoleOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface DatabaseRoleOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java index 38f1b7e775c..3e376aaf268 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java index 942e6ef7374..4d6b46ba11c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface DdlStatementActionInfoOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java index 83cad340f12..6b3f02c8c7a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java index cfad9f82916..19f29594533 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface DeleteBackupRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java index d5743917233..9d7823c8ef0 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java index fe54af60372..9df173723f4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface DropDatabaseRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java index 0ba0b77e092..4b7a16a4463 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java index 8969328bfc3..7945052b3d4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface EncryptionConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java index 5e9c0316ea1..7fcbe830322 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java index caac5695fc0..ad0cd0444a9 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfoOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface EncryptionInfoOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java index e93406bcbe1..754018f2c5f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java index 2c4aa5f2c56..66d554f6861 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface GetBackupRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java index 3113d4cbc0b..5034036df87 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java index b4483afb7cd..81aaaa1b78b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface GetDatabaseDdlRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java index dbbf4bab797..51e682de7a1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java index 5221e50c10b..4fd5397ac64 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface GetDatabaseDdlResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java index b9442cb729f..5c58ad99516 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java index d56c35bfda7..3b1246591a0 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface GetDatabaseRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java index 11a24abfe7e..bfc50f4d21f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java index ed19f212938..b2487386273 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListBackupOperationsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java index 8b1c9c1dc6f..e47a71e4e36 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java index d88a6ee3d1c..9a3f8544c59 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListBackupOperationsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java index 9c2a1b016b2..247a933977c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java index d17f1b084b1..7af3cb176db 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListBackupsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java index f1c2272adb6..acf9ccce6b7 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java index 4c9b67dc197..dc7e7aa1530 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListBackupsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java index 6f6a5a1e1a4..3e974d3c90b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java index 5fc66e2edae..26c9fdad785 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabaseOperationsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java index 1fb7ea2d5b0..6142a9887cd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java index 7b0b82fcd23..13215e0424a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabaseOperationsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java index 201c1e081a5..b1d185e6521 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java index 29424019402..9ee520170e8 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabaseRolesRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java index acf91c8815d..ad74092d04c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java index c5b07544438..29b2dc08e83 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabaseRolesResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java index 5b150cb9216..ae7da65a373 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java index af24bf191c1..0551fd29182 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabasesRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java index 210b5b33d54..bb5cb1c2ffc 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java index a9d6f414f2f..41dcbb25569 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface ListDatabasesResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java index 7b752df354b..907ec5d3b86 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java index 7e4eb1c14d5..c6a5146db88 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgressOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface OperationProgressOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java index b646b3c7a9b..283ffd4fedf 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java index 4002005d204..0587fd0d134 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface OptimizeRestoredDatabaseMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java index 3624217acaa..296a12845dc 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java index 47e9875866a..04d44766c16 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface RestoreDatabaseEncryptionConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java index 3a02aa08196..68896869e46 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java index 879d866f9d1..1265196c52f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface RestoreDatabaseMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java index 82b435229fe..17e2e870e38 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java index cb6f5aa907d..b80692a5d44 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface RestoreDatabaseRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java index 92e337c7be0..29d428a863f 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java index 89ecb470a78..1419ad13b7d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface RestoreInfoOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java index b3d863f1de2..d8bd9aaaf03 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreSourceType.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java index 7b3af91a2d2..858bfefa32d 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public final class SpannerDatabaseAdminProto { diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java index 7c9e9fa5031..a01f91fef90 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java index 919136018f7..c0039b9184c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/backup.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface UpdateBackupRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java index 43c22ecea51..7382889bcca 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java index f1002ace388..edd7cdd12f5 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface UpdateDatabaseDdlMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java index e9b25fa464b..63da4ea5b60 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java index a68e547bf21..6c0d078fda4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface UpdateDatabaseDdlRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java index 6f7b9c82d8c..5323862fdb4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java index 6f04b7549cd..d41b3e92aba 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface UpdateDatabaseMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java index 6255150ade4..c712da230f9 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; /** diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java index bd5bc8ef98d..41bdf84d50c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.database.v1; public interface UpdateDatabaseRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml index 2a272d3cc41..c2ceca34c4d 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.64.0 + 6.65.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.64.0 + 6.65.0 diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java index 0e706fdefc8..aad1848f575 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java index 4fb3c8a0e69..04bb5155afe 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/AutoscalingConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface AutoscalingConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java index 9872dac54c1..e0306f96a2e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CommonProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public final class CommonProto { @@ -47,13 +47,17 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "perationProgress\022\030\n\020progress_percent\030\001 \001" + "(\005\022.\n\nstart_time\030\002 \001(\0132\032.google.protobuf" + ".Timestamp\022,\n\010end_time\030\003 \001(\0132\032.google.pr" - + "otobuf.TimestampB\375\001\n$com.google.spanner." - + "admin.instance.v1B\013CommonProtoP\001ZFcloud." - + "google.com/go/spanner/admin/instance/api" - + "v1/instancepb;instancepb\252\002&Google.Cloud." - + "Spanner.Admin.Instance.V1\312\002&Google\\Cloud" - + "\\Spanner\\Admin\\Instance\\V1\352\002+Google::Clo" - + "ud::Spanner::Admin::Instance::V1b\006proto3" + + "otobuf.Timestamp*w\n\021FulfillmentPeriod\022\"\n" + + "\036FULFILLMENT_PERIOD_UNSPECIFIED\020\000\022\035\n\031FUL" + + "FILLMENT_PERIOD_NORMAL\020\001\022\037\n\033FULFILLMENT_" + + "PERIOD_EXTENDED\020\002B\375\001\n$com.google.spanner" + + ".admin.instance.v1B\013CommonProtoP\001ZFcloud" + + ".google.com/go/spanner/admin/instance/ap" + + "iv1/instancepb;instancepb\252\002&Google.Cloud" + + ".Spanner.Admin.Instance.V1\312\002&Google\\Clou" + + "d\\Spanner\\Admin\\Instance\\V1\352\002+Google::Cl" + + "oud::Spanner::Admin::Instance::V1b\006proto" + + "3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java index 90b291a6d7a..00c08ba9796 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java index 60afae919aa..28412d72a6a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstanceConfigMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java index 9affa283aa0..36c8ca345e4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java index 43aa88a39d2..364c98b73c4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstanceConfigRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java index 0a51bdc8d48..64a7fdf1a1b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** @@ -39,7 +39,9 @@ private CreateInstanceMetadata(com.google.protobuf.GeneratedMessageV3.Builder super(builder); } - private CreateInstanceMetadata() {} + private CreateInstanceMetadata() { + expectedFulfillmentPeriod_ = 0; + } @java.lang.Override @SuppressWarnings({"unused"}) @@ -263,6 +265,46 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + public static final int EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER = 5; + private int expectedFulfillmentPeriod_ = 0; + /** + * + * + *

    +   * The expected fulfillment period of this create operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + @java.lang.Override + public int getExpectedFulfillmentPeriodValue() { + return expectedFulfillmentPeriod_; + } + /** + * + * + *
    +   * The expected fulfillment period of this create operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod() { + com.google.spanner.admin.instance.v1.FulfillmentPeriod result = + com.google.spanner.admin.instance.v1.FulfillmentPeriod.forNumber( + expectedFulfillmentPeriod_); + return result == null + ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -289,6 +331,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(4, getEndTime()); } + if (expectedFulfillmentPeriod_ + != com.google.spanner.admin.instance.v1.FulfillmentPeriod.FULFILLMENT_PERIOD_UNSPECIFIED + .getNumber()) { + output.writeEnum(5, expectedFulfillmentPeriod_); + } getUnknownFields().writeTo(output); } @@ -310,6 +357,11 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000008) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getEndTime()); } + if (expectedFulfillmentPeriod_ + != com.google.spanner.admin.instance.v1.FulfillmentPeriod.FULFILLMENT_PERIOD_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(5, expectedFulfillmentPeriod_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -342,6 +394,7 @@ public boolean equals(final java.lang.Object obj) { if (hasEndTime()) { if (!getEndTime().equals(other.getEndTime())) return false; } + if (expectedFulfillmentPeriod_ != other.expectedFulfillmentPeriod_) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -369,6 +422,8 @@ public int hashCode() { hash = (37 * hash) + END_TIME_FIELD_NUMBER; hash = (53 * hash) + getEndTime().hashCode(); } + hash = (37 * hash) + EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER; + hash = (53 * hash) + expectedFulfillmentPeriod_; hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -542,6 +597,7 @@ public Builder clear() { endTimeBuilder_.dispose(); endTimeBuilder_ = null; } + expectedFulfillmentPeriod_ = 0; return this; } @@ -595,6 +651,9 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.CreateInstanceMe result.endTime_ = endTimeBuilder_ == null ? endTime_ : endTimeBuilder_.build(); to_bitField0_ |= 0x00000008; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.expectedFulfillmentPeriod_ = expectedFulfillmentPeriod_; + } result.bitField0_ |= to_bitField0_; } @@ -656,6 +715,9 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.CreateInstanceMeta if (other.hasEndTime()) { mergeEndTime(other.getEndTime()); } + if (other.expectedFulfillmentPeriod_ != 0) { + setExpectedFulfillmentPeriodValue(other.getExpectedFulfillmentPeriodValue()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -706,6 +768,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000008; break; } // case 34 + case 40: + { + expectedFulfillmentPeriod_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 40 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1494,6 +1562,105 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } + private int expectedFulfillmentPeriod_ = 0; + /** + * + * + *
    +     * The expected fulfillment period of this create operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + @java.lang.Override + public int getExpectedFulfillmentPeriodValue() { + return expectedFulfillmentPeriod_; + } + /** + * + * + *
    +     * The expected fulfillment period of this create operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @param value The enum numeric value on the wire for expectedFulfillmentPeriod to set. + * @return This builder for chaining. + */ + public Builder setExpectedFulfillmentPeriodValue(int value) { + expectedFulfillmentPeriod_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * + * + *
    +     * The expected fulfillment period of this create operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod() { + com.google.spanner.admin.instance.v1.FulfillmentPeriod result = + com.google.spanner.admin.instance.v1.FulfillmentPeriod.forNumber( + expectedFulfillmentPeriod_); + return result == null + ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED + : result; + } + /** + * + * + *
    +     * The expected fulfillment period of this create operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @param value The expectedFulfillmentPeriod to set. + * @return This builder for chaining. + */ + public Builder setExpectedFulfillmentPeriod( + com.google.spanner.admin.instance.v1.FulfillmentPeriod value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + expectedFulfillmentPeriod_ = value.getNumber(); + onChanged(); + return this; + } + /** + * + * + *
    +     * The expected fulfillment period of this create operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return This builder for chaining. + */ + public Builder clearExpectedFulfillmentPeriod() { + bitField0_ = (bitField0_ & ~0x00000010); + expectedFulfillmentPeriod_ = 0; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java index 36b6e8ef001..2959bdc10b9 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstanceMetadataOrBuilder @@ -175,4 +175,31 @@ public interface CreateInstanceMetadataOrBuilder * .google.protobuf.Timestamp end_time = 4; */ com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder(); + + /** + * + * + *
    +   * The expected fulfillment period of this create operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + int getExpectedFulfillmentPeriodValue(); + /** + * + * + *
    +   * The expected fulfillment period of this create operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod(); } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java index 1e2431b6ae3..db6b1ba2d3f 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java index f29d343bb48..6ec2cb703d6 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstancePartitionMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java index 636a12c5ce9..2e28b053b4d 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java index fae12b0bfe5..f2a62fd61c9 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstancePartitionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstancePartitionRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java index 08c8730eff5..53c0d5bfcd7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java index 94c29d1eeca..86120114879 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface CreateInstanceRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java index d1712540674..74669a5c854 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java index 2e52cd21234..b33735cc031 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface DeleteInstanceConfigRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java index c4186941ca4..82386505414 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java index 83b455310a4..62a0f71e13e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstancePartitionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface DeleteInstancePartitionRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java index d3ab4d260d9..f5bf320cf6b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java index 7f0f12b71ea..27c43ab6c1b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface DeleteInstanceRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java new file mode 100644 index 00000000000..92d5f2aa30b --- /dev/null +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/FulfillmentPeriod.java @@ -0,0 +1,183 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/instance/v1/common.proto + +// Protobuf Java Version: 3.25.3 +package com.google.spanner.admin.instance.v1; + +/** + * + * + *
    + * Indicates the expected fulfillment period of an operation.
    + * 
    + * + * Protobuf enum {@code google.spanner.admin.instance.v1.FulfillmentPeriod} + */ +public enum FulfillmentPeriod implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
    +   * Not specified.
    +   * 
    + * + * FULFILLMENT_PERIOD_UNSPECIFIED = 0; + */ + FULFILLMENT_PERIOD_UNSPECIFIED(0), + /** + * + * + *
    +   * Normal fulfillment period. The operation is expected to complete within
    +   * minutes.
    +   * 
    + * + * FULFILLMENT_PERIOD_NORMAL = 1; + */ + FULFILLMENT_PERIOD_NORMAL(1), + /** + * + * + *
    +   * Extended fulfillment period. It can take up to an hour for the operation
    +   * to complete.
    +   * 
    + * + * FULFILLMENT_PERIOD_EXTENDED = 2; + */ + FULFILLMENT_PERIOD_EXTENDED(2), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
    +   * Not specified.
    +   * 
    + * + * FULFILLMENT_PERIOD_UNSPECIFIED = 0; + */ + public static final int FULFILLMENT_PERIOD_UNSPECIFIED_VALUE = 0; + /** + * + * + *
    +   * Normal fulfillment period. The operation is expected to complete within
    +   * minutes.
    +   * 
    + * + * FULFILLMENT_PERIOD_NORMAL = 1; + */ + public static final int FULFILLMENT_PERIOD_NORMAL_VALUE = 1; + /** + * + * + *
    +   * Extended fulfillment period. It can take up to an hour for the operation
    +   * to complete.
    +   * 
    + * + * FULFILLMENT_PERIOD_EXTENDED = 2; + */ + public static final int FULFILLMENT_PERIOD_EXTENDED_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static FulfillmentPeriod valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static FulfillmentPeriod forNumber(int value) { + switch (value) { + case 0: + return FULFILLMENT_PERIOD_UNSPECIFIED; + case 1: + return FULFILLMENT_PERIOD_NORMAL; + case 2: + return FULFILLMENT_PERIOD_EXTENDED; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public FulfillmentPeriod findValueByNumber(int number) { + return FulfillmentPeriod.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.spanner.admin.instance.v1.CommonProto.getDescriptor().getEnumTypes().get(0); + } + + private static final FulfillmentPeriod[] VALUES = values(); + + public static FulfillmentPeriod valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private FulfillmentPeriod(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.spanner.admin.instance.v1.FulfillmentPeriod) +} diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java index 6427160ee95..204b648031f 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java index fac241e23dc..d5773edcbd8 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface GetInstanceConfigRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java index 2181f408aab..fda9c8e5d12 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java index fd816ce8e7a..9f4adeeac7e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstancePartitionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface GetInstancePartitionRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java index 78cbfa579a2..a077bb80513 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java index d46308742c9..56906b93f88 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface GetInstanceRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java index 94d3654af77..03f4081280b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java index 83b55e315a9..10ad9945d8a 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java index b7f4c4cf5a3..ee8763d47b7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface InstanceConfigOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java index 3db4ec97076..1ca3c2a1c29 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface InstanceOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java index b4ca244120f..5c765054240 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartition.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java index d8c91e9ab7f..24f2d00bbfa 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstancePartitionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface InstancePartitionOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java index ae3eb2679b6..b27aea20d29 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java index 32099b3c731..036da7e53d4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstanceConfigOperationsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java index 6d23169d773..9ff2077993b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java index ae8e52e6062..74a0e09c69b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstanceConfigOperationsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java index 0311a7d86d7..7e2d4cb7493 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java index a9d9ad22d89..400d000f27b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstanceConfigsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java index 1833cc83c12..fba36077b04 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java index 61cc6b2a436..6aa12ea15ae 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstanceConfigsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java index 4d7bc75f014..c27e8bdd6c3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java index e6f3e31013f..7a14fa09645 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancePartitionOperationsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java index 847e20cd187..69683f9e8d7 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java index f0d7b224276..697ab046f39 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionOperationsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancePartitionOperationsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java index 617de48ebe3..d985906ce1d 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java index 4258e48f6ad..7d457eb1ee2 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancePartitionsRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java index 12de299c491..232e74b7c3b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java index c5b595b14df..c3c66230d90 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancePartitionsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancePartitionsResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java index 0a4bc5959f5..24de0923825 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java index db6046fab89..90e17edfedf 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancesRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java index 806f77bfe9f..f8974780add 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java index 38b12c3faa4..6d6269f2c0e 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ListInstancesResponseOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java index 828eab461de..5cac14590ba 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java index e0855d53677..a2cbadfa958 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgressOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/common.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface OperationProgressOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java index 98ead9cec9d..de3200c43d1 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** Protobuf type {@code google.spanner.admin.instance.v1.ReplicaInfo} */ diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java index 3018d01a0bf..ebcefeef9b9 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfoOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface ReplicaInfoOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java index 01f559e1cb2..8b86bec104c 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public final class SpannerInstanceAdminProto { @@ -304,221 +304,226 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "ce.v1.InstanceB\003\340A\002\0223\n\nfield_mask\030\002 \001(\0132" + "\032.google.protobuf.FieldMaskB\003\340A\002\"N\n\025Dele" + "teInstanceRequest\0225\n\004name\030\001 \001(\tB\'\340A\002\372A!\n" - + "\037spanner.googleapis.com/Instance\"\345\001\n\026Cre" + + "\037spanner.googleapis.com/Instance\"\277\002\n\026Cre" + "ateInstanceMetadata\022<\n\010instance\030\001 \001(\0132*." + "google.spanner.admin.instance.v1.Instanc" + "e\022.\n\nstart_time\030\002 \001(\0132\032.google.protobuf." + "Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.google." + "protobuf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.g" - + "oogle.protobuf.Timestamp\"\345\001\n\026UpdateInsta" - + "nceMetadata\022<\n\010instance\030\001 \001(\0132*.google.s" - + "panner.admin.instance.v1.Instance\022.\n\nsta" - + "rt_time\030\002 \001(\0132\032.google.protobuf.Timestam" - + "p\022/\n\013cancel_time\030\003 \001(\0132\032.google.protobuf" - + ".Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google.pr" - + "otobuf.Timestamp\"\341\001\n\034CreateInstanceConfi" - + "gMetadata\022I\n\017instance_config\030\001 \001(\01320.goo" - + "gle.spanner.admin.instance.v1.InstanceCo" - + "nfig\022E\n\010progress\030\002 \001(\01323.google.spanner." - + "admin.instance.v1.OperationProgress\022/\n\013c" - + "ancel_time\030\003 \001(\0132\032.google.protobuf.Times" - + "tamp\"\341\001\n\034UpdateInstanceConfigMetadata\022I\n" - + "\017instance_config\030\001 \001(\01320.google.spanner." - + "admin.instance.v1.InstanceConfig\022E\n\010prog" - + "ress\030\002 \001(\01323.google.spanner.admin.instan" - + "ce.v1.OperationProgress\022/\n\013cancel_time\030\003" - + " \001(\0132\032.google.protobuf.Timestamp\"\216\005\n\021Ins" - + "tancePartition\022\021\n\004name\030\001 \001(\tB\003\340A\002\022=\n\006con" - + "fig\030\002 \001(\tB-\340A\002\372A\'\n%spanner.googleapis.co" - + "m/InstanceConfig\022\031\n\014display_name\030\003 \001(\tB\003" - + "\340A\002\022\024\n\nnode_count\030\005 \001(\005H\000\022\032\n\020processing_" - + "units\030\006 \001(\005H\000\022M\n\005state\030\007 \001(\01629.google.sp" + + "oogle.protobuf.Timestamp\022X\n\033expected_ful" + + "fillment_period\030\005 \001(\01623.google.spanner.a" + + "dmin.instance.v1.FulfillmentPeriod\"\277\002\n\026U" + + "pdateInstanceMetadata\022<\n\010instance\030\001 \001(\0132" + + "*.google.spanner.admin.instance.v1.Insta" + + "nce\022.\n\nstart_time\030\002 \001(\0132\032.google.protobu" + + "f.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.googl" + + "e.protobuf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032" + + ".google.protobuf.Timestamp\022X\n\033expected_f" + + "ulfillment_period\030\005 \001(\01623.google.spanner" + + ".admin.instance.v1.FulfillmentPeriod\"\341\001\n" + + "\034CreateInstanceConfigMetadata\022I\n\017instanc" + + "e_config\030\001 \001(\01320.google.spanner.admin.in" + + "stance.v1.InstanceConfig\022E\n\010progress\030\002 \001" + + "(\01323.google.spanner.admin.instance.v1.Op" + + "erationProgress\022/\n\013cancel_time\030\003 \001(\0132\032.g" + + "oogle.protobuf.Timestamp\"\341\001\n\034UpdateInsta" + + "nceConfigMetadata\022I\n\017instance_config\030\001 \001" + + "(\01320.google.spanner.admin.instance.v1.In" + + "stanceConfig\022E\n\010progress\030\002 \001(\01323.google." + + "spanner.admin.instance.v1.OperationProgr" + + "ess\022/\n\013cancel_time\030\003 \001(\0132\032.google.protob" + + "uf.Timestamp\"\216\005\n\021InstancePartition\022\021\n\004na" + + "me\030\001 \001(\tB\003\340A\002\022=\n\006config\030\002 \001(\tB-\340A\002\372A\'\n%s" + + "panner.googleapis.com/InstanceConfig\022\031\n\014" + + "display_name\030\003 \001(\tB\003\340A\002\022\024\n\nnode_count\030\005 " + + "\001(\005H\000\022\032\n\020processing_units\030\006 \001(\005H\000\022M\n\005sta" + + "te\030\007 \001(\01629.google.spanner.admin.instance" + + ".v1.InstancePartition.StateB\003\340A\003\0224\n\013crea" + + "te_time\030\010 \001(\0132\032.google.protobuf.Timestam" + + "pB\003\340A\003\0224\n\013update_time\030\t \001(\0132\032.google.pro" + + "tobuf.TimestampB\003\340A\003\022\"\n\025referencing_data" + + "bases\030\n \003(\tB\003\340A\003\022 \n\023referencing_backups\030" + + "\013 \003(\tB\003\340A\003\022\014\n\004etag\030\014 \001(\t\"7\n\005State\022\025\n\021STA" + + "TE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020" + + "\002:~\352A{\n(spanner.googleapis.com/InstanceP" + + "artition\022Oprojects/{project}/instances/{" + + "instance}/instancePartitions/{instance_p" + + "artition}B\022\n\020compute_capacity\"\201\002\n\037Create" + + "InstancePartitionMetadata\022O\n\022instance_pa" + + "rtition\030\001 \001(\01323.google.spanner.admin.ins" + + "tance.v1.InstancePartition\022.\n\nstart_time" + + "\030\002 \001(\0132\032.google.protobuf.Timestamp\022/\n\013ca" + + "ncel_time\030\003 \001(\0132\032.google.protobuf.Timest" + + "amp\022,\n\010end_time\030\004 \001(\0132\032.google.protobuf." + + "Timestamp\"\323\001\n\036CreateInstancePartitionReq" + + "uest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.go" + + "ogleapis.com/Instance\022\"\n\025instance_partit" + + "ion_id\030\002 \001(\tB\003\340A\002\022T\n\022instance_partition\030" + + "\003 \001(\01323.google.spanner.admin.instance.v1" + + ".InstancePartitionB\003\340A\002\"n\n\036DeleteInstanc" + + "ePartitionRequest\022>\n\004name\030\001 \001(\tB0\340A\002\372A*\n" + + "(spanner.googleapis.com/InstancePartitio" + + "n\022\014\n\004etag\030\002 \001(\t\"]\n\033GetInstancePartitionR" + + "equest\022>\n\004name\030\001 \001(\tB0\340A\002\372A*\n(spanner.go" + + "ogleapis.com/InstancePartition\"\253\001\n\036Updat" + + "eInstancePartitionRequest\022T\n\022instance_pa" + + "rtition\030\001 \001(\01323.google.spanner.admin.ins" + + "tance.v1.InstancePartitionB\003\340A\002\0223\n\nfield" + + "_mask\030\002 \001(\0132\032.google.protobuf.FieldMaskB" + + "\003\340A\002\"\201\002\n\037UpdateInstancePartitionMetadata" + + "\022O\n\022instance_partition\030\001 \001(\01323.google.sp" + "anner.admin.instance.v1.InstancePartitio" - + "n.StateB\003\340A\003\0224\n\013create_time\030\010 \001(\0132\032.goog" - + "le.protobuf.TimestampB\003\340A\003\0224\n\013update_tim" - + "e\030\t \001(\0132\032.google.protobuf.TimestampB\003\340A\003" - + "\022\"\n\025referencing_databases\030\n \003(\tB\003\340A\003\022 \n\023" - + "referencing_backups\030\013 \003(\tB\003\340A\003\022\014\n\004etag\030\014" - + " \001(\t\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010" - + "CREATING\020\001\022\t\n\005READY\020\002:~\352A{\n(spanner.goog" - + "leapis.com/InstancePartition\022Oprojects/{" - + "project}/instances/{instance}/instancePa" - + "rtitions/{instance_partition}B\022\n\020compute" - + "_capacity\"\201\002\n\037CreateInstancePartitionMet" - + "adata\022O\n\022instance_partition\030\001 \001(\01323.goog" - + "le.spanner.admin.instance.v1.InstancePar" - + "tition\022.\n\nstart_time\030\002 \001(\0132\032.google.prot" - + "obuf.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.go" - + "ogle.protobuf.Timestamp\022,\n\010end_time\030\004 \001(" - + "\0132\032.google.protobuf.Timestamp\"\323\001\n\036Create" - + "InstancePartitionRequest\0227\n\006parent\030\001 \001(\t" - + "B\'\340A\002\372A!\n\037spanner.googleapis.com/Instanc" - + "e\022\"\n\025instance_partition_id\030\002 \001(\tB\003\340A\002\022T\n" - + "\022instance_partition\030\003 \001(\01323.google.spann" - + "er.admin.instance.v1.InstancePartitionB\003" - + "\340A\002\"n\n\036DeleteInstancePartitionRequest\022>\n" - + "\004name\030\001 \001(\tB0\340A\002\372A*\n(spanner.googleapis." - + "com/InstancePartition\022\014\n\004etag\030\002 \001(\t\"]\n\033G" - + "etInstancePartitionRequest\022>\n\004name\030\001 \001(\t" - + "B0\340A\002\372A*\n(spanner.googleapis.com/Instanc" - + "ePartition\"\253\001\n\036UpdateInstancePartitionRe" - + "quest\022T\n\022instance_partition\030\001 \001(\01323.goog" - + "le.spanner.admin.instance.v1.InstancePar" - + "titionB\003\340A\002\0223\n\nfield_mask\030\002 \001(\0132\032.google" - + ".protobuf.FieldMaskB\003\340A\002\"\201\002\n\037UpdateInsta" - + "ncePartitionMetadata\022O\n\022instance_partiti" - + "on\030\001 \001(\01323.google.spanner.admin.instance" - + ".v1.InstancePartition\022.\n\nstart_time\030\002 \001(" - + "\0132\032.google.protobuf.Timestamp\022/\n\013cancel_" - + "time\030\003 \001(\0132\032.google.protobuf.Timestamp\022," - + "\n\010end_time\030\004 \001(\0132\032.google.protobuf.Times" - + "tamp\"\305\001\n\035ListInstancePartitionsRequest\0227" - + "\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleap" - + "is.com/Instance\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npa" - + "ge_token\030\003 \001(\t\022D\n\033instance_partition_dea" - + "dline\030\004 \001(\0132\032.google.protobuf.TimestampB" - + "\003\340A\001\"\240\001\n\036ListInstancePartitionsResponse\022" - + "P\n\023instance_partitions\030\001 \003(\01323.google.sp" + + "n\022.\n\nstart_time\030\002 \001(\0132\032.google.protobuf." + + "Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.google." + + "protobuf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.g" + + "oogle.protobuf.Timestamp\"\305\001\n\035ListInstanc" + + "ePartitionsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372" + + "A!\n\037spanner.googleapis.com/Instance\022\021\n\tp" + + "age_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022D\n\033in" + + "stance_partition_deadline\030\004 \001(\0132\032.google" + + ".protobuf.TimestampB\003\340A\001\"\240\001\n\036ListInstanc" + + "ePartitionsResponse\022P\n\023instance_partitio" + + "ns\030\001 \003(\01323.google.spanner.admin.instance" + + ".v1.InstancePartition\022\027\n\017next_page_token" + + "\030\002 \001(\t\022\023\n\013unreachable\030\003 \003(\t\"\355\001\n&ListInst" + + "ancePartitionOperationsRequest\0227\n\006parent" + + "\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/I" + + "nstance\022\023\n\006filter\030\002 \001(\tB\003\340A\001\022\026\n\tpage_siz" + + "e\030\003 \001(\005B\003\340A\001\022\027\n\npage_token\030\004 \001(\tB\003\340A\001\022D\n" + + "\033instance_partition_deadline\030\005 \001(\0132\032.goo" + + "gle.protobuf.TimestampB\003\340A\001\"\236\001\n\'ListInst" + + "ancePartitionOperationsResponse\0221\n\nopera" + + "tions\030\001 \003(\0132\035.google.longrunning.Operati" + + "on\022\027\n\017next_page_token\030\002 \001(\t\022\'\n\037unreachab" + + "le_instance_partitions\030\003 \003(\t2\316%\n\rInstanc" + + "eAdmin\022\314\001\n\023ListInstanceConfigs\022<.google." + + "spanner.admin.instance.v1.ListInstanceCo" + + "nfigsRequest\032=.google.spanner.admin.inst" + + "ance.v1.ListInstanceConfigsResponse\"8\332A\006" + + "parent\202\323\344\223\002)\022\'/v1/{parent=projects/*}/in" + + "stanceConfigs\022\271\001\n\021GetInstanceConfig\022:.go" + + "ogle.spanner.admin.instance.v1.GetInstan" + + "ceConfigRequest\0320.google.spanner.admin.i" + + "nstance.v1.InstanceConfig\"6\332A\004name\202\323\344\223\002)" + + "\022\'/v1/{name=projects/*/instanceConfigs/*" + + "}\022\310\002\n\024CreateInstanceConfig\022=.google.span" + + "ner.admin.instance.v1.CreateInstanceConf" + + "igRequest\032\035.google.longrunning.Operation" + + "\"\321\001\312Ap\n/google.spanner.admin.instance.v1" + + ".InstanceConfig\022=google.spanner.admin.in" + + "stance.v1.CreateInstanceConfigMetadata\332A" + + ")parent,instance_config,instance_config_" + + "id\202\323\344\223\002,\"\'/v1/{parent=projects/*}/instan" + + "ceConfigs:\001*\022\312\002\n\024UpdateInstanceConfig\022=." + + "google.spanner.admin.instance.v1.UpdateI" + + "nstanceConfigRequest\032\035.google.longrunnin" + + "g.Operation\"\323\001\312Ap\n/google.spanner.admin." + + "instance.v1.InstanceConfig\022=google.spann" + + "er.admin.instance.v1.UpdateInstanceConfi" + + "gMetadata\332A\033instance_config,update_mask\202" + + "\323\344\223\002<27/v1/{instance_config.name=project" + + "s/*/instanceConfigs/*}:\001*\022\245\001\n\024DeleteInst" + + "anceConfig\022=.google.spanner.admin.instan" + + "ce.v1.DeleteInstanceConfigRequest\032\026.goog" + + "le.protobuf.Empty\"6\332A\004name\202\323\344\223\002)*\'/v1/{n" + + "ame=projects/*/instanceConfigs/*}\022\360\001\n\034Li" + + "stInstanceConfigOperations\022E.google.span" + + "ner.admin.instance.v1.ListInstanceConfig" + + "OperationsRequest\032F.google.spanner.admin" + + ".instance.v1.ListInstanceConfigOperation" + + "sResponse\"A\332A\006parent\202\323\344\223\0022\0220/v1/{parent=" + + "projects/*}/instanceConfigOperations\022\264\001\n" + + "\rListInstances\0226.google.spanner.admin.in" + + "stance.v1.ListInstancesRequest\0327.google." + + "spanner.admin.instance.v1.ListInstancesR" + + "esponse\"2\332A\006parent\202\323\344\223\002#\022!/v1/{parent=pr" + + "ojects/*}/instances\022\344\001\n\026ListInstancePart" + + "itions\022?.google.spanner.admin.instance.v" + + "1.ListInstancePartitionsRequest\032@.google" + + ".spanner.admin.instance.v1.ListInstanceP" + + "artitionsResponse\"G\332A\006parent\202\323\344\223\0028\0226/v1/" + + "{parent=projects/*/instances/*}/instance" + + "Partitions\022\241\001\n\013GetInstance\0224.google.span" + + "ner.admin.instance.v1.GetInstanceRequest" + + "\032*.google.spanner.admin.instance.v1.Inst" + + "ance\"0\332A\004name\202\323\344\223\002#\022!/v1/{name=projects/" + + "*/instances/*}\022\234\002\n\016CreateInstance\0227.goog" + + "le.spanner.admin.instance.v1.CreateInsta" + + "nceRequest\032\035.google.longrunning.Operatio" + + "n\"\261\001\312Ad\n)google.spanner.admin.instance.v" + + "1.Instance\0227google.spanner.admin.instanc" + + "e.v1.CreateInstanceMetadata\332A\033parent,ins" + + "tance_id,instance\202\323\344\223\002&\"!/v1/{parent=pro" + + "jects/*}/instances:\001*\022\235\002\n\016UpdateInstance" + + "\0227.google.spanner.admin.instance.v1.Upda" + + "teInstanceRequest\032\035.google.longrunning.O" + + "peration\"\262\001\312Ad\n)google.spanner.admin.ins" + + "tance.v1.Instance\0227google.spanner.admin." + + "instance.v1.UpdateInstanceMetadata\332A\023ins" + + "tance,field_mask\202\323\344\223\002/2*/v1/{instance.na" + + "me=projects/*/instances/*}:\001*\022\223\001\n\016Delete" + + "Instance\0227.google.spanner.admin.instance" + + ".v1.DeleteInstanceRequest\032\026.google.proto" + + "buf.Empty\"0\332A\004name\202\323\344\223\002#*!/v1/{name=proj" + + "ects/*/instances/*}\022\232\001\n\014SetIamPolicy\022\".g" + + "oogle.iam.v1.SetIamPolicyRequest\032\025.googl" + + "e.iam.v1.Policy\"O\332A\017resource,policy\202\323\344\223\002" + + "7\"2/v1/{resource=projects/*/instances/*}" + + ":setIamPolicy:\001*\022\223\001\n\014GetIamPolicy\022\".goog" + + "le.iam.v1.GetIamPolicyRequest\032\025.google.i" + + "am.v1.Policy\"H\332A\010resource\202\323\344\223\0027\"2/v1/{re" + + "source=projects/*/instances/*}:getIamPol" + + "icy:\001*\022\305\001\n\022TestIamPermissions\022(.google.i" + + "am.v1.TestIamPermissionsRequest\032).google" + + ".iam.v1.TestIamPermissionsResponse\"Z\332A\024r" + + "esource,permissions\202\323\344\223\002=\"8/v1/{resource" + + "=projects/*/instances/*}:testIamPermissi" + + "ons:\001*\022\321\001\n\024GetInstancePartition\022=.google" + + ".spanner.admin.instance.v1.GetInstancePa" + + "rtitionRequest\0323.google.spanner.admin.in" + + "stance.v1.InstancePartition\"E\332A\004name\202\323\344\223" + + "\0028\0226/v1/{name=projects/*/instances/*/ins" + + "tancePartitions/*}\022\351\002\n\027CreateInstancePar" + + "tition\022@.google.spanner.admin.instance.v" + + "1.CreateInstancePartitionRequest\032\035.googl" + + "e.longrunning.Operation\"\354\001\312Av\n2google.sp" + "anner.admin.instance.v1.InstancePartitio" - + "n\022\027\n\017next_page_token\030\002 \001(\t\022\023\n\013unreachabl" - + "e\030\003 \003(\t\"\355\001\n&ListInstancePartitionOperati" - + "onsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037span" - + "ner.googleapis.com/Instance\022\023\n\006filter\030\002 " - + "\001(\tB\003\340A\001\022\026\n\tpage_size\030\003 \001(\005B\003\340A\001\022\027\n\npage" - + "_token\030\004 \001(\tB\003\340A\001\022D\n\033instance_partition_" - + "deadline\030\005 \001(\0132\032.google.protobuf.Timesta" - + "mpB\003\340A\001\"\236\001\n\'ListInstancePartitionOperati" - + "onsResponse\0221\n\noperations\030\001 \003(\0132\035.google" - + ".longrunning.Operation\022\027\n\017next_page_toke" - + "n\030\002 \001(\t\022\'\n\037unreachable_instance_partitio" - + "ns\030\003 \003(\t2\316%\n\rInstanceAdmin\022\314\001\n\023ListInsta" - + "nceConfigs\022<.google.spanner.admin.instan" - + "ce.v1.ListInstanceConfigsRequest\032=.googl" - + "e.spanner.admin.instance.v1.ListInstance" - + "ConfigsResponse\"8\332A\006parent\202\323\344\223\002)\022\'/v1/{p" - + "arent=projects/*}/instanceConfigs\022\271\001\n\021Ge" - + "tInstanceConfig\022:.google.spanner.admin.i" - + "nstance.v1.GetInstanceConfigRequest\0320.go" - + "ogle.spanner.admin.instance.v1.InstanceC" - + "onfig\"6\332A\004name\202\323\344\223\002)\022\'/v1/{name=projects" - + "/*/instanceConfigs/*}\022\310\002\n\024CreateInstance" - + "Config\022=.google.spanner.admin.instance.v" - + "1.CreateInstanceConfigRequest\032\035.google.l" - + "ongrunning.Operation\"\321\001\312Ap\n/google.spann" - + "er.admin.instance.v1.InstanceConfig\022=goo" - + "gle.spanner.admin.instance.v1.CreateInst" - + "anceConfigMetadata\332A)parent,instance_con" - + "fig,instance_config_id\202\323\344\223\002,\"\'/v1/{paren" - + "t=projects/*}/instanceConfigs:\001*\022\312\002\n\024Upd" - + "ateInstanceConfig\022=.google.spanner.admin" - + ".instance.v1.UpdateInstanceConfigRequest" - + "\032\035.google.longrunning.Operation\"\323\001\312Ap\n/g" - + "oogle.spanner.admin.instance.v1.Instance" - + "Config\022=google.spanner.admin.instance.v1" - + ".UpdateInstanceConfigMetadata\332A\033instance" - + "_config,update_mask\202\323\344\223\002<27/v1/{instance" - + "_config.name=projects/*/instanceConfigs/" - + "*}:\001*\022\245\001\n\024DeleteInstanceConfig\022=.google." - + "spanner.admin.instance.v1.DeleteInstance" - + "ConfigRequest\032\026.google.protobuf.Empty\"6\332" - + "A\004name\202\323\344\223\002)*\'/v1/{name=projects/*/insta" - + "nceConfigs/*}\022\360\001\n\034ListInstanceConfigOper" - + "ations\022E.google.spanner.admin.instance.v" - + "1.ListInstanceConfigOperationsRequest\032F." - + "google.spanner.admin.instance.v1.ListIns" - + "tanceConfigOperationsResponse\"A\332A\006parent" - + "\202\323\344\223\0022\0220/v1/{parent=projects/*}/instance" - + "ConfigOperations\022\264\001\n\rListInstances\0226.goo" - + "gle.spanner.admin.instance.v1.ListInstan" - + "cesRequest\0327.google.spanner.admin.instan" - + "ce.v1.ListInstancesResponse\"2\332A\006parent\202\323" - + "\344\223\002#\022!/v1/{parent=projects/*}/instances\022" - + "\344\001\n\026ListInstancePartitions\022?.google.span" - + "ner.admin.instance.v1.ListInstancePartit" - + "ionsRequest\032@.google.spanner.admin.insta" - + "nce.v1.ListInstancePartitionsResponse\"G\332" - + "A\006parent\202\323\344\223\0028\0226/v1/{parent=projects/*/i" - + "nstances/*}/instancePartitions\022\241\001\n\013GetIn" - + "stance\0224.google.spanner.admin.instance.v" - + "1.GetInstanceRequest\032*.google.spanner.ad" - + "min.instance.v1.Instance\"0\332A\004name\202\323\344\223\002#\022" - + "!/v1/{name=projects/*/instances/*}\022\234\002\n\016C" - + "reateInstance\0227.google.spanner.admin.ins" - + "tance.v1.CreateInstanceRequest\032\035.google." - + "longrunning.Operation\"\261\001\312Ad\n)google.span" - + "ner.admin.instance.v1.Instance\0227google.s" - + "panner.admin.instance.v1.CreateInstanceM" - + "etadata\332A\033parent,instance_id,instance\202\323\344" - + "\223\002&\"!/v1/{parent=projects/*}/instances:\001" - + "*\022\235\002\n\016UpdateInstance\0227.google.spanner.ad" - + "min.instance.v1.UpdateInstanceRequest\032\035." - + "google.longrunning.Operation\"\262\001\312Ad\n)goog" - + "le.spanner.admin.instance.v1.Instance\0227g" - + "oogle.spanner.admin.instance.v1.UpdateIn" - + "stanceMetadata\332A\023instance,field_mask\202\323\344\223" - + "\002/2*/v1/{instance.name=projects/*/instan" - + "ces/*}:\001*\022\223\001\n\016DeleteInstance\0227.google.sp" - + "anner.admin.instance.v1.DeleteInstanceRe" - + "quest\032\026.google.protobuf.Empty\"0\332A\004name\202\323" - + "\344\223\002#*!/v1/{name=projects/*/instances/*}\022" - + "\232\001\n\014SetIamPolicy\022\".google.iam.v1.SetIamP" - + "olicyRequest\032\025.google.iam.v1.Policy\"O\332A\017" - + "resource,policy\202\323\344\223\0027\"2/v1/{resource=pro" - + "jects/*/instances/*}:setIamPolicy:\001*\022\223\001\n" - + "\014GetIamPolicy\022\".google.iam.v1.GetIamPoli" - + "cyRequest\032\025.google.iam.v1.Policy\"H\332A\010res" - + "ource\202\323\344\223\0027\"2/v1/{resource=projects/*/in" - + "stances/*}:getIamPolicy:\001*\022\305\001\n\022TestIamPe" - + "rmissions\022(.google.iam.v1.TestIamPermiss" - + "ionsRequest\032).google.iam.v1.TestIamPermi" - + "ssionsResponse\"Z\332A\024resource,permissions\202" - + "\323\344\223\002=\"8/v1/{resource=projects/*/instance" - + "s/*}:testIamPermissions:\001*\022\321\001\n\024GetInstan" - + "cePartition\022=.google.spanner.admin.insta" - + "nce.v1.GetInstancePartitionRequest\0323.goo" - + "gle.spanner.admin.instance.v1.InstancePa" - + "rtition\"E\332A\004name\202\323\344\223\0028\0226/v1/{name=projec" - + "ts/*/instances/*/instancePartitions/*}\022\351" - + "\002\n\027CreateInstancePartition\022@.google.span" - + "ner.admin.instance.v1.CreateInstancePart" - + "itionRequest\032\035.google.longrunning.Operat" - + "ion\"\354\001\312Av\n2google.spanner.admin.instance" - + ".v1.InstancePartition\022@google.spanner.ad" - + "min.instance.v1.CreateInstancePartitionM" - + "etadata\332A/parent,instance_partition,inst" - + "ance_partition_id\202\323\344\223\002;\"6/v1/{parent=pro" - + "jects/*/instances/*}/instancePartitions:" - + "\001*\022\272\001\n\027DeleteInstancePartition\022@.google." - + "spanner.admin.instance.v1.DeleteInstance" - + "PartitionRequest\032\026.google.protobuf.Empty" - + "\"E\332A\004name\202\323\344\223\0028*6/v1/{name=projects/*/in" - + "stances/*/instancePartitions/*}\022\352\002\n\027Upda" - + "teInstancePartition\022@.google.spanner.adm" - + "in.instance.v1.UpdateInstancePartitionRe" - + "quest\032\035.google.longrunning.Operation\"\355\001\312" - + "Av\n2google.spanner.admin.instance.v1.Ins" - + "tancePartition\022@google.spanner.admin.ins" - + "tance.v1.UpdateInstancePartitionMetadata" - + "\332A\035instance_partition,field_mask\202\323\344\223\002N2I" - + "/v1/{instance_partition.name=projects/*/" - + "instances/*/instancePartitions/*}:\001*\022\210\002\n" - + "\037ListInstancePartitionOperations\022H.googl" - + "e.spanner.admin.instance.v1.ListInstance" - + "PartitionOperationsRequest\032I.google.span" - + "ner.admin.instance.v1.ListInstancePartit" - + "ionOperationsResponse\"P\332A\006parent\202\323\344\223\002A\022?" - + "/v1/{parent=projects/*/instances/*}/inst" - + "ancePartitionOperations\032x\312A\026spanner.goog" - + "leapis.com\322A\\https://www.googleapis.com/" - + "auth/cloud-platform,https://www.googleap" - + "is.com/auth/spanner.adminB\213\002\n$com.google" - + ".spanner.admin.instance.v1B\031SpannerInsta" - + "nceAdminProtoP\001ZFcloud.google.com/go/spa" - + "nner/admin/instance/apiv1/instancepb;ins" - + "tancepb\252\002&Google.Cloud.Spanner.Admin.Ins" - + "tance.V1\312\002&Google\\Cloud\\Spanner\\Admin\\In" - + "stance\\V1\352\002+Google::Cloud::Spanner::Admi" - + "n::Instance::V1b\006proto3" + + "n\022@google.spanner.admin.instance.v1.Crea" + + "teInstancePartitionMetadata\332A/parent,ins" + + "tance_partition,instance_partition_id\202\323\344" + + "\223\002;\"6/v1/{parent=projects/*/instances/*}" + + "/instancePartitions:\001*\022\272\001\n\027DeleteInstanc" + + "ePartition\022@.google.spanner.admin.instan" + + "ce.v1.DeleteInstancePartitionRequest\032\026.g" + + "oogle.protobuf.Empty\"E\332A\004name\202\323\344\223\0028*6/v1" + + "/{name=projects/*/instances/*/instancePa" + + "rtitions/*}\022\352\002\n\027UpdateInstancePartition\022" + + "@.google.spanner.admin.instance.v1.Updat" + + "eInstancePartitionRequest\032\035.google.longr" + + "unning.Operation\"\355\001\312Av\n2google.spanner.a" + + "dmin.instance.v1.InstancePartition\022@goog" + + "le.spanner.admin.instance.v1.UpdateInsta" + + "ncePartitionMetadata\332A\035instance_partitio" + + "n,field_mask\202\323\344\223\002N2I/v1/{instance_partit" + + "ion.name=projects/*/instances/*/instance" + + "Partitions/*}:\001*\022\210\002\n\037ListInstancePartiti" + + "onOperations\022H.google.spanner.admin.inst" + + "ance.v1.ListInstancePartitionOperationsR" + + "equest\032I.google.spanner.admin.instance.v" + + "1.ListInstancePartitionOperationsRespons" + + "e\"P\332A\006parent\202\323\344\223\002A\022?/v1/{parent=projects" + + "/*/instances/*}/instancePartitionOperati" + + "ons\032x\312A\026spanner.googleapis.com\322A\\https:/" + + "/www.googleapis.com/auth/cloud-platform," + + "https://www.googleapis.com/auth/spanner." + + "adminB\213\002\n$com.google.spanner.admin.insta" + + "nce.v1B\031SpannerInstanceAdminProtoP\001ZFclo" + + "ud.google.com/go/spanner/admin/instance/" + + "apiv1/instancepb;instancepb\252\002&Google.Clo" + + "ud.Spanner.Admin.Instance.V1\312\002&Google\\Cl" + + "oud\\Spanner\\Admin\\Instance\\V1\352\002+Google::" + + "Cloud::Spanner::Admin::Instance::V1b\006pro" + + "to3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -751,7 +756,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor, new java.lang.String[] { - "Instance", "StartTime", "CancelTime", "EndTime", + "Instance", "StartTime", "CancelTime", "EndTime", "ExpectedFulfillmentPeriod", }); internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor = getDescriptor().getMessageTypes().get(19); @@ -759,7 +764,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor, new java.lang.String[] { - "Instance", "StartTime", "CancelTime", "EndTime", + "Instance", "StartTime", "CancelTime", "EndTime", "ExpectedFulfillmentPeriod", }); internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor = getDescriptor().getMessageTypes().get(20); diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java index 772a067e62b..d1a3806d034 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java index cd65f9262cb..98253a2d296 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstanceConfigMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java index 46f771b2be2..0b0e3f62bb3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java index 31c2b95daff..5449ae00d55 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstanceConfigRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java index a059f9bd7f2..fbc356e800f 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** @@ -39,7 +39,9 @@ private UpdateInstanceMetadata(com.google.protobuf.GeneratedMessageV3.Builder super(builder); } - private UpdateInstanceMetadata() {} + private UpdateInstanceMetadata() { + expectedFulfillmentPeriod_ = 0; + } @java.lang.Override @SuppressWarnings({"unused"}) @@ -263,6 +265,46 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + public static final int EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER = 5; + private int expectedFulfillmentPeriod_ = 0; + /** + * + * + *
    +   * The expected fulfillment period of this update operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + @java.lang.Override + public int getExpectedFulfillmentPeriodValue() { + return expectedFulfillmentPeriod_; + } + /** + * + * + *
    +   * The expected fulfillment period of this update operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod() { + com.google.spanner.admin.instance.v1.FulfillmentPeriod result = + com.google.spanner.admin.instance.v1.FulfillmentPeriod.forNumber( + expectedFulfillmentPeriod_); + return result == null + ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED + : result; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -289,6 +331,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(4, getEndTime()); } + if (expectedFulfillmentPeriod_ + != com.google.spanner.admin.instance.v1.FulfillmentPeriod.FULFILLMENT_PERIOD_UNSPECIFIED + .getNumber()) { + output.writeEnum(5, expectedFulfillmentPeriod_); + } getUnknownFields().writeTo(output); } @@ -310,6 +357,11 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000008) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getEndTime()); } + if (expectedFulfillmentPeriod_ + != com.google.spanner.admin.instance.v1.FulfillmentPeriod.FULFILLMENT_PERIOD_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(5, expectedFulfillmentPeriod_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -342,6 +394,7 @@ public boolean equals(final java.lang.Object obj) { if (hasEndTime()) { if (!getEndTime().equals(other.getEndTime())) return false; } + if (expectedFulfillmentPeriod_ != other.expectedFulfillmentPeriod_) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -369,6 +422,8 @@ public int hashCode() { hash = (37 * hash) + END_TIME_FIELD_NUMBER; hash = (53 * hash) + getEndTime().hashCode(); } + hash = (37 * hash) + EXPECTED_FULFILLMENT_PERIOD_FIELD_NUMBER; + hash = (53 * hash) + expectedFulfillmentPeriod_; hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -542,6 +597,7 @@ public Builder clear() { endTimeBuilder_.dispose(); endTimeBuilder_ = null; } + expectedFulfillmentPeriod_ = 0; return this; } @@ -595,6 +651,9 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.UpdateInstanceMe result.endTime_ = endTimeBuilder_ == null ? endTime_ : endTimeBuilder_.build(); to_bitField0_ |= 0x00000008; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.expectedFulfillmentPeriod_ = expectedFulfillmentPeriod_; + } result.bitField0_ |= to_bitField0_; } @@ -656,6 +715,9 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.UpdateInstanceMeta if (other.hasEndTime()) { mergeEndTime(other.getEndTime()); } + if (other.expectedFulfillmentPeriod_ != 0) { + setExpectedFulfillmentPeriodValue(other.getExpectedFulfillmentPeriodValue()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -706,6 +768,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000008; break; } // case 34 + case 40: + { + expectedFulfillmentPeriod_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 40 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1494,6 +1562,105 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTimeBuilder_; } + private int expectedFulfillmentPeriod_ = 0; + /** + * + * + *
    +     * The expected fulfillment period of this update operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + @java.lang.Override + public int getExpectedFulfillmentPeriodValue() { + return expectedFulfillmentPeriod_; + } + /** + * + * + *
    +     * The expected fulfillment period of this update operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @param value The enum numeric value on the wire for expectedFulfillmentPeriod to set. + * @return This builder for chaining. + */ + public Builder setExpectedFulfillmentPeriodValue(int value) { + expectedFulfillmentPeriod_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * + * + *
    +     * The expected fulfillment period of this update operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + @java.lang.Override + public com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod() { + com.google.spanner.admin.instance.v1.FulfillmentPeriod result = + com.google.spanner.admin.instance.v1.FulfillmentPeriod.forNumber( + expectedFulfillmentPeriod_); + return result == null + ? com.google.spanner.admin.instance.v1.FulfillmentPeriod.UNRECOGNIZED + : result; + } + /** + * + * + *
    +     * The expected fulfillment period of this update operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @param value The expectedFulfillmentPeriod to set. + * @return This builder for chaining. + */ + public Builder setExpectedFulfillmentPeriod( + com.google.spanner.admin.instance.v1.FulfillmentPeriod value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + expectedFulfillmentPeriod_ = value.getNumber(); + onChanged(); + return this; + } + /** + * + * + *
    +     * The expected fulfillment period of this update operation.
    +     * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return This builder for chaining. + */ + public Builder clearExpectedFulfillmentPeriod() { + bitField0_ = (bitField0_ & ~0x00000010); + expectedFulfillmentPeriod_ = 0; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java index f35b53a8ad3..cd9fd6b9e87 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstanceMetadataOrBuilder @@ -175,4 +175,31 @@ public interface UpdateInstanceMetadataOrBuilder * .google.protobuf.Timestamp end_time = 4; */ com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder(); + + /** + * + * + *
    +   * The expected fulfillment period of this update operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The enum numeric value on the wire for expectedFulfillmentPeriod. + */ + int getExpectedFulfillmentPeriodValue(); + /** + * + * + *
    +   * The expected fulfillment period of this update operation.
    +   * 
    + * + * .google.spanner.admin.instance.v1.FulfillmentPeriod expected_fulfillment_period = 5; + * + * + * @return The expectedFulfillmentPeriod. + */ + com.google.spanner.admin.instance.v1.FulfillmentPeriod getExpectedFulfillmentPeriod(); } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java index ffd1dc82147..8d8acbcb18c 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java index 94ed05800bd..e7e7afc201f 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstancePartitionMetadataOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java index 8ddc1564de5..2cdd9aac0c3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java index ffeebecf28e..802e9ba4f7d 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstancePartitionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstancePartitionRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java index 9ba5f0e2939..cc73cfff535 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; /** diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java index 20f4f4729bd..4547b94ae22 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.admin.instance.v1; public interface UpdateInstanceRequestOrBuilder diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto index ffb69748fbc..ab6293acffb 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/common.proto @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -40,3 +40,17 @@ message OperationProgress { // successfully. google.protobuf.Timestamp end_time = 3; } + +// Indicates the expected fulfillment period of an operation. +enum FulfillmentPeriod { + // Not specified. + FULFILLMENT_PERIOD_UNSPECIFIED = 0; + + // Normal fulfillment period. The operation is expected to complete within + // minutes. + FULFILLMENT_PERIOD_NORMAL = 1; + + // Extended fulfillment period. It can take up to an hour for the operation + // to complete. + FULFILLMENT_PERIOD_EXTENDED = 2; +} diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto index 836b9063fb3..499bd860363 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/proto/google/spanner/admin/instance/v1/spanner_instance_admin.proto @@ -1282,6 +1282,9 @@ message CreateInstanceMetadata { // The time at which this operation failed or was completed successfully. google.protobuf.Timestamp end_time = 4; + + // The expected fulfillment period of this create operation. + FulfillmentPeriod expected_fulfillment_period = 5; } // Metadata type for the operation returned by @@ -1302,6 +1305,9 @@ message UpdateInstanceMetadata { // The time at which this operation failed or was completed successfully. google.protobuf.Timestamp end_time = 4; + + // The expected fulfillment period of this update operation. + FulfillmentPeriod expected_fulfillment_period = 5; } // Metadata type for the operation returned by diff --git a/proto-google-cloud-spanner-executor-v1/pom.xml b/proto-google-cloud-spanner-executor-v1/pom.xml index 24b4effee53..4c907ffac14 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.64.0 + 6.65.0 proto-google-cloud-spanner-executor-v1 Proto library for google-cloud-spanner com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java index 7d745e8ea4d..35595d17983 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java index a7279dc6cb9..dbb35d398ac 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface AdminActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java index c3a54e90482..2f189229753 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResult.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java index a1b85912884..d7595a7f88e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/AdminResultOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface AdminResultOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java index b4649d75064..2a1257d6b41 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java index 12d77f73acc..ee256eb0031 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchDmlActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface BatchDmlActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java index 1735e190d64..2f219fa5d71 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartition.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java index 3d27e245ec7..51f58412545 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/BatchPartitionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface BatchPartitionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java index 9b15a5bbbb9..75bca030819 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java index ba6955f38bd..16b64b93231 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CancelOperationActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CancelOperationActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java index 88b3c28899f..26d576ac9dc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java index 772e94530be..de807b718da 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeQuorumCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ChangeQuorumCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java index e142ee1500d..d60357f100c 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecord.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java index a58934b0382..8abc8e9561a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChangeStreamRecordOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ChangeStreamRecordOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java index cc1d56ce098..fa3c5d1ffdb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecord.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java index c56af564e0e..a1cc7f0274f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ChildPartitionsRecordOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ChildPartitionsRecordOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java index bd88a95d961..62ca0bc2a4d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java index a339542402d..7668ae83cf0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloseBatchTransactionActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CloseBatchTransactionActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java index 090a93d4d71..24a1c3d1117 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java index 48e5355556b..6dc3ef0c947 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudBackupResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CloudBackupResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java index f4195931d62..718f29df6df 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java index 81ba2ed6798..cabcd93ca27 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudDatabaseResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CloudDatabaseResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java index bd615eaeeb5..dceb9a3291a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudExecutorProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public final class CloudExecutorProto { diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java index 5e0076c56ab..f84ebefb39f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java index 64c629ef60f..32eb9e0ce3a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceConfigResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CloudInstanceConfigResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java index ba13279dee2..0b22ffab5fc 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java index b87671d70c4..f2abf624be7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CloudInstanceResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CloudInstanceResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java index 9f47bead3cc..5829ad8ca0a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java index 4326c89a2b1..a6abcdcee5a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ColumnMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ColumnMetadataOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java index 86ca81ed827..d6a2b8aad4f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Concurrency.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java index fc8e9dd8f43..ac0ba53cef1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ConcurrencyOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ConcurrencyOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java index 6980009bfb0..d5cdd80a3f3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java index 03c659bea49..762201fca48 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CopyCloudBackupActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CopyCloudBackupActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java index 0db92886e4e..9717388a0b0 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java index 4e6a7b53147..54bde8e017e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudBackupActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CreateCloudBackupActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java index 3f17917a664..d53d8e768cb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java index 45e88f0ad26..ecfd9d2680f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CreateCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java index 4ea02b4fea1..fcbfb40081f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java index fddb9230bd9..d41976b7090 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateCloudInstanceActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CreateCloudInstanceActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java index bce0f5f511d..968fe00db0e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java index ffa1f5b8a8a..4915cf17e17 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/CreateUserInstanceConfigActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface CreateUserInstanceConfigActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java index 5aa9a5d9a58..125085ef4b1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecord.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java index 19a708c546d..5f4a47d2405 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DataChangeRecordOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DataChangeRecordOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java index dd91b01e387..e1467151cda 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java index 0fe780e81c3..e0a3faa8885 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudBackupActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DeleteCloudBackupActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java index b51b285e469..d8a043b6307 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java index 51e0037165a..77e82d97145 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteCloudInstanceActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DeleteCloudInstanceActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java index e25dc61e7e0..dd0c7e8a15b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java index 0af0ab956bb..9f41eacbd5f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DeleteUserInstanceConfigActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DeleteUserInstanceConfigActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java index 08a3f01ad48..b2f96c44da4 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java index 33198f0591d..dea8178f498 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DmlActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DmlActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java index 6b52ea3f0ac..bd9a1c8c613 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java index 8c6e9055910..cc64a9047f9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/DropCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface DropCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java index 079f9088dbd..fc45647de56 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQuery.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java index 5b140383142..e3fccae9dcd 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecuteChangeStreamQueryOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ExecuteChangeStreamQueryOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java index 9acbcea6546..b5a816faeb5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java index 44c1a3d93df..e7ffff97df8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ExecutePartitionActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ExecutePartitionActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java index daeb03a9637..452a837de82 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java index 1281a913d35..f4b5311a7ef 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/FinishTransactionActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface FinishTransactionActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java index 06bc998672f..3707bc8f1c8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java index 197443620c3..49cceebe66b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForQueryActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GenerateDbPartitionsForQueryActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java index 29d4008069c..9a8017480c7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java index d415029950f..0a7998e20fa 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GenerateDbPartitionsForReadActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GenerateDbPartitionsForReadActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java index 1ad8a59980f..3faf03c3fda 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java index 67cac4420ef..0ae7dc25cd1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudBackupActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GetCloudBackupActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java index eae1bb45199..9dac07ff304 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java index ec6a9b3bca1..c271361fb9a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GetCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java index cf7e774fe54..00968361403 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java index 016fb31a4fc..1169fb7ce92 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GetCloudInstanceActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java index bc25ab24966..27702feeef9 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java index f5092ed316d..e3d147dff93 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetCloudInstanceConfigActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GetCloudInstanceConfigActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java index 0d3cebe92a0..b96332f66e8 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java index 55c89853679..3aa3a7f8a36 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/GetOperationActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface GetOperationActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java index 6344099b56b..ff5e350ed2d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecord.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java index 2fd58d8829e..e75042b97c1 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/HeartbeatRecordOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface HeartbeatRecordOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java index c27ddbcb302..69e049bb12d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRange.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java index 427808e9718..3f798a14a61 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeyRangeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface KeyRangeOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java index 4bbba0c0791..7cb96d5af45 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySet.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java index f89b2cc62ca..8bca1309e00 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/KeySetOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface KeySetOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java index 3289e6bd380..f41d7003288 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java index a7933b2957d..a9204447fa5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupOperationsActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudBackupOperationsActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java index ae97978a571..f7c78646b8a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java index 9dc7939ddbf..5aa5b07944f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudBackupsActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudBackupsActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java index 0b06c5ee01b..1c242d29abb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java index ff9f9bc5a7a..72939dd07fb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabaseOperationsActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudDatabaseOperationsActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java index 18ac43f07fe..684b3c8859e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java index b671c39c88a..95716e95f2b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudDatabasesActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudDatabasesActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java index 01802e234d6..c755e74db73 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java index 00661970d5f..493d06263ea 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstanceConfigsActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudInstanceConfigsActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java index 56b02f4e70c..45c89ff81fe 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java index e291af32903..b225d0011ba 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ListCloudInstancesActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ListCloudInstancesActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java index 7c5ce8a5d11..67243fa243b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java index 99fc6b22400..01298f4fd85 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/MutationActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface MutationActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java index 81d6fddfdac..9493d21f4d5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java index 83af12a4afc..2a4b0cc7458 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/OperationResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface OperationResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java index b64c131b28e..066287b7869 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java index 31e7a7342bc..c170776547f 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/PartitionedUpdateActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface PartitionedUpdateActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java index 8afe79d472d..470688d2626 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java index 240b2a14601..2358e8cc43a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface QueryActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java index cf8a4232cd4..b20d591fb79 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResult.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java index e88929247d8..4338c70ab83 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/QueryResultOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface QueryResultOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java index b8dc9e0c1bb..c0d4265cd14 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java index 1fc66899f56..c228ba3459b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ReadActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java index 9330008a18e..efd6f80ccf5 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResult.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java index 3372ffad8ce..202d6e2d447 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ReadResultOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ReadResultOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java index 111f8441da2..45d89b31afe 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java index 7bfa056971a..3bf8f841233 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/RestoreCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface RestoreCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java index 1e6fbffd393..e6bd8b20564 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java index b9d4f00a03f..e2981a6421a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SessionPoolOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SessionPoolOptionsOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java index 45af616c4e7..8a9025e7eb3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java index 61e481d8036..202abcfc871 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SpannerActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java index 6ac48df1a7c..a54ec1a8505 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcome.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java index c2913c63e2b..a0b28a558d7 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerActionOutcomeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SpannerActionOutcomeOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java index daad9601b0c..8fd6341e275 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java index 6aa0f3d0ecf..64be7d0b15a 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SpannerAsyncActionRequestOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java index 3724c86a91a..3a7093bc52b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java index 52f9a62c19a..4bd8caf3b49 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerAsyncActionResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SpannerAsyncActionResponseOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java index 1ff00f038f0..0f8d6b2635e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java index 39d05d1b247..c336ae68be3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/SpannerOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface SpannerOptionsOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java index 818b2e1fe76..c674de6de4b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java index 8c5109e35b7..b7450cf5537 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartBatchTransactionActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface StartBatchTransactionActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java index 64441022faa..e4326119096 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java index a0b96a21023..b01fff9ec34 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/StartTransactionActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface StartTransactionActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java index 812c92037c8..903de924f72 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java index 69ff53cdfab..ba304ba374e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TableMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface TableMetadataOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java index 99e3723da74..04d1c7a45a3 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java index e28bd4b6d3a..1b8758a0327 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/TransactionExecutionOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface TransactionExecutionOptionsOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java index 218f7d4738d..777c77107bb 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java index 8c0f3a545b5..0e6e242e727 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudBackupActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface UpdateCloudBackupActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java index 11ff862e5fc..35709b65a76 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java index f8653f2d172..5899ffb07ec 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface UpdateCloudDatabaseActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java index eaa4d8a7600..d2c80490134 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java index c2aa0a8eb81..598fe63271d 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudDatabaseDdlActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface UpdateCloudDatabaseDdlActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java index 1c4490d8d57..ca7ef5038db 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java index fb55cf6a1eb..42dc9048fa4 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateCloudInstanceActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface UpdateCloudInstanceActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java index c501fe38d27..4324d826c1e 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java index b9681f46019..796fd0b748b 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/UpdateUserInstanceConfigActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface UpdateUserInstanceConfigActionOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java index 7d09e149cb5..129b745a967 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/Value.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java index 403511a4647..7428d74ed42 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueList.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java index 00ec11bdffe..17e7a989d78 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueListOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ValueListOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java index 49e0a28b933..2929fb0b2ff 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/ValueOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface ValueOrBuilder diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java index 0701ceb948a..83cbde72742 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsAction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; /** diff --git a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java index c623ec323e9..752952b34ff 100644 --- a/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java +++ b/proto-google-cloud-spanner-executor-v1/src/main/java/com/google/spanner/executor/v1/WriteMutationsActionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/executor/v1/cloud_executor.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.executor.v1; public interface WriteMutationsActionOrBuilder diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml index 9802bcbab14..54c402c761a 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.64.0 + 6.65.0 proto-google-cloud-spanner-v1 PROTO library for proto-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.64.0 + 6.65.0 diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java index b282ac196e6..260a0255fb3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java index 8adf4dd6fc3..64ec026ddf4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface BatchCreateSessionsRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java index 3e396720e92..f20c62b0129 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java index 299c4335830..2ec1795cb41 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface BatchCreateSessionsResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java index 3135dd0e10b..2228fc01908 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java index 4dedf95afbf..5731c28f786 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface BatchWriteRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java index e85c5cc46e7..6b02776db03 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java index 02b7a9286bd..de59b2b962b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface BatchWriteResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java index d1d71bf700c..2064b7dcc41 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java index a77b0f7d4d5..d02389313b4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface BeginTransactionRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java index 2f4de4a4f46..dae1f71dd92 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java index 30b844c195f..9f1ec3703f6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface CommitRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java index b04a6b9825e..7246fde5be6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/commit_response.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java index 3057af243c3..75d7b782e63 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/commit_response.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface CommitResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java index 47b0c28e6a1..b21d8f2778e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponseProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/commit_response.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class CommitResponseProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java index 710971c2464..021253ec534 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java index 2c6e1e16d99..ab3ce67f2c9 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface CreateSessionRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java index 7be12c31fda..315bbad7c79 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java index d1b9c15b662..d835370662c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface DeleteSessionRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java index 859715c962f..7caddb779a3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java index 2b94c3cac7f..04a9f7fd4dd 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DirectedReadOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface DirectedReadOptionsOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java index ea1b056a0b1..b69e41096af 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java index 7efd8f3d875..ed0b7960f0d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ExecuteBatchDmlRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java index 9a496542f87..c1fbfa8f77e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java index c63e8364b07..2075f7a34e3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ExecuteBatchDmlResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java index b24ad8077d4..f2643e58d24 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java index f31dac6857a..c45941dfb03 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ExecuteSqlRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java index 5a4cd1d8891..f9dd6b08689 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java index 4d6667d99f2..a428dc63829 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface GetSessionRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java index 7293e5c15c8..328a6910f1c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/keys.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java index eb46485f9ff..e149128fa46 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/keys.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface KeyRangeOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java index 9d7db7337a4..97631a35219 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/keys.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java index 68c35c14a7b..b340e8ace72 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySetOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/keys.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface KeySetOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java index 9bfb4697b1e..3215c87d4b8 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeysProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/keys.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class KeysProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java index ee629e3b76d..fb957816d27 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java index 7a5971cd15e..367b98c243f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ListSessionsRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java index 3f0f9ba467e..8d785f34789 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java index bd57be27dfa..6af91524494 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ListSessionsResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java index ef756891433..251c055bd7d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/mutation.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java index b596d1adf6c..b8a912bc1b5 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/mutation.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface MutationOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java index 3913bc2a97c..4e1755a9f42 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/mutation.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class MutationProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java index 8c863af7e0e..593d356384a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java index 88eb3e33e12..1081754cc61 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartialResultSetOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java index 82d0a2ca846..e77ed70d92e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java index af665946256..e70ace69ad6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java index 4d894a0bbcf..8b9e52b34ef 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartitionOptionsOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java index 2196558c675..386d63f89b2 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartitionOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java index b370ca2f6b3..03893ce419f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java index 7e03e8981d5..bf08cd72393 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartitionQueryRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java index ccf2667687c..f75572fb574 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java index 8a0f5215469..df37ed20495 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartitionReadRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java index 70cb408c1c8..376fb8879b5 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java index 7076f9f25ac..d282a3a6fa6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponseOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PartitionResponseOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java index fcfd85d6919..1e6970a89c6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/query_plan.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java index 5a4a8d0e666..b0e6f0fd751 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/query_plan.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface PlanNodeOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java index 41f7d168bf0..613337aa1ad 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/query_plan.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java index 97cedd45737..c3595ec4d32 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/query_plan.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface QueryPlanOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java index 141b164d3f9..083ed3346fe 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlanProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/query_plan.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class QueryPlanProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java index b503a686741..24365c09f01 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java index da87d4db876..16358d0d5e0 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ReadRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java index ae316b92eaf..b39a445b4fe 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java index abbc17924dc..4299be9da0f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface RequestOptionsOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java index bbf2cac9a81..8203c9a936c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java index bddb81ea45d..c9b1cbe03e6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java index 8d80a5274aa..81ad710c41f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ResultSetMetadataOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java index feda8daaaee..89e26d5ce52 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ResultSetOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java index e22b1a2e4f3..8bccc6dd24e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class ResultSetProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java index 3353fca6f38..0d23f7f8d86 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java index 687f56a5d42..f530b8c9fb8 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/result_set.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface ResultSetStatsOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java index 765b082ef60..c4ba83281f4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java index e3f93b78616..e054a8978f6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequestOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface RollbackRequestOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java index ed8e95fec82..99a29fabbf3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java index 01220a4a316..f8669e27f67 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface SessionOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java index b5f80e4a9d2..e035529b2ae 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/spanner.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class SpannerProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructType.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructType.java index 12864639ec4..b9e88796d3d 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructType.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructType.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java index 6d90284c1a2..f37dcafc632 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/StructTypeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface StructTypeOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java index 01a7ad269af..b70ef9ce06a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Transaction.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java index b134f66b6a2..fdf2b1e69bc 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java index 4e5c8092881..0c0205fb937 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface TransactionOptionsOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java index 6cca06a7b39..640e7ae9a68 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface TransactionOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java index 567a7fa3e12..b06bd338898 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class TransactionProto { diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java index ae725f56d17..073e252ca9b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java index 34885ebb801..01f54dc9783 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/transaction.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface TransactionSelectorOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java index 76f8fd8d3a6..ffaa2a57877 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java index fa62d273262..b8879900205 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeAnnotationCode.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java index 5ae3db905be..43b24d84221 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; /** diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java index 7c26fec6a77..6ab086bb111 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeOrBuilder.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public interface TypeOrBuilder diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java index 7863f76bfbc..2306effc446 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/spanner/v1/type.proto -// Protobuf Java Version: 3.25.2 +// Protobuf Java Version: 3.25.3 package com.google.spanner.v1; public final class TypeProto { diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 8402ce15325..125eca23304 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -33,7 +33,7 @@ com.google.cloud google-cloud-spanner - 6.63.0 + 6.64.0 diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index 2d2a6b99571..8cf8cc752e1 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -29,7 +29,7 @@ com.google.cloud libraries-bom - 26.36.0 + 26.37.0 pom import @@ -62,7 +62,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.3.0 + 3.4.1 @@ -121,7 +121,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.3 + 3.2.5 **/*IT diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index dcb0d0a8da7..08596ce03b5 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -32,7 +32,7 @@ com.google.cloud google-cloud-spanner - 6.64.0 + 6.65.0 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index b0741aa6d4c..c52316baa78 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -34,7 +34,7 @@ com.google.cloud libraries-bom - 26.36.0 + 26.37.0 pom import diff --git a/versions.txt b/versions.txt index 28f75056662..d38ee8a7ce9 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.64.0:6.64.0 -proto-google-cloud-spanner-v1:6.64.0:6.64.0 -proto-google-cloud-spanner-admin-database-v1:6.64.0:6.64.0 -grpc-google-cloud-spanner-v1:6.64.0:6.64.0 -grpc-google-cloud-spanner-admin-instance-v1:6.64.0:6.64.0 -grpc-google-cloud-spanner-admin-database-v1:6.64.0:6.64.0 -google-cloud-spanner:6.64.0:6.64.0 -google-cloud-spanner-executor:6.64.0:6.64.0 -proto-google-cloud-spanner-executor-v1:6.64.0:6.64.0 -grpc-google-cloud-spanner-executor-v1:6.64.0:6.64.0 +proto-google-cloud-spanner-admin-instance-v1:6.65.0:6.65.0 +proto-google-cloud-spanner-v1:6.65.0:6.65.0 +proto-google-cloud-spanner-admin-database-v1:6.65.0:6.65.0 +grpc-google-cloud-spanner-v1:6.65.0:6.65.0 +grpc-google-cloud-spanner-admin-instance-v1:6.65.0:6.65.0 +grpc-google-cloud-spanner-admin-database-v1:6.65.0:6.65.0 +google-cloud-spanner:6.65.0:6.65.0 +google-cloud-spanner-executor:6.65.0:6.65.0 +proto-google-cloud-spanner-executor-v1:6.65.0:6.65.0 +grpc-google-cloud-spanner-executor-v1:6.65.0:6.65.0