diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 090264303f3..d7abbc602ed 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:5ee35ee919254a3d1e7d4f8abbf1b8c8869ade317ceb2e4df709af1b4b3e9ca1 + digest: sha256:3387f93d4577788512112ff69ddab746ae9192ddd9f13cfd175ef310d62d7d30 diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml index 4ad6c660649..5e0aa64f725 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: - - ansh0l + - rajatbhatta assign_prs_by: - labels: - samples diff --git a/.kokoro/build.bat b/.kokoro/build.bat index d21342e3296..c896610a27d 100644 --- a/.kokoro/build.bat +++ b/.kokoro/build.bat @@ -17,6 +17,6 @@ set JAVA8_HOME=%JAVA_HOME:"=% choco install -y openjdk11 -set JAVA11_HOME=C:\Program Files\Eclipse Adoptium\jdk-11.0.17.8-hotspot\ +set JAVA11_HOME=C:\Program Files\Eclipse Adoptium\jdk-11.0.18.10-hotspot\ -"C:\Program Files\Git\bin\bash.exe" %~dp0build.sh \ No newline at end of file +"C:\Program Files\Git\bin\bash.exe" %~dp0build.sh diff --git a/.kokoro/requirements.in b/.kokoro/requirements.in index b19a8dbfdd5..2092cc741d9 100644 --- a/.kokoro/requirements.in +++ b/.kokoro/requirements.in @@ -1,5 +1,5 @@ gcp-docuploader -gcp-releasetool +gcp-releasetool>=1.10.5 # required for compatibility with cryptography>=39.x wheel setuptools typing-extensions diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index cfadd22ce9b..c80f0a87cc5 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # pip-compile --allow-unsafe --generate-hashes requirements.in @@ -126,9 +126,9 @@ gcp-docuploader==0.6.4 \ --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \ --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf # via -r requirements.in -gcp-releasetool==1.9.1 \ - --hash=sha256:952f4055d5d986b070ae2a71c4410b250000f9cc5a1e26398fcd55a5bbc5a15f \ - --hash=sha256:d0d3c814a97c1a237517e837d8cfa668ced8df4b882452578ecef4a4e79c583b +gcp-releasetool==1.10.5 \ + --hash=sha256:174b7b102d704b254f2a26a3eda2c684fd3543320ec239baf771542a2e58e109 \ + --hash=sha256:e29d29927fe2ca493105a82958c6873bb2b90d503acac56be2c229e74de0eec9 # via -r requirements.in google-api-core==2.8.2 \ --hash=sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc \ @@ -374,6 +374,10 @@ secretstorage==3.3.3 \ --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 # via keyring +setuptools==67.3.2 \ + --hash=sha256:95f00380ef2ffa41d9bba85d95b27689d923c93dfbafed4aecd7cf988a25e012 \ + --hash=sha256:bb6d8e508de562768f2027902929f8523932fcd1fb784e6d573d2cafac995a48 + # via -r requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bcdc32daec..0d1004e590d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,63 @@ # Changelog +## [6.38.2](https://github.com/googleapis/java-spanner/compare/v6.38.1...v6.38.2) (2023-04-01) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-monitoring to v3.15.0 ([#2356](https://github.com/googleapis/java-spanner/issues/2356)) ([e4c001a](https://github.com/googleapis/java-spanner/commit/e4c001a2a78af756213fb28e01c571721e105262)) +* Update dependency com.google.cloud:google-cloud-trace to v2.14.0 ([#2357](https://github.com/googleapis/java-spanner/issues/2357)) ([dbb8e66](https://github.com/googleapis/java-spanner/commit/dbb8e669d855c08f48c15c9eafec03a85fa08bca)) + +## [6.38.1](https://github.com/googleapis/java-spanner/compare/v6.38.0...v6.38.1) (2023-03-29) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.6.0 ([#2352](https://github.com/googleapis/java-spanner/issues/2352)) ([19175ce](https://github.com/googleapis/java-spanner/commit/19175ce22777ac68f8c825a438c0a2503234aa42)) + +## [6.38.0](https://github.com/googleapis/java-spanner/compare/v6.37.0...v6.38.0) (2023-03-20) + + +### Features + +* Add option to wait on session pool creation ([#2329](https://github.com/googleapis/java-spanner/issues/2329)) ([ff17244](https://github.com/googleapis/java-spanner/commit/ff17244ee918fa17c96488a0f7081728cda7b342)) +* Add PartitionedUpdate support to executor ([#2228](https://github.com/googleapis/java-spanner/issues/2228)) ([2c8ecf6](https://github.com/googleapis/java-spanner/commit/2c8ecf6fee591df95ee4abfa230c3fcf0c34c589)) +* Adding support for databoost enabled in PartitionedRead and PartitionedQuery ([#2316](https://github.com/googleapis/java-spanner/issues/2316)) ([f39e4a3](https://github.com/googleapis/java-spanner/commit/f39e4a383cbe720b9814077317940fa3452e2f96)) + + +### Bug Fixes + +* Correcting the proto field Id for field data_boost_enabled ([#2328](https://github.com/googleapis/java-spanner/issues/2328)) ([6159d7e](https://github.com/googleapis/java-spanner/commit/6159d7ec49b17f6bc40e1b8c93d1e64198c59dcf)) +* Update executeCloudBatchDmlUpdates. ([#2326](https://github.com/googleapis/java-spanner/issues/2326)) ([27ef53c](https://github.com/googleapis/java-spanner/commit/27ef53c8447bd51a56fdfe6b2b206afe234fad80)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-monitoring to v3.14.0 ([#2333](https://github.com/googleapis/java-spanner/issues/2333)) ([9c81109](https://github.com/googleapis/java-spanner/commit/9c81109e452d6bae2598cf6cf541a09423a8ed6e)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.5.0 ([#2335](https://github.com/googleapis/java-spanner/issues/2335)) ([5eac2be](https://github.com/googleapis/java-spanner/commit/5eac2beb2ce5eebb61e70428e2ac2e11593fc986)) +* Update dependency com.google.cloud:google-cloud-trace to v2.13.0 ([#2334](https://github.com/googleapis/java-spanner/issues/2334)) ([c461ba0](https://github.com/googleapis/java-spanner/commit/c461ba0b1a145cc3e9bee805ec6ad827376e5168)) + +## [6.37.0](https://github.com/googleapis/java-spanner/compare/v6.36.1...v6.37.0) (2023-03-03) + + +### Features + +* Adding new fields for Serverless analytics ([#2315](https://github.com/googleapis/java-spanner/issues/2315)) ([ce9cd74](https://github.com/googleapis/java-spanner/commit/ce9cd7469e2fed15711a8dffe944934cdaa45ce8)) + + +### Bug Fixes + +* Update test certificate name. ([#2300](https://github.com/googleapis/java-spanner/issues/2300)) ([18e76d6](https://github.com/googleapis/java-spanner/commit/18e76d6636c530c9cfc0ac872d72e321e75c990e)) + + +### Dependencies + +* Update dependency com.google.api.grpc:proto-google-cloud-spanner-executor-v1 to v1.3.0 ([#2306](https://github.com/googleapis/java-spanner/issues/2306)) ([8372250](https://github.com/googleapis/java-spanner/commit/8372250e0aaae68b0d610d59c1ee88c4dc0d9e8b)) +* Update dependency com.google.cloud:google-cloud-monitoring to v3.13.0 ([#2311](https://github.com/googleapis/java-spanner/issues/2311)) ([6ba613b](https://github.com/googleapis/java-spanner/commit/6ba613b44598e48699aca320683e65572a730fc7)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.4.0 ([#2312](https://github.com/googleapis/java-spanner/issues/2312)) ([266c49c](https://github.com/googleapis/java-spanner/commit/266c49cc58beaa935a328599a3e75d3b1fb4988d)) +* Update dependency com.google.cloud:google-cloud-trace to v2.12.0 ([#2313](https://github.com/googleapis/java-spanner/issues/2313)) ([e5f76c6](https://github.com/googleapis/java-spanner/commit/e5f76c6598887b616d371b4d0b3551e236e080f8)) +* Update dependency org.json:json to v20230227 ([#2310](https://github.com/googleapis/java-spanner/issues/2310)) ([badcc14](https://github.com/googleapis/java-spanner/commit/badcc14182244929042412f97e5a7e05799eea22)) + ## [6.36.1](https://github.com/googleapis/java-spanner/compare/v6.36.0...v6.36.1) (2023-02-21) diff --git a/README.md b/README.md index 025b5565e3b..bcfdb21046c 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.8.0 + 26.11.0 pom import @@ -34,14 +34,15 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: ``` -If you are using Maven without BOM, add this to your dependencies: +If you are using Maven without the BOM, add this to your dependencies: + ```xml com.google.cloud google-cloud-spanner - 6.36.0 + 6.38.1 ``` @@ -49,21 +50,22 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies: ```Groovy -implementation platform('com.google.cloud:libraries-bom:26.8.0') +implementation platform('com.google.cloud:libraries-bom:26.11.0') implementation 'com.google.cloud:google-cloud-spanner' ``` If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-spanner:6.36.0' +implementation 'com.google.cloud:google-cloud-spanner:6.38.1' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.36.0" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.38.1" ``` + ## Authentication @@ -80,7 +82,7 @@ The client application making API calls must be granted [authorization scopes][a You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Spanner [API enabled][enable-api]. You will need to [enable billing][enable-billing] to use Google Cloud Spanner. [Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by -[installing the Google Cloud SDK][cloud-sdk] and running the following commands in command line: +[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line: `gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. ### Installation and setup @@ -409,15 +411,15 @@ 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://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-spanner&core=gav +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.38.1 [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 [iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy [developer-console]: https://console.developers.google.com/ [create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects -[cloud-sdk]: https://cloud.google.com/sdk/ -[troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/main/troubleshooting/readme.md#troubleshooting +[cloud-cli]: https://cloud.google.com/cli +[troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md [contributing]: https://github.com/googleapis/java-spanner/blob/main/CONTRIBUTING.md [code-of-conduct]: https://github.com/googleapis/java-spanner/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct [license]: https://github.com/googleapis/java-spanner/blob/main/LICENSE diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index d56a3bee3cb..e3ca43b15c4 100644 --- a/google-cloud-spanner-bom/pom.xml +++ b/google-cloud-spanner-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-spanner-bom - 6.36.1 + 6.38.2 pom com.google.cloud @@ -53,48 +53,48 @@ com.google.cloud google-cloud-spanner - 6.36.1 + 6.38.2 com.google.cloud google-cloud-spanner-executor - 6.36.1 + 6.38.2 com.google.cloud google-cloud-spanner test-jar - 6.36.1 + 6.38.2 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.36.1 + 6.38.2 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.36.1 + 6.38.2 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.36.1 + 6.38.2 com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.36.1 + 6.38.2 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.36.1 + 6.38.2 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.36.1 + 6.38.2 @@ -105,7 +105,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.11.0 1.8 1.8 diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index 46ad0f16941..fc86b46a4e0 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.36.1 + 6.38.2 jar Google Cloud Spanner Executor com.google.cloud google-cloud-spanner-parent - 6.36.1 + 6.38.2 @@ -81,7 +81,7 @@ com.google.api.grpc proto-google-cloud-spanner-executor-v1 - 1.2.0 + 1.3.0 com.google.guava @@ -134,7 +134,7 @@ maven-assembly-plugin - 3.4.2 + 3.5.0 assembly-descriptor.xml @@ -158,7 +158,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0-M9 + 3.0.0 diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java index 91ce0a23e2e..55acf44abb2 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java @@ -52,6 +52,7 @@ import com.google.cloud.spanner.Mutation; import com.google.cloud.spanner.Mutation.WriteBuilder; import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.Partition; import com.google.cloud.spanner.PartitionOptions; import com.google.cloud.spanner.ReadContext; @@ -128,6 +129,8 @@ import com.google.spanner.executor.v1.MutationAction.Mod; import com.google.spanner.executor.v1.MutationAction.UpdateArgs; import com.google.spanner.executor.v1.OperationResponse; +import com.google.spanner.executor.v1.PartitionedUpdateAction; +import com.google.spanner.executor.v1.PartitionedUpdateAction.ExecutePartitionedUpdateOptions; import com.google.spanner.executor.v1.QueryAction; import com.google.spanner.executor.v1.ReadAction; import com.google.spanner.executor.v1.RestoreCloudDatabaseAction; @@ -886,6 +889,13 @@ private Status executeAction( } else if (action.hasExecutePartition()) { return executeExecutePartition( action.getExecutePartition(), outcomeSender, executionContext); + } else if (action.hasPartitionedUpdate()) { + if (dbPath == null) { + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, "Database path must be set for this action"); + } + DatabaseClient dbClient = getClient().getDatabaseClient(DatabaseId.of(dbPath)); + return executePartitionedUpdate(action.getPartitionedUpdate(), dbClient, outcomeSender); } else if (action.hasCloseBatchTxn()) { return executeCloseBatchTxn(action.getCloseBatchTxn(), outcomeSender, executionContext); } else if (action.hasExecuteChangeStreamQuery()) { @@ -1974,6 +1984,33 @@ private Status executeExecutePartition( } } + /** Execute a partitioned update which runs different partitions in parallel. */ + private Status executePartitionedUpdate( + PartitionedUpdateAction action, DatabaseClient dbClient, OutcomeSender sender) { + try { + ExecutePartitionedUpdateOptions options = action.getOptions(); + Long count = + dbClient.executePartitionedUpdate( + Statement.of(action.getUpdate().getSql()), + Options.tag(options.getTag()), + Options.priority(RpcPriority.fromProto(options.getRpcPriority()))); + SpannerActionOutcome outcome = + SpannerActionOutcome.newBuilder() + .setStatus(toProto(Status.OK)) + .addDmlRowsModified(count) + .build(); + sender.sendOutcome(outcome); + return sender.finishWithOK(); + } catch (SpannerException e) { + return sender.finishWithError(toStatus(e)); + } catch (Exception e) { + return sender.finishWithError( + toStatus( + SpannerExceptionFactory.newSpannerException( + ErrorCode.INVALID_ARGUMENT, "Unexpected error: " + e.getMessage()))); + } + } + /** Build a child partition record proto out of childPartitionRecord returned by client. */ private ChildPartitionsRecord buildChildPartitionRecord(Struct childPartitionRecord) throws Exception { @@ -2451,10 +2488,10 @@ private Status executeCloudBatchDmlUpdates( QueryAction update = action.getUpdates(i); Statement.Builder stmt = Statement.newBuilder(update.getSql()); for (int j = 0; j < update.getParamsCount(); ++j) { - stmt.bind(update.getParams(i).getName()) + stmt.bind(update.getParams(j).getName()) .to( valueProtoToCloudValue( - update.getParams(i).getType(), update.getParams(i).getValue())); + update.getParams(j).getType(), update.getParams(j).getValue())); } queries.add(stmt.build()); } diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudUtil.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudUtil.java index e58d124285c..30a4d98a354 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudUtil.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudUtil.java @@ -46,7 +46,7 @@ public class CloudUtil { // error message causes the trailing headers to exceed this limit. private static final int GRPC_MAX_HEADER_LIST_SIZE_BYTES = 10 * 1024 * 1024; - private static final String TEST_HOST_IN_CERT = "test_cert_2"; + private static final String TEST_HOST_IN_CERT = "test-cert-2"; public static TransportChannelProvider newChannelProviderHelper(int port) { NettyChannelBuilder builder = diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 44c60e6aee0..3fee74f4e97 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.36.1 + 6.38.2 jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,7 +11,7 @@ com.google.cloud google-cloud-spanner-parent - 6.36.1 + 6.38.2 google-cloud-spanner @@ -359,7 +359,7 @@ org.json json - 20220924 + 20230227 test 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 60324f8e83e..7facd19c826 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 @@ -595,6 +595,9 @@ ExecuteSqlRequest.Builder getExecuteSqlRequestBuilder( builder.setTransaction(selector); } } + if (options.hasDataBoostEnabled()) { + builder.setDataBoostEnabled(options.dataBoostEnabled()); + } builder.setSeqno(getSeqNo()); builder.setQueryOptions(buildQueryOptions(statement.getQueryOptions())); builder.setRequestOptions(buildRequestOptions(options)); @@ -773,6 +776,9 @@ ResultSet readInternalWithOptions( if (partitionToken != null) { builder.setPartitionToken(partitionToken); } + if (readOptions.hasDataBoostEnabled()) { + builder.setDataBoostEnabled(readOptions.dataBoostEnabled()); + } final int prefetchChunks = readOptions.hasPrefetchChunks() ? readOptions.prefetchChunks() : defaultPrefetchChunks; ResumableStreamIterator stream = diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java index 9e41885bcf0..9712b508d5f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Options.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import com.google.api.core.BetaApi; import com.google.common.base.Preconditions; import com.google.spanner.v1.RequestOptions.Priority; import java.io.Serializable; @@ -32,13 +33,21 @@ public final class Options implements Serializable { public enum RpcPriority { LOW(Priority.PRIORITY_LOW), MEDIUM(Priority.PRIORITY_MEDIUM), - HIGH(Priority.PRIORITY_HIGH); + HIGH(Priority.PRIORITY_HIGH), + UNSPECIFIED(Priority.PRIORITY_UNSPECIFIED); private final Priority proto; RpcPriority(Priority proto) { this.proto = Preconditions.checkNotNull(proto); } + + public static RpcPriority fromProto(Priority proto) { + for (RpcPriority e : RpcPriority.values()) { + if (e.proto.equals(proto)) return e; + } + return RpcPriority.UNSPECIFIED; + } } /** Marker interface to mark options applicable to both Read and Query operations */ @@ -146,6 +155,16 @@ public static ListOption pageSize(int pageSize) { return new PageSizeOption(pageSize); } + /** + * If this is for a partitioned read & query and this field is set to `true`, the request will be + * executed via Spanner independent compute resources. The method is available in Beta mode (and + * is not generally available now). + */ + @BetaApi + public static DataBoostQueryOption dataBoostEnabled(Boolean dataBoostEnabled) { + return new DataBoostQueryOption(dataBoostEnabled); + } + /** * Specifying this will cause the list operation to start fetching the record from this onwards. */ @@ -321,6 +340,7 @@ void appendToOptions(Options options) { private String etag; private Boolean validateOnly; private Boolean withOptimisticLock; + private Boolean dataBoostEnabled; // Construction is via factory methods below. private Options() {} @@ -413,6 +433,14 @@ Boolean withOptimisticLock() { return withOptimisticLock; } + boolean hasDataBoostEnabled() { + return dataBoostEnabled != null; + } + + Boolean dataBoostEnabled() { + return dataBoostEnabled; + } + @Override public String toString() { StringBuilder b = new StringBuilder(); @@ -449,6 +477,9 @@ public String toString() { if (withOptimisticLock != null) { b.append("withOptimisticLock: ").append(withOptimisticLock).append(' '); } + if (dataBoostEnabled != null) { + b.append("dataBoostEnabled: ").append(dataBoostEnabled).append(' '); + } return b.toString(); } @@ -483,7 +514,8 @@ public boolean equals(Object o) { && Objects.equals(tag(), that.tag()) && Objects.equals(etag(), that.etag()) && Objects.equals(validateOnly(), that.validateOnly()) - && Objects.equals(withOptimisticLock(), that.withOptimisticLock()); + && Objects.equals(withOptimisticLock(), that.withOptimisticLock()) + && Objects.equals(dataBoostEnabled(), that.dataBoostEnabled()); } @Override @@ -525,6 +557,9 @@ public int hashCode() { if (withOptimisticLock != null) { result = 31 * result + withOptimisticLock.hashCode(); } + if (dataBoostEnabled != null) { + result = 31 * result + dataBoostEnabled.hashCode(); + } return result; } @@ -605,6 +640,20 @@ void appendToOptions(Options options) { } } + static final class DataBoostQueryOption extends InternalOption implements ReadAndQueryOption { + + private final Boolean dataBoostEnabled; + + DataBoostQueryOption(Boolean dataBoostEnabled) { + this.dataBoostEnabled = dataBoostEnabled; + } + + @Override + void appendToOptions(Options options) { + options.dataBoostEnabled = dataBoostEnabled; + } + } + static class PageSizeOption extends InternalOption implements ListOption { private final int pageSize; 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 ff11df91169..189c8e1d819 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 @@ -128,6 +128,30 @@ class SessionPool { ErrorCode.UNIMPLEMENTED, ErrorCode.INTERNAL); + /** + * If the {@link SessionPoolOptions#getWaitForMinSessions()} duration is greater than zero, waits + * for the creation of at least {@link SessionPoolOptions#getMinSessions()} in the pool using the + * given duration. If the waiting times out, a {@link SpannerException} with the {@link + * ErrorCode#DEADLINE_EXCEEDED} is thrown. + */ + void maybeWaitOnMinSessions() { + final long timeoutNanos = options.getWaitForMinSessions().toNanos(); + if (timeoutNanos <= 0) { + return; + } + + try { + if (!waitOnMinSessionsLatch.await(timeoutNanos, TimeUnit.NANOSECONDS)) { + final long timeoutMillis = options.getWaitForMinSessions().toMillis(); + throw SpannerExceptionFactory.newSpannerException( + ErrorCode.DEADLINE_EXCEEDED, + "Timed out after waiting " + timeoutMillis + "ms for session pool creation"); + } + } catch (InterruptedException e) { + throw SpannerExceptionFactory.propagateInterrupt(e); + } + } + /** * Wrapper around current time so that we can fake it in tests. TODO(user): Replace with Java 8 * Clock. @@ -1855,6 +1879,8 @@ private enum Position { @VisibleForTesting Function idleSessionRemovedListener; + private final CountDownLatch waitOnMinSessionsLatch; + /** * Create a session pool with the given options and for the given database. It will also start * eagerly creating sessions if {@link SessionPoolOptions#getMinSessions()} is greater than 0. @@ -1934,6 +1960,8 @@ private SessionPool( this.clock = clock; this.poolMaintainer = new PoolMaintainer(); this.initMetricsCollection(metricRegistry, labelValues); + this.waitOnMinSessionsLatch = + options.getMinSessions() > 0 ? new CountDownLatch(1) : new CountDownLatch(0); } /** @@ -2399,6 +2427,7 @@ public void onSessionReady(SessionImpl session) { PooledSession pooledSession = null; boolean closeSession = false; synchronized (lock) { + int minSessions = options.getMinSessions(); pooledSession = new PooledSession(session); numSessionsBeingCreated--; if (closureFuture != null) { @@ -2406,6 +2435,9 @@ public void onSessionReady(SessionImpl session) { } else { Preconditions.checkState(totalSessions() <= options.getMaxSessions() - 1); allSessions.add(pooledSession); + if (allSessions.size() >= minSessions) { + waitOnMinSessionsLatch.countDown(); + } if (options.isAutoDetectDialect() && !detectDialectStarted) { // Get the dialect of the underlying database if that has not yet been done. Note that // this method will release the session into the pool once it is done. 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 408b3d73965..ad6ad2e73d7 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 @@ -51,6 +51,7 @@ public class SessionPoolOptions { private final ActionOnSessionLeak actionOnSessionLeak; private final long initialWaitForSessionTimeoutMillis; private final boolean autoDetectDialect; + private final Duration waitForMinSessions; private SessionPoolOptions(Builder builder) { // minSessions > maxSessions is only possible if the user has only set a value for maxSessions. @@ -69,6 +70,7 @@ private SessionPoolOptions(Builder builder) { this.keepAliveIntervalMinutes = builder.keepAliveIntervalMinutes; this.removeInactiveSessionAfter = builder.removeInactiveSessionAfter; this.autoDetectDialect = builder.autoDetectDialect; + this.waitForMinSessions = builder.waitForMinSessions; } @Override @@ -90,7 +92,8 @@ public boolean equals(Object o) { && Objects.equals(this.loopFrequency, other.loopFrequency) && Objects.equals(this.keepAliveIntervalMinutes, other.keepAliveIntervalMinutes) && Objects.equals(this.removeInactiveSessionAfter, other.removeInactiveSessionAfter) - && Objects.equals(this.autoDetectDialect, other.autoDetectDialect); + && Objects.equals(this.autoDetectDialect, other.autoDetectDialect) + && Objects.equals(this.waitForMinSessions, other.waitForMinSessions); } @Override @@ -108,7 +111,8 @@ public int hashCode() { this.loopFrequency, this.keepAliveIntervalMinutes, this.removeInactiveSessionAfter, - this.autoDetectDialect); + this.autoDetectDialect, + this.waitForMinSessions); } public Builder toBuilder() { @@ -186,6 +190,11 @@ boolean isFailOnSessionLeak() { return actionOnSessionLeak == ActionOnSessionLeak.FAIL; } + @VisibleForTesting + Duration getWaitForMinSessions() { + return waitForMinSessions; + } + public static Builder newBuilder() { return new Builder(); } @@ -229,6 +238,7 @@ public static class Builder { private int keepAliveIntervalMinutes = 30; private Duration removeInactiveSessionAfter = Duration.ofMinutes(55L); private boolean autoDetectDialect = false; + private Duration waitForMinSessions = Duration.ZERO; public Builder() {} @@ -247,6 +257,7 @@ private Builder(SessionPoolOptions options) { this.keepAliveIntervalMinutes = options.keepAliveIntervalMinutes; this.removeInactiveSessionAfter = options.removeInactiveSessionAfter; this.autoDetectDialect = options.autoDetectDialect; + this.waitForMinSessions = options.waitForMinSessions; } /** @@ -394,6 +405,21 @@ public Builder setWriteSessionsFraction(float writeSessionsFraction) { return this; } + /** + * If greater than zero, waits for the session pool to have at least {@link + * SessionPoolOptions#minSessions} before returning the database client to the caller. Note that + * this check is only done during the session pool creation. This is usually done asynchronously + * in order to provide the client back to the caller as soon as possible. We don't recommend + * using this option unless you are executing benchmarks and want to guarantee the session pool + * has min sessions in the pool before continuing. + * + *

Defaults to zero (initialization is done asynchronously). + */ + public Builder setWaitForMinSessions(Duration waitForMinSessions) { + this.waitForMinSessions = waitForMinSessions; + return this; + } + /** Build a SessionPoolOption object */ public SessionPoolOptions build() { validate(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index b8255f1d65e..721be9cd762 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -221,6 +221,7 @@ public DatabaseClient getDatabaseClient(DatabaseId db) { SessionPool pool = SessionPool.createPool( getOptions(), SpannerImpl.this.getSessionClient(db), labelValues); + pool.maybeWaitOnMinSessions(); DatabaseClientImpl dbClient = createDatabaseClient(clientId, pool); dbClients.put(db, dbClient); return dbClient; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java index 84727be3245..af9509761df 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/HttpJsonDatabaseAdminStub.java @@ -22,6 +22,7 @@ import static com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient.ListDatabaseRolesPagedResponse; import static com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient.ListDatabasesPagedResponse; +import com.google.api.HttpRule; import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; @@ -37,6 +38,7 @@ import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.OperationCallable; import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableMap; import com.google.iam.v1.GetIamPolicyRequest; import com.google.iam.v1.Policy; import com.google.iam.v1.SetIamPolicyRequest; @@ -909,7 +911,84 @@ protected HttpJsonDatabaseAdminStub( throws IOException { this.callableFactory = callableFactory; this.httpJsonOperationsStub = - HttpJsonOperationsStub.create(clientContext, callableFactory, typeRegistry); + HttpJsonOperationsStub.create( + clientContext, + callableFactory, + typeRegistry, + ImmutableMap.builder() + .put( + "google.longrunning.Operations.CancelOperation", + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instances/*/databases/*/operations/*}:cancel") + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost("/v1/{name=projects/*/instances/*/operations/*}:cancel") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instances/*/backups/*/operations/*}:cancel") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instanceConfigs/*/operations/*}:cancel") + .build()) + .build()) + .put( + "google.longrunning.Operations.DeleteOperation", + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instances/*/databases/*/operations/*}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instances/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete( + "/v1/{name=projects/*/instances/*/backups/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instanceConfigs/*/operations/*}") + .build()) + .build()) + .put( + "google.longrunning.Operations.GetOperation", + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/databases/*/operations/*}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/backups/*/operations/*}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instanceConfigs/*/operations/*}") + .build()) + .build()) + .put( + "google.longrunning.Operations.ListOperations", + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/databases/*/operations}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/operations}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/backups/*/operations}") + .build()) + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instanceConfigs/*/operations}") + .build()) + .build()) + .build()); HttpJsonCallSettings listDatabasesTransportSettings = diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java index 98f6e781e94..1bbb310baca 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/package-info.java @@ -15,7 +15,9 @@ */ /** - * The interfaces provided are listed below, along with usage samples. + * A client to Cloud Spanner Instance Admin API + * + *

The interfaces provided are listed below, along with usage samples. * *

======================= InstanceAdminClient ======================= * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java index 3d3ba0e34d4..7266e61881f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/instance/v1/stub/HttpJsonInstanceAdminStub.java @@ -20,6 +20,7 @@ import static com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.ListInstanceConfigsPagedResponse; import static com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.ListInstancesPagedResponse; +import com.google.api.HttpRule; import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; @@ -35,6 +36,7 @@ import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.OperationCallable; import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableMap; import com.google.iam.v1.GetIamPolicyRequest; import com.google.iam.v1.Policy; import com.google.iam.v1.SetIamPolicyRequest; @@ -703,7 +705,49 @@ protected HttpJsonInstanceAdminStub( throws IOException { this.callableFactory = callableFactory; this.httpJsonOperationsStub = - HttpJsonOperationsStub.create(clientContext, callableFactory, typeRegistry); + HttpJsonOperationsStub.create( + clientContext, + callableFactory, + typeRegistry, + ImmutableMap.builder() + .put( + "google.longrunning.Operations.CancelOperation", + HttpRule.newBuilder() + .setPost( + "/v1/{name=projects/*/instances/*/databases/*/operations/*}:cancel") + .addAdditionalBindings( + HttpRule.newBuilder() + .setPost("/v1/{name=projects/*/instances/*/operations/*}:cancel") + .build()) + .build()) + .put( + "google.longrunning.Operations.DeleteOperation", + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instances/*/databases/*/operations/*}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setDelete("/v1/{name=projects/*/instances/*/operations/*}") + .build()) + .build()) + .put( + "google.longrunning.Operations.GetOperation", + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/databases/*/operations/*}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/operations/*}") + .build()) + .build()) + .put( + "google.longrunning.Operations.ListOperations", + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/databases/*/operations}") + .addAdditionalBindings( + HttpRule.newBuilder() + .setGet("/v1/{name=projects/*/instances/*/operations}") + .build()) + .build()) + .build()); HttpJsonCallSettings listInstanceConfigsTransportSettings = 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 a9ca5fb9726..251c5a2e6ec 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 @@ -213,9 +213,6 @@ String removeStatementHint(String sql) { @InternalApi @Override ParametersInfo convertPositionalParametersToNamedParametersInternal(char paramChar, String sql) { - final char SINGLE_QUOTE = '\''; - final char DOUBLE_QUOTE = '"'; - final char BACKTICK_QUOTE = '`'; boolean isInQuoted = false; char startQuote = 0; boolean lastCharWasEscapeChar = false; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java index 84ed9e2924a..a40ad087b66 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java @@ -940,6 +940,7 @@ public final UnaryCallable deleteSessionCallable() * .setSeqno(109325920) * .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ResultSet response = spannerClient.executeSql(request); * } @@ -987,6 +988,7 @@ public final ResultSet executeSql(ExecuteSqlRequest request) { * .setSeqno(109325920) * .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ApiFuture future = spannerClient.executeSqlCallable().futureCall(request); * // Do something. @@ -1027,6 +1029,7 @@ public final UnaryCallable executeSqlCallable() { * .setSeqno(109325920) * .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ServerStream stream = * spannerClient.executeStreamingSqlCallable().call(request); @@ -1162,6 +1165,7 @@ public final ExecuteBatchDmlResponse executeBatchDml(ExecuteBatchDmlRequest requ * .setResumeToken(ByteString.EMPTY) * .setPartitionToken(ByteString.EMPTY) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ResultSet response = spannerClient.read(request); * } @@ -1210,6 +1214,7 @@ public final ResultSet read(ReadRequest request) { * .setResumeToken(ByteString.EMPTY) * .setPartitionToken(ByteString.EMPTY) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ApiFuture future = spannerClient.readCallable().futureCall(request); * // Do something. @@ -1250,6 +1255,7 @@ public final UnaryCallable readCallable() { * .setResumeToken(ByteString.EMPTY) * .setPartitionToken(ByteString.EMPTY) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setDataBoostEnabled(true) * .build(); * ServerStream stream = spannerClient.streamingReadCallable().call(request); * for (PartialResultSet response : stream) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java index 2f88725f216..a3bd04b9f3f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/package-info.java @@ -15,7 +15,9 @@ */ /** - * The interfaces provided are listed below, along with usage samples. + * A client to Cloud Spanner API + * + *

The interfaces provided are listed below, along with usage samples. * *

======================= SpannerClient ======================= * diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java index 66c3609d6f9..31b73581f6b 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java @@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -188,6 +189,17 @@ public void testGetExecuteSqlRequestBuilderWithPriority() { assertEquals(Priority.PRIORITY_MEDIUM, request.getRequestOptions().getPriority()); } + @Test + public void testGetExecuteSqlRequestBuilderWithDataBoost() { + ExecuteSqlRequest.Builder request = + context.getExecuteSqlRequestBuilder( + Statement.of("SELECT * FROM FOO"), + QueryMode.NORMAL, + Options.fromQueryOptions(Options.dataBoostEnabled(true)), + false); + assertTrue(request.getDataBoostEnabled()); + } + @Test public void testGetExecuteBatchDmlRequestBuilderWithPriority() { ExecuteBatchDmlRequest.Builder request = 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 ac0f0a98d29..9885e4f83d5 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 @@ -21,6 +21,7 @@ import static com.google.cloud.spanner.MockSpannerTestUtil.READ_ONE_KEY_VALUE_STATEMENT; import static com.google.cloud.spanner.MockSpannerTestUtil.READ_TABLE_NAME; import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1; +import static com.google.cloud.spanner.MockSpannerTestUtil.SELECT1_RESULTSET; import static com.google.cloud.spanner.SpannerApiFutures.get; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; @@ -2943,6 +2944,24 @@ public void testMetadataUnknownTypes() { } } + @Test + public void testStatementWithBytesArrayParameter() { + Statement statement = + Statement.newBuilder("select id from test where b=@p1") + .bind("p1") + .toBytesArray( + ImmutableList.of(ByteArray.copyFrom("test1"), ByteArray.copyFrom("test2"))) + .build(); + mockSpanner.putStatementResult(StatementResult.query(statement, SELECT1_RESULTSET)); + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + try (ResultSet resultSet = client.singleUse().executeQuery(statement)) { + assertTrue(resultSet.next()); + assertEquals(1L, resultSet.getLong(0)); + assertFalse(resultSet.next()); + } + } + static void assertAsString(String expected, ResultSet resultSet, int col) { assertEquals(expected, resultSet.getValue(col).getAsString()); assertEquals(ImmutableList.of(expected), resultSet.getValue(col).getAsStringList()); 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 29ab79450b5..567279c511c 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 @@ -20,6 +20,7 @@ import com.google.cloud.ByteArray; import com.google.cloud.Date; import com.google.cloud.spanner.AbstractResultSet.GrpcStruct; +import com.google.cloud.spanner.AbstractResultSet.LazyByteArray; import com.google.cloud.spanner.SessionPool.SessionPoolTransactionContext; import com.google.cloud.spanner.TransactionRunnerImpl.TransactionContextImpl; import com.google.common.base.Optional; @@ -1362,9 +1363,11 @@ private Statement buildStatement( builder .bind(fieldName) .toBytesArray( - (Iterable) - GrpcStruct.decodeArrayValue( - com.google.cloud.spanner.Type.bytes(), value.getListValue())); + Iterables.transform( + (Iterable) + GrpcStruct.decodeArrayValue( + com.google.cloud.spanner.Type.bytes(), value.getListValue()), + LazyByteArray::getByteArray)); break; case DATE: builder diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java index 73fb772f0d3..d40f9b39ea1 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java @@ -63,11 +63,15 @@ public void zeroPrefetchChunksNotAllowed() { @Test public void allOptionsPresent() { - Options options = Options.fromReadOptions(Options.limit(10), Options.prefetchChunks(1)); + Options options = + Options.fromReadOptions( + Options.limit(10), Options.prefetchChunks(1), Options.dataBoostEnabled(true)); assertThat(options.hasLimit()).isTrue(); assertThat(options.limit()).isEqualTo(10); assertThat(options.hasPrefetchChunks()).isTrue(); assertThat(options.prefetchChunks()).isEqualTo(1); + assertThat(options.hasDataBoostEnabled()).isTrue(); + assertTrue(options.dataBoostEnabled()); } @Test @@ -79,6 +83,7 @@ public void allOptionsAbsent() { assertThat(options.hasPageToken()).isFalse(); assertThat(options.hasPriority()).isFalse(); assertThat(options.hasTag()).isFalse(); + assertThat(options.hasDataBoostEnabled()).isFalse(); assertThat(options.toString()).isEqualTo(""); assertThat(options.equals(options)).isTrue(); assertThat(options.equals(null)).isFalse(); @@ -153,11 +158,17 @@ public void listEquality() { public void readOptionsTest() { int limit = 3; String tag = "app=spanner,env=test,action=read"; - Options options = Options.fromReadOptions(Options.limit(limit), Options.tag(tag)); + boolean dataBoost = true; + Options options = + Options.fromReadOptions( + Options.limit(limit), Options.tag(tag), Options.dataBoostEnabled(true)); - assertThat(options.toString()).isEqualTo("limit: " + limit + " " + "tag: " + tag + " "); + assertThat(options.toString()) + .isEqualTo( + "limit: " + limit + " " + "tag: " + tag + " " + "dataBoostEnabled: " + dataBoost + " "); assertThat(options.tag()).isEqualTo(tag); - assertThat(options.hashCode()).isEqualTo(-1111478426); + assertEquals(dataBoost, options.dataBoostEnabled()); + assertThat(options.hashCode()).isEqualTo(-96091607); } @Test @@ -185,12 +196,41 @@ public void readEquality() { public void queryOptionsTest() { int chunks = 3; String tag = "app=spanner,env=test,action=query"; - Options options = Options.fromQueryOptions(Options.prefetchChunks(chunks), Options.tag(tag)); + boolean dataBoost = true; + Options options = + Options.fromQueryOptions( + Options.prefetchChunks(chunks), Options.tag(tag), Options.dataBoostEnabled(true)); assertThat(options.toString()) - .isEqualTo("prefetchChunks: " + chunks + " " + "tag: " + tag + " "); + .isEqualTo( + "prefetchChunks: " + + chunks + + " " + + "tag: " + + tag + + " " + + "dataBoostEnabled: " + + dataBoost + + " "); assertThat(options.prefetchChunks()).isEqualTo(chunks); assertThat(options.tag()).isEqualTo(tag); - assertThat(options.hashCode()).isEqualTo(-97431824); + assertEquals(dataBoost, options.dataBoostEnabled()); + assertThat(options.hashCode()).isEqualTo(1274581983); + } + + @Test + public void testReadOptionsDataBoost() { + boolean dataBoost = true; + Options options = Options.fromReadOptions(Options.dataBoostEnabled(true)); + assertTrue(options.hasDataBoostEnabled()); + assertEquals("dataBoostEnabled: " + dataBoost + " ", options.toString()); + } + + @Test + public void testQueryOptionsDataBoost() { + boolean dataBoost = true; + Options options = Options.fromQueryOptions(Options.dataBoostEnabled(true)); + assertTrue(options.hasDataBoostEnabled()); + assertEquals("dataBoostEnabled: " + dataBoost + " ", options.toString()); } @Test @@ -300,6 +340,15 @@ public void testUpdateOptionsPriority() { assertEquals("priority: " + priority + " ", options.toString()); } + @Test + public void testRpcPriorityEnumFromProto() { + assertEquals(RpcPriority.fromProto(Priority.PRIORITY_LOW), RpcPriority.LOW); + assertEquals(RpcPriority.fromProto(Priority.PRIORITY_MEDIUM), RpcPriority.MEDIUM); + assertEquals(RpcPriority.fromProto(Priority.PRIORITY_HIGH), RpcPriority.HIGH); + assertEquals(RpcPriority.fromProto(Priority.PRIORITY_UNSPECIFIED), RpcPriority.UNSPECIFIED); + assertEquals(RpcPriority.fromProto(null), RpcPriority.UNSPECIFIED); + } + @Test public void testTransactionOptionsHashCode() { Options option1 = Options.fromTransactionOptions(); 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 147f66220b3..4e5b1e0395c 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 @@ -94,6 +94,7 @@ import org.junit.runners.Parameterized.Parameters; import org.mockito.Mock; import org.mockito.Mockito; +import org.threeten.bp.Duration; /** Tests for SessionPool that mock out the underlying stub. */ @RunWith(Parameterized.class) @@ -1188,6 +1189,47 @@ public void testGetDatabaseRole() throws Exception { assertEquals(TEST_DATABASE_ROLE, pool.getDatabaseRole()); } + @Test + public void testWaitOnMinSessionsWhenSessionsAreCreatedBeforeTimeout() { + doAnswer( + invocation -> + executor.submit( + () -> { + SessionConsumerImpl consumer = + invocation.getArgument(2, SessionConsumerImpl.class); + consumer.onSessionReady(mockSession()); + })) + .when(sessionClient) + .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.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); + } + + @Test(expected = SpannerException.class) + public void testWaitOnMinSessionsThrowsExceptionWhenTimeoutIsReached() { + // Does not call onSessionReady, so session pool is never populated + doAnswer(invocation -> null) + .when(sessionClient) + .asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class)); + + options = + SessionPoolOptions.newBuilder() + .setMinSessions(minSessions + 1) + .setMaxSessions(minSessions + 1) + .setWaitForMinSessions(Duration.ofMillis(100)) + .build(); + pool = createPool(new FakeClock(), new FakeMetricRegistry(), SPANNER_DEFAULT_LABEL_VALUES); + pool.maybeWaitOnMinSessions(); + } + private void mockKeepAlive(Session session) { ReadContext context = mock(ReadContext.class); ResultSet resultSet = mock(ResultSet.class); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java index ed9484c5632..89a4a76e862 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java @@ -31,6 +31,7 @@ import com.google.cloud.spanner.IntegrationTestEnv; import com.google.cloud.spanner.KeySet; import com.google.cloud.spanner.Mutation; +import com.google.cloud.spanner.Options; import com.google.cloud.spanner.ParallelIntegrationTest; import com.google.cloud.spanner.Partition; import com.google.cloud.spanner.PartitionOptions; @@ -238,6 +239,25 @@ public void readUsingIndex() { assertThat(numRowsRead).isEqualTo(numRows); } + @Test + public void dataBoostRead() { + assumeFalse("Emulator does not support data boost read", isUsingEmulator()); + + BitSet seenRows = new BitSet(numRows); + TimestampBound bound = getRandomBound(); + PartitionOptions partitionParams = getRandomPartitionOptions(); + batchTxn = getBatchClient().batchReadOnlyTransaction(bound); + List partitions = + batchTxn.partitionRead( + partitionParams, + TABLE_NAME, + KeySet.all(), + Arrays.asList("Key", "Data", "Fingerprint", "Size"), + Options.dataBoostEnabled(true)); + BatchTransactionId txnID = batchTxn.getBatchTransactionId(); + fetchAndValidateRows(partitions, txnID, seenRows); + } + @After public void tearDown() { if (batchTxn != null) { @@ -273,6 +293,22 @@ private PartitionOptions getRandomPartitionOptions() { return parameters; } + @Test + public void dataBoostQuery() { + assumeFalse("Emulator does not support data boost query", isUsingEmulator()); + BitSet seenRows = new BitSet(numRows); + TimestampBound bound = getRandomBound(); + PartitionOptions partitionParams = getRandomPartitionOptions(); + batchTxn = getBatchClient().batchReadOnlyTransaction(bound); + List partitions = + batchTxn.partitionQuery( + partitionParams, + Statement.of("SELECT Key, Data, Fingerprint, Size FROM " + TABLE_NAME), + Options.dataBoostEnabled(true)); + BatchTransactionId txnID = batchTxn.getBatchTransactionId(); + fetchAndValidateRows(partitions, txnID, seenRows); + } + private TimestampBound getRandomBound() { Date date = new Date(); switch (RANDOM.nextInt(3)) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java index c23cd1d0fbe..59944b5b935 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseRolePermissionTest.java @@ -100,7 +100,8 @@ public void grantAndRevokeDatabaseRolePermissions() throws Exception { .get(5, TimeUnit.MINUTES); // Connect to db with dbRoleParent. - SpannerOptions options = SpannerOptions.newBuilder().setDatabaseRole(dbRoleParent).build(); + SpannerOptions options = + testHelper.getOptions().toBuilder().setDatabaseRole(dbRoleParent).build(); Spanner spanner = options.getService(); DatabaseClient dbClient = spanner.getDatabaseClient(createdDatabase.getId()); @@ -158,7 +159,8 @@ public void roleWithNoPermissions() throws Exception { .get(5, TimeUnit.MINUTES); // Connect to db with dbRoleOrphan - SpannerOptions options = SpannerOptions.newBuilder().setDatabaseRole(dbRoleOrphan).build(); + SpannerOptions options = + testHelper.getOptions().toBuilder().setDatabaseRole(dbRoleOrphan).build(); Spanner spanner = options.getService(); DatabaseClient dbClient = spanner.getDatabaseClient(createdDatabase.getId()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java index b17546d293c..04bd5df2166 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java @@ -598,6 +598,7 @@ public void executeSqlTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); ResultSet actualResponse = client.executeSql(request); @@ -639,6 +640,7 @@ public void executeSqlExceptionTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); client.executeSql(request); Assert.fail("No exception raised"); @@ -742,6 +744,7 @@ public void readTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); ResultSet actualResponse = client.read(request); @@ -783,6 +786,7 @@ public void readExceptionTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); client.read(request); Assert.fail("No exception raised"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java index 863e6007b3b..9e23c7a0523 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java @@ -554,6 +554,7 @@ public void executeSqlTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); ResultSet actualResponse = client.executeSql(request); @@ -574,6 +575,7 @@ public void executeSqlTest() throws Exception { Assert.assertEquals(request.getSeqno(), actualRequest.getSeqno()); Assert.assertEquals(request.getQueryOptions(), actualRequest.getQueryOptions()); Assert.assertEquals(request.getRequestOptions(), actualRequest.getRequestOptions()); + Assert.assertEquals(request.getDataBoostEnabled(), actualRequest.getDataBoostEnabled()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -599,6 +601,7 @@ public void executeSqlExceptionTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); client.executeSql(request); Assert.fail("No exception raised"); @@ -631,6 +634,7 @@ public void executeStreamingSqlTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -661,6 +665,7 @@ public void executeStreamingSqlExceptionTest() throws Exception { .setSeqno(109325920) .setQueryOptions(ExecuteSqlRequest.QueryOptions.newBuilder().build()) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -761,6 +766,7 @@ public void readTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); ResultSet actualResponse = client.read(request); @@ -780,6 +786,7 @@ public void readTest() throws Exception { Assert.assertEquals(request.getResumeToken(), actualRequest.getResumeToken()); Assert.assertEquals(request.getPartitionToken(), actualRequest.getPartitionToken()); Assert.assertEquals(request.getRequestOptions(), actualRequest.getRequestOptions()); + Assert.assertEquals(request.getDataBoostEnabled(), actualRequest.getDataBoostEnabled()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -805,6 +812,7 @@ public void readExceptionTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); client.read(request); Assert.fail("No exception raised"); @@ -837,6 +845,7 @@ public void streamingReadTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -867,6 +876,7 @@ public void streamingReadExceptionTest() throws Exception { .setResumeToken(ByteString.EMPTY) .setPartitionToken(ByteString.EMPTY) .setRequestOptions(RequestOptions.newBuilder().build()) + .setDataBoostEnabled(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index e59fd23cb26..269a80db22b 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.36.1 + 6.38.2 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.36.1 + 6.38.2 diff --git a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java index 3f1113711a9..224679c6014 100644 --- a/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java +++ b/grpc-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseAdminGrpc.java @@ -949,7 +949,7 @@ public DatabaseAdminFutureStub newStub( * * restore a database from an existing backup * */ - public abstract static class DatabaseAdminImplBase implements io.grpc.BindableService { + public interface AsyncService { /** * @@ -958,7 +958,7 @@ public abstract static class DatabaseAdminImplBase implements io.grpc.BindableSe * Lists Cloud Spanner databases. * */ - public void listDatabases( + default void listDatabases( com.google.spanner.admin.database.v1.ListDatabasesRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -980,7 +980,7 @@ public void listDatabases( * [Database][google.spanner.admin.database.v1.Database], if successful. * */ - public void createDatabase( + default void createDatabase( com.google.spanner.admin.database.v1.CreateDatabaseRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -994,7 +994,7 @@ public void createDatabase( * Gets the state of a Cloud Spanner database. * */ - public void getDatabase( + default void getDatabase( com.google.spanner.admin.database.v1.GetDatabaseRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -1015,7 +1015,7 @@ public void getDatabase( * [UpdateDatabaseDdlMetadata][google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata]. The operation has no response. * */ - public void updateDatabaseDdl( + default void updateDatabaseDdl( com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1033,7 +1033,7 @@ public void updateDatabaseDdl( * after the database has been deleted. * */ - public void dropDatabase( + default void dropDatabase( com.google.spanner.admin.database.v1.DropDatabaseRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1049,7 +1049,7 @@ public void dropDatabase( * be queried using the [Operations][google.longrunning.Operations] API. * */ - public void getDatabaseDdl( + default void getDatabaseDdl( com.google.spanner.admin.database.v1.GetDatabaseDdlRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -1069,7 +1069,7 @@ public void getDatabaseDdl( * permission on [resource][google.iam.v1.SetIamPolicyRequest.resource]. * */ - public void setIamPolicy( + default void setIamPolicy( com.google.iam.v1.SetIamPolicyRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1089,7 +1089,7 @@ public void setIamPolicy( * permission on [resource][google.iam.v1.GetIamPolicyRequest.resource]. * */ - public void getIamPolicy( + default void getIamPolicy( com.google.iam.v1.GetIamPolicyRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1111,7 +1111,7 @@ public void getIamPolicy( * `spanner.backups.list` permission on the containing instance. * */ - public void testIamPermissions( + default void testIamPermissions( com.google.iam.v1.TestIamPermissionsRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -1137,7 +1137,7 @@ public void testIamPermissions( * of different databases can run concurrently. * */ - public void createBackup( + default void createBackup( com.google.spanner.admin.database.v1.CreateBackupRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1162,7 +1162,7 @@ public void createBackup( * Concurrent CopyBackup requests can run on the same source backup. * */ - public void copyBackup( + default void copyBackup( com.google.spanner.admin.database.v1.CopyBackupRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCopyBackupMethod(), responseObserver); @@ -1175,7 +1175,7 @@ public void copyBackup( * Gets metadata on a pending or completed [Backup][google.spanner.admin.database.v1.Backup]. * */ - public void getBackup( + default void getBackup( com.google.spanner.admin.database.v1.GetBackupRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetBackupMethod(), responseObserver); @@ -1188,7 +1188,7 @@ public void getBackup( * Updates a pending or completed [Backup][google.spanner.admin.database.v1.Backup]. * */ - public void updateBackup( + default void updateBackup( com.google.spanner.admin.database.v1.UpdateBackupRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1202,7 +1202,7 @@ public void updateBackup( * Deletes a pending or completed [Backup][google.spanner.admin.database.v1.Backup]. * */ - public void deleteBackup( + default void deleteBackup( com.google.spanner.admin.database.v1.DeleteBackupRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1218,7 +1218,7 @@ public void deleteBackup( * starting from the most recent `create_time`. * */ - public void listBackups( + default void listBackups( com.google.spanner.admin.database.v1.ListBackupsRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -1249,7 +1249,7 @@ public void listBackups( * first restore to complete. * */ - public void restoreDatabase( + default void restoreDatabase( com.google.spanner.admin.database.v1.RestoreDatabaseRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1270,7 +1270,7 @@ public void restoreDatabase( * and pending operations. * */ - public void listDatabaseOperations( + default void listDatabaseOperations( com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest request, io.grpc.stub.StreamObserver< com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse> @@ -1295,7 +1295,7 @@ public void listDatabaseOperations( * from the most recently started operation. * */ - public void listBackupOperations( + default void listBackupOperations( com.google.spanner.admin.database.v1.ListBackupOperationsRequest request, io.grpc.stub.StreamObserver< com.google.spanner.admin.database.v1.ListBackupOperationsResponse> @@ -1311,144 +1311,38 @@ public void listBackupOperations( * Lists Cloud Spanner database roles. * */ - public void listDatabaseRoles( + default void listDatabaseRoles( com.google.spanner.admin.database.v1.ListDatabaseRolesRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( getListDatabaseRolesMethod(), responseObserver); } + } + + /** + * Base class for the server implementation of the service DatabaseAdmin. + * + *

+   * Cloud Spanner Database Admin API
+   * The Cloud Spanner Database Admin API can be used to:
+   *   * create, drop, and list databases
+   *   * update the schema of pre-existing databases
+   *   * create, delete and list backups for a database
+   *   * restore a database from an existing backup
+   * 
+ */ + public abstract static class DatabaseAdminImplBase + implements io.grpc.BindableService, AsyncService { @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { - return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) - .addMethod( - getListDatabasesMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.ListDatabasesRequest, - com.google.spanner.admin.database.v1.ListDatabasesResponse>( - this, METHODID_LIST_DATABASES))) - .addMethod( - getCreateDatabaseMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.CreateDatabaseRequest, - com.google.longrunning.Operation>(this, METHODID_CREATE_DATABASE))) - .addMethod( - getGetDatabaseMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.GetDatabaseRequest, - com.google.spanner.admin.database.v1.Database>(this, METHODID_GET_DATABASE))) - .addMethod( - getUpdateDatabaseDdlMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest, - com.google.longrunning.Operation>(this, METHODID_UPDATE_DATABASE_DDL))) - .addMethod( - getDropDatabaseMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.DropDatabaseRequest, - com.google.protobuf.Empty>(this, METHODID_DROP_DATABASE))) - .addMethod( - getGetDatabaseDdlMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.GetDatabaseDdlRequest, - com.google.spanner.admin.database.v1.GetDatabaseDdlResponse>( - this, METHODID_GET_DATABASE_DDL))) - .addMethod( - getSetIamPolicyMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.SetIamPolicyRequest, com.google.iam.v1.Policy>( - this, METHODID_SET_IAM_POLICY))) - .addMethod( - getGetIamPolicyMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.GetIamPolicyRequest, com.google.iam.v1.Policy>( - this, METHODID_GET_IAM_POLICY))) - .addMethod( - getTestIamPermissionsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.TestIamPermissionsRequest, - com.google.iam.v1.TestIamPermissionsResponse>( - this, METHODID_TEST_IAM_PERMISSIONS))) - .addMethod( - getCreateBackupMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.CreateBackupRequest, - com.google.longrunning.Operation>(this, METHODID_CREATE_BACKUP))) - .addMethod( - getCopyBackupMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.CopyBackupRequest, - com.google.longrunning.Operation>(this, METHODID_COPY_BACKUP))) - .addMethod( - getGetBackupMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.GetBackupRequest, - com.google.spanner.admin.database.v1.Backup>(this, METHODID_GET_BACKUP))) - .addMethod( - getUpdateBackupMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.UpdateBackupRequest, - com.google.spanner.admin.database.v1.Backup>(this, METHODID_UPDATE_BACKUP))) - .addMethod( - getDeleteBackupMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.DeleteBackupRequest, - com.google.protobuf.Empty>(this, METHODID_DELETE_BACKUP))) - .addMethod( - getListBackupsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.ListBackupsRequest, - com.google.spanner.admin.database.v1.ListBackupsResponse>( - this, METHODID_LIST_BACKUPS))) - .addMethod( - getRestoreDatabaseMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.RestoreDatabaseRequest, - com.google.longrunning.Operation>(this, METHODID_RESTORE_DATABASE))) - .addMethod( - getListDatabaseOperationsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest, - com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse>( - this, METHODID_LIST_DATABASE_OPERATIONS))) - .addMethod( - getListBackupOperationsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.ListBackupOperationsRequest, - com.google.spanner.admin.database.v1.ListBackupOperationsResponse>( - this, METHODID_LIST_BACKUP_OPERATIONS))) - .addMethod( - getListDatabaseRolesMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.database.v1.ListDatabaseRolesRequest, - com.google.spanner.admin.database.v1.ListDatabaseRolesResponse>( - this, METHODID_LIST_DATABASE_ROLES))) - .build(); + return DatabaseAdminGrpc.bindService(this); } } /** - * + * A stub to allow clients to do asynchronous rpc calls to service DatabaseAdmin. * *
    * Cloud Spanner Database Admin API
@@ -1876,7 +1770,7 @@ public void listDatabaseRoles(
   }
 
   /**
-   *
+   * A stub to allow clients to do synchronous rpc calls to service DatabaseAdmin.
    *
    * 
    * Cloud Spanner Database Admin API
@@ -2241,7 +2135,7 @@ public com.google.spanner.admin.database.v1.ListDatabaseRolesResponse listDataba
   }
 
   /**
-   *
+   * A stub to allow clients to do ListenableFuture-style rpc calls to service DatabaseAdmin.
    *
    * 
    * Cloud Spanner Database Admin API
@@ -2643,10 +2537,10 @@ private static final class MethodHandlers
           io.grpc.stub.ServerCalls.ServerStreamingMethod,
           io.grpc.stub.ServerCalls.ClientStreamingMethod,
           io.grpc.stub.ServerCalls.BidiStreamingMethod {
-    private final DatabaseAdminImplBase serviceImpl;
+    private final AsyncService serviceImpl;
     private final int methodId;
 
-    MethodHandlers(DatabaseAdminImplBase serviceImpl, int methodId) {
+    MethodHandlers(AsyncService serviceImpl, int methodId) {
       this.serviceImpl = serviceImpl;
       this.methodId = methodId;
     }
@@ -2782,6 +2676,130 @@ public io.grpc.stub.StreamObserver invoke(
     }
   }
 
+  public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+    return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+        .addMethod(
+            getListDatabasesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.ListDatabasesRequest,
+                    com.google.spanner.admin.database.v1.ListDatabasesResponse>(
+                    service, METHODID_LIST_DATABASES)))
+        .addMethod(
+            getCreateDatabaseMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.CreateDatabaseRequest,
+                    com.google.longrunning.Operation>(service, METHODID_CREATE_DATABASE)))
+        .addMethod(
+            getGetDatabaseMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.GetDatabaseRequest,
+                    com.google.spanner.admin.database.v1.Database>(service, METHODID_GET_DATABASE)))
+        .addMethod(
+            getUpdateDatabaseDdlMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest,
+                    com.google.longrunning.Operation>(service, METHODID_UPDATE_DATABASE_DDL)))
+        .addMethod(
+            getDropDatabaseMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.DropDatabaseRequest,
+                    com.google.protobuf.Empty>(service, METHODID_DROP_DATABASE)))
+        .addMethod(
+            getGetDatabaseDdlMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.GetDatabaseDdlRequest,
+                    com.google.spanner.admin.database.v1.GetDatabaseDdlResponse>(
+                    service, METHODID_GET_DATABASE_DDL)))
+        .addMethod(
+            getSetIamPolicyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers(
+                    service, METHODID_SET_IAM_POLICY)))
+        .addMethod(
+            getGetIamPolicyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers(
+                    service, METHODID_GET_IAM_POLICY)))
+        .addMethod(
+            getTestIamPermissionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.iam.v1.TestIamPermissionsRequest,
+                    com.google.iam.v1.TestIamPermissionsResponse>(
+                    service, METHODID_TEST_IAM_PERMISSIONS)))
+        .addMethod(
+            getCreateBackupMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.CreateBackupRequest,
+                    com.google.longrunning.Operation>(service, METHODID_CREATE_BACKUP)))
+        .addMethod(
+            getCopyBackupMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.CopyBackupRequest,
+                    com.google.longrunning.Operation>(service, METHODID_COPY_BACKUP)))
+        .addMethod(
+            getGetBackupMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.GetBackupRequest,
+                    com.google.spanner.admin.database.v1.Backup>(service, METHODID_GET_BACKUP)))
+        .addMethod(
+            getUpdateBackupMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.UpdateBackupRequest,
+                    com.google.spanner.admin.database.v1.Backup>(service, METHODID_UPDATE_BACKUP)))
+        .addMethod(
+            getDeleteBackupMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.DeleteBackupRequest,
+                    com.google.protobuf.Empty>(service, METHODID_DELETE_BACKUP)))
+        .addMethod(
+            getListBackupsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.ListBackupsRequest,
+                    com.google.spanner.admin.database.v1.ListBackupsResponse>(
+                    service, METHODID_LIST_BACKUPS)))
+        .addMethod(
+            getRestoreDatabaseMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.RestoreDatabaseRequest,
+                    com.google.longrunning.Operation>(service, METHODID_RESTORE_DATABASE)))
+        .addMethod(
+            getListDatabaseOperationsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.ListDatabaseOperationsRequest,
+                    com.google.spanner.admin.database.v1.ListDatabaseOperationsResponse>(
+                    service, METHODID_LIST_DATABASE_OPERATIONS)))
+        .addMethod(
+            getListBackupOperationsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.ListBackupOperationsRequest,
+                    com.google.spanner.admin.database.v1.ListBackupOperationsResponse>(
+                    service, METHODID_LIST_BACKUP_OPERATIONS)))
+        .addMethod(
+            getListDatabaseRolesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.database.v1.ListDatabaseRolesRequest,
+                    com.google.spanner.admin.database.v1.ListDatabaseRolesResponse>(
+                    service, METHODID_LIST_DATABASE_ROLES)))
+        .build();
+  }
+
   private abstract static class DatabaseAdminBaseDescriptorSupplier
       implements io.grpc.protobuf.ProtoFileDescriptorSupplier,
           io.grpc.protobuf.ProtoServiceDescriptorSupplier {
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index 313f5ed877e..d7ea200b129 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.36.1
+  6.38.2
   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.36.1
+    6.38.2
   
   
     
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java b/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java
index 8e01cc281ad..9bf015fcaa8 100644
--- a/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java
+++ b/grpc-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceAdminGrpc.java
@@ -758,7 +758,7 @@ public InstanceAdminFutureStub newStub(
    * databases in that instance, and their performance may suffer.
    * 
*/ - public abstract static class InstanceAdminImplBase implements io.grpc.BindableService { + public interface AsyncService { /** * @@ -767,7 +767,7 @@ public abstract static class InstanceAdminImplBase implements io.grpc.BindableSe * Lists the supported instance configurations for a given project. *
*/ - public void listInstanceConfigs( + default void listInstanceConfigs( com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest request, io.grpc.stub.StreamObserver< com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse> @@ -783,7 +783,7 @@ public void listInstanceConfigs( * Gets information about a particular instance configuration. *
*/ - public void getInstanceConfig( + default void getInstanceConfig( com.google.spanner.admin.instance.v1.GetInstanceConfigRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -830,7 +830,7 @@ public void getInstanceConfig( * [parent][google.spanner.admin.instance.v1.CreateInstanceConfigRequest.parent]. * */ - public void createInstanceConfig( + default void createInstanceConfig( com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -878,7 +878,7 @@ public void createInstanceConfig( * the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name]. * */ - public void updateInstanceConfig( + default void updateInstanceConfig( com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -897,7 +897,7 @@ public void updateInstanceConfig( * the resource [name][google.spanner.admin.instance.v1.InstanceConfig.name]. * */ - public void deleteInstanceConfig( + default void deleteInstanceConfig( com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -921,7 +921,7 @@ public void deleteInstanceConfig( * from the most recently started operation. * */ - public void listInstanceConfigOperations( + default void listInstanceConfigOperations( com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest request, io.grpc.stub.StreamObserver< com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse> @@ -937,7 +937,7 @@ public void listInstanceConfigOperations( * Lists all instances in the given project. * */ - public void listInstances( + default void listInstances( com.google.spanner.admin.instance.v1.ListInstancesRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -952,7 +952,7 @@ public void listInstances( * Gets information about a particular instance. * */ - public void getInstance( + default void getInstance( com.google.spanner.admin.instance.v1.GetInstanceRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -993,7 +993,7 @@ public void getInstance( * [Instance][google.spanner.admin.instance.v1.Instance], if successful. * */ - public void createInstance( + default void createInstance( com.google.spanner.admin.instance.v1.CreateInstanceRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1038,7 +1038,7 @@ public void createInstance( * the resource [name][google.spanner.admin.instance.v1.Instance.name]. * */ - public void updateInstance( + default void updateInstance( com.google.spanner.admin.instance.v1.UpdateInstanceRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1058,7 +1058,7 @@ public void updateInstance( * is permanently deleted. * */ - public void deleteInstance( + default void deleteInstance( com.google.spanner.admin.instance.v1.DeleteInstanceRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1075,7 +1075,7 @@ public void deleteInstance( * [resource][google.iam.v1.SetIamPolicyRequest.resource]. * */ - public void setIamPolicy( + default void setIamPolicy( com.google.iam.v1.SetIamPolicyRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1092,7 +1092,7 @@ public void setIamPolicy( * [resource][google.iam.v1.GetIamPolicyRequest.resource]. * */ - public void getIamPolicy( + default void getIamPolicy( com.google.iam.v1.GetIamPolicyRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -1110,112 +1110,50 @@ public void getIamPolicy( * empty set of permissions. * */ - public void testIamPermissions( + default void testIamPermissions( com.google.iam.v1.TestIamPermissionsRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( getTestIamPermissionsMethod(), responseObserver); } + } + + /** + * Base class for the server implementation of the service InstanceAdmin. + * + *
+   * Cloud Spanner Instance Admin API
+   * The Cloud Spanner Instance Admin API can be used to create, delete,
+   * modify and list instances. Instances are dedicated Cloud Spanner serving
+   * and storage resources to be used by Cloud Spanner databases.
+   * Each instance has a "configuration", which dictates where the
+   * serving resources for the Cloud Spanner instance are located (e.g.,
+   * US-central, Europe). Configurations are created by Google based on
+   * resource availability.
+   * Cloud Spanner billing is based on the instances that exist and their
+   * sizes. After an instance exists, there are no additional
+   * per-database or per-operation charges for use of the instance
+   * (though there may be additional network bandwidth charges).
+   * Instances offer isolation: problems with databases in one instance
+   * will not affect other instances. However, within an instance
+   * databases can affect each other. For example, if one database in an
+   * instance receives a lot of requests and consumes most of the
+   * instance resources, fewer resources are available for other
+   * databases in that instance, and their performance may suffer.
+   * 
+ */ + public abstract static class InstanceAdminImplBase + implements io.grpc.BindableService, AsyncService { @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { - return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) - .addMethod( - getListInstanceConfigsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest, - com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse>( - this, METHODID_LIST_INSTANCE_CONFIGS))) - .addMethod( - getGetInstanceConfigMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.GetInstanceConfigRequest, - com.google.spanner.admin.instance.v1.InstanceConfig>( - this, METHODID_GET_INSTANCE_CONFIG))) - .addMethod( - getCreateInstanceConfigMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest, - com.google.longrunning.Operation>(this, METHODID_CREATE_INSTANCE_CONFIG))) - .addMethod( - getUpdateInstanceConfigMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest, - com.google.longrunning.Operation>(this, METHODID_UPDATE_INSTANCE_CONFIG))) - .addMethod( - getDeleteInstanceConfigMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest, - com.google.protobuf.Empty>(this, METHODID_DELETE_INSTANCE_CONFIG))) - .addMethod( - getListInstanceConfigOperationsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest, - com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse>( - this, METHODID_LIST_INSTANCE_CONFIG_OPERATIONS))) - .addMethod( - getListInstancesMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.ListInstancesRequest, - com.google.spanner.admin.instance.v1.ListInstancesResponse>( - this, METHODID_LIST_INSTANCES))) - .addMethod( - getGetInstanceMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.GetInstanceRequest, - com.google.spanner.admin.instance.v1.Instance>(this, METHODID_GET_INSTANCE))) - .addMethod( - getCreateInstanceMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.CreateInstanceRequest, - com.google.longrunning.Operation>(this, METHODID_CREATE_INSTANCE))) - .addMethod( - getUpdateInstanceMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.UpdateInstanceRequest, - com.google.longrunning.Operation>(this, METHODID_UPDATE_INSTANCE))) - .addMethod( - getDeleteInstanceMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.admin.instance.v1.DeleteInstanceRequest, - com.google.protobuf.Empty>(this, METHODID_DELETE_INSTANCE))) - .addMethod( - getSetIamPolicyMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.SetIamPolicyRequest, com.google.iam.v1.Policy>( - this, METHODID_SET_IAM_POLICY))) - .addMethod( - getGetIamPolicyMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.GetIamPolicyRequest, com.google.iam.v1.Policy>( - this, METHODID_GET_IAM_POLICY))) - .addMethod( - getTestIamPermissionsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.iam.v1.TestIamPermissionsRequest, - com.google.iam.v1.TestIamPermissionsResponse>( - this, METHODID_TEST_IAM_PERMISSIONS))) - .build(); + return InstanceAdminGrpc.bindService(this); } } /** - * + * A stub to allow clients to do asynchronous rpc calls to service InstanceAdmin. * *
    * Cloud Spanner Instance Admin API
@@ -1637,7 +1575,7 @@ public void testIamPermissions(
   }
 
   /**
-   *
+   * A stub to allow clients to do synchronous rpc calls to service InstanceAdmin.
    *
    * 
    * Cloud Spanner Instance Admin API
@@ -2009,7 +1947,7 @@ public com.google.iam.v1.TestIamPermissionsResponse testIamPermissions(
   }
 
   /**
-   *
+   * A stub to allow clients to do ListenableFuture-style rpc calls to service InstanceAdmin.
    *
    * 
    * Cloud Spanner Instance Admin API
@@ -2412,10 +2350,10 @@ private static final class MethodHandlers
           io.grpc.stub.ServerCalls.ServerStreamingMethod,
           io.grpc.stub.ServerCalls.ClientStreamingMethod,
           io.grpc.stub.ServerCalls.BidiStreamingMethod {
-    private final InstanceAdminImplBase serviceImpl;
+    private final AsyncService serviceImpl;
     private final int methodId;
 
-    MethodHandlers(InstanceAdminImplBase serviceImpl, int methodId) {
+    MethodHandlers(AsyncService serviceImpl, int methodId) {
       this.serviceImpl = serviceImpl;
       this.methodId = methodId;
     }
@@ -2519,6 +2457,98 @@ public io.grpc.stub.StreamObserver invoke(
     }
   }
 
+  public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+    return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+        .addMethod(
+            getListInstanceConfigsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.ListInstanceConfigsRequest,
+                    com.google.spanner.admin.instance.v1.ListInstanceConfigsResponse>(
+                    service, METHODID_LIST_INSTANCE_CONFIGS)))
+        .addMethod(
+            getGetInstanceConfigMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.GetInstanceConfigRequest,
+                    com.google.spanner.admin.instance.v1.InstanceConfig>(
+                    service, METHODID_GET_INSTANCE_CONFIG)))
+        .addMethod(
+            getCreateInstanceConfigMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest,
+                    com.google.longrunning.Operation>(service, METHODID_CREATE_INSTANCE_CONFIG)))
+        .addMethod(
+            getUpdateInstanceConfigMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest,
+                    com.google.longrunning.Operation>(service, METHODID_UPDATE_INSTANCE_CONFIG)))
+        .addMethod(
+            getDeleteInstanceConfigMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest,
+                    com.google.protobuf.Empty>(service, METHODID_DELETE_INSTANCE_CONFIG)))
+        .addMethod(
+            getListInstanceConfigOperationsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest,
+                    com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsResponse>(
+                    service, METHODID_LIST_INSTANCE_CONFIG_OPERATIONS)))
+        .addMethod(
+            getListInstancesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.ListInstancesRequest,
+                    com.google.spanner.admin.instance.v1.ListInstancesResponse>(
+                    service, METHODID_LIST_INSTANCES)))
+        .addMethod(
+            getGetInstanceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.GetInstanceRequest,
+                    com.google.spanner.admin.instance.v1.Instance>(service, METHODID_GET_INSTANCE)))
+        .addMethod(
+            getCreateInstanceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.CreateInstanceRequest,
+                    com.google.longrunning.Operation>(service, METHODID_CREATE_INSTANCE)))
+        .addMethod(
+            getUpdateInstanceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.UpdateInstanceRequest,
+                    com.google.longrunning.Operation>(service, METHODID_UPDATE_INSTANCE)))
+        .addMethod(
+            getDeleteInstanceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.admin.instance.v1.DeleteInstanceRequest,
+                    com.google.protobuf.Empty>(service, METHODID_DELETE_INSTANCE)))
+        .addMethod(
+            getSetIamPolicyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers(
+                    service, METHODID_SET_IAM_POLICY)))
+        .addMethod(
+            getGetIamPolicyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers(
+                    service, METHODID_GET_IAM_POLICY)))
+        .addMethod(
+            getTestIamPermissionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.iam.v1.TestIamPermissionsRequest,
+                    com.google.iam.v1.TestIamPermissionsResponse>(
+                    service, METHODID_TEST_IAM_PERMISSIONS)))
+        .build();
+  }
+
   private abstract static class InstanceAdminBaseDescriptorSupplier
       implements io.grpc.protobuf.ProtoFileDescriptorSupplier,
           io.grpc.protobuf.ProtoServiceDescriptorSupplier {
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 9ce98b3f896..b75de470ee5 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.36.1
+  6.38.2
   grpc-google-cloud-spanner-v1
   GRPC library for grpc-google-cloud-spanner-v1
   
     com.google.cloud
     google-cloud-spanner-parent
-    6.36.1
+    6.38.2
   
   
     
diff --git a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java
index 752e8057336..59ab44cc122 100644
--- a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java
+++ b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java
@@ -701,7 +701,7 @@ public SpannerFutureStub newStub(
    * transactions on data stored in Cloud Spanner databases.
    * 
*/ - public abstract static class SpannerImplBase implements io.grpc.BindableService { + public interface AsyncService { /** * @@ -725,7 +725,7 @@ public abstract static class SpannerImplBase implements io.grpc.BindableService * periodically, e.g., `"SELECT 1"`. *
*/ - public void createSession( + default void createSession( com.google.spanner.v1.CreateSessionRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -741,7 +741,7 @@ public void createSession( * See https://goo.gl/TgSFN2 for best practices on session cache management. *
*/ - public void batchCreateSessions( + default void batchCreateSessions( com.google.spanner.v1.BatchCreateSessionsRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -758,7 +758,7 @@ public void batchCreateSessions( * alive. * */ - public void getSession( + default void getSession( com.google.spanner.v1.GetSessionRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSessionMethod(), responseObserver); @@ -771,7 +771,7 @@ public void getSession( * Lists all sessions in a given database. * */ - public void listSessions( + default void listSessions( com.google.spanner.v1.ListSessionsRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -787,7 +787,7 @@ public void listSessions( * this session. * */ - public void deleteSession( + default void deleteSession( com.google.spanner.v1.DeleteSessionRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -809,7 +809,7 @@ public void deleteSession( * [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] instead. * */ - public void executeSql( + default void executeSql( com.google.spanner.v1.ExecuteSqlRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getExecuteSqlMethod(), responseObserver); @@ -826,7 +826,7 @@ public void executeSql( * column value can exceed 10 MiB. * */ - public void executeStreamingSql( + default void executeStreamingSql( com.google.spanner.v1.ExecuteSqlRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -848,7 +848,7 @@ public void executeStreamingSql( * are not executed. * */ - public void executeBatchDml( + default void executeBatchDml( com.google.spanner.v1.ExecuteBatchDmlRequest request, io.grpc.stub.StreamObserver responseObserver) { @@ -873,7 +873,7 @@ public void executeBatchDml( * [StreamingRead][google.spanner.v1.Spanner.StreamingRead] instead. * */ - public void read( + default void read( com.google.spanner.v1.ReadRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getReadMethod(), responseObserver); @@ -890,7 +890,7 @@ public void read( * 10 MiB. * */ - public void streamingRead( + default void streamingRead( com.google.spanner.v1.ReadRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -907,7 +907,7 @@ public void streamingRead( * side-effect. * */ - public void beginTransaction( + default void beginTransaction( com.google.spanner.v1.BeginTransactionRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -932,7 +932,7 @@ public void beginTransaction( * state of things as they are now. * */ - public void commit( + default void commit( com.google.spanner.v1.CommitRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCommitMethod(), responseObserver); @@ -951,7 +951,7 @@ public void commit( * found. `Rollback` never returns `ABORTED`. * */ - public void rollback( + default void rollback( com.google.spanner.v1.RollbackRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRollbackMethod(), responseObserver); @@ -973,7 +973,7 @@ public void rollback( * the whole operation must be restarted from the beginning. * */ - public void partitionQuery( + default void partitionQuery( com.google.spanner.v1.PartitionQueryRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( @@ -998,115 +998,33 @@ public void partitionQuery( * the whole operation must be restarted from the beginning. * */ - public void partitionRead( + default void partitionRead( com.google.spanner.v1.PartitionReadRequest request, io.grpc.stub.StreamObserver responseObserver) { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( getPartitionReadMethod(), responseObserver); } + } + + /** + * Base class for the server implementation of the service Spanner. + * + *
+   * Cloud Spanner API
+   * The Cloud Spanner API can be used to manage sessions and execute
+   * transactions on data stored in Cloud Spanner databases.
+   * 
+ */ + public abstract static class SpannerImplBase implements io.grpc.BindableService, AsyncService { @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { - return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) - .addMethod( - getCreateSessionMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.CreateSessionRequest, com.google.spanner.v1.Session>( - this, METHODID_CREATE_SESSION))) - .addMethod( - getBatchCreateSessionsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.BatchCreateSessionsRequest, - com.google.spanner.v1.BatchCreateSessionsResponse>( - this, METHODID_BATCH_CREATE_SESSIONS))) - .addMethod( - getGetSessionMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.GetSessionRequest, com.google.spanner.v1.Session>( - this, METHODID_GET_SESSION))) - .addMethod( - getListSessionsMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.ListSessionsRequest, - com.google.spanner.v1.ListSessionsResponse>(this, METHODID_LIST_SESSIONS))) - .addMethod( - getDeleteSessionMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.DeleteSessionRequest, com.google.protobuf.Empty>( - this, METHODID_DELETE_SESSION))) - .addMethod( - getExecuteSqlMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.ExecuteSqlRequest, com.google.spanner.v1.ResultSet>( - this, METHODID_EXECUTE_SQL))) - .addMethod( - getExecuteStreamingSqlMethod(), - io.grpc.stub.ServerCalls.asyncServerStreamingCall( - new MethodHandlers< - com.google.spanner.v1.ExecuteSqlRequest, - com.google.spanner.v1.PartialResultSet>( - this, METHODID_EXECUTE_STREAMING_SQL))) - .addMethod( - getExecuteBatchDmlMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.ExecuteBatchDmlRequest, - com.google.spanner.v1.ExecuteBatchDmlResponse>( - this, METHODID_EXECUTE_BATCH_DML))) - .addMethod( - getReadMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.ReadRequest, com.google.spanner.v1.ResultSet>( - this, METHODID_READ))) - .addMethod( - getStreamingReadMethod(), - io.grpc.stub.ServerCalls.asyncServerStreamingCall( - new MethodHandlers< - com.google.spanner.v1.ReadRequest, com.google.spanner.v1.PartialResultSet>( - this, METHODID_STREAMING_READ))) - .addMethod( - getBeginTransactionMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.BeginTransactionRequest, - com.google.spanner.v1.Transaction>(this, METHODID_BEGIN_TRANSACTION))) - .addMethod( - getCommitMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.CommitRequest, com.google.spanner.v1.CommitResponse>( - this, METHODID_COMMIT))) - .addMethod( - getRollbackMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.RollbackRequest, com.google.protobuf.Empty>( - this, METHODID_ROLLBACK))) - .addMethod( - getPartitionQueryMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.PartitionQueryRequest, - com.google.spanner.v1.PartitionResponse>(this, METHODID_PARTITION_QUERY))) - .addMethod( - getPartitionReadMethod(), - io.grpc.stub.ServerCalls.asyncUnaryCall( - new MethodHandlers< - com.google.spanner.v1.PartitionReadRequest, - com.google.spanner.v1.PartitionResponse>(this, METHODID_PARTITION_READ))) - .build(); + return SpannerGrpc.bindService(this); } } /** - * + * A stub to allow clients to do asynchronous rpc calls to service Spanner. * *
    * Cloud Spanner API
@@ -1453,7 +1371,7 @@ public void partitionRead(
   }
 
   /**
-   *
+   * A stub to allow clients to do synchronous rpc calls to service Spanner.
    *
    * 
    * Cloud Spanner API
@@ -1762,7 +1680,7 @@ public com.google.spanner.v1.PartitionResponse partitionRead(
   }
 
   /**
-   *
+   * A stub to allow clients to do ListenableFuture-style rpc calls to service Spanner.
    *
    * 
    * Cloud Spanner API
@@ -2064,10 +1982,10 @@ private static final class MethodHandlers
           io.grpc.stub.ServerCalls.ServerStreamingMethod,
           io.grpc.stub.ServerCalls.ClientStreamingMethod,
           io.grpc.stub.ServerCalls.BidiStreamingMethod {
-    private final SpannerImplBase serviceImpl;
+    private final AsyncService serviceImpl;
     private final int methodId;
 
-    MethodHandlers(SpannerImplBase serviceImpl, int methodId) {
+    MethodHandlers(AsyncService serviceImpl, int methodId) {
       this.serviceImpl = serviceImpl;
       this.methodId = methodId;
     }
@@ -2174,6 +2092,104 @@ public io.grpc.stub.StreamObserver invoke(
     }
   }
 
+  public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) {
+    return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+        .addMethod(
+            getCreateSessionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.CreateSessionRequest, com.google.spanner.v1.Session>(
+                    service, METHODID_CREATE_SESSION)))
+        .addMethod(
+            getBatchCreateSessionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.BatchCreateSessionsRequest,
+                    com.google.spanner.v1.BatchCreateSessionsResponse>(
+                    service, METHODID_BATCH_CREATE_SESSIONS)))
+        .addMethod(
+            getGetSessionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.GetSessionRequest, com.google.spanner.v1.Session>(
+                    service, METHODID_GET_SESSION)))
+        .addMethod(
+            getListSessionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ListSessionsRequest,
+                    com.google.spanner.v1.ListSessionsResponse>(service, METHODID_LIST_SESSIONS)))
+        .addMethod(
+            getDeleteSessionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.DeleteSessionRequest, com.google.protobuf.Empty>(
+                    service, METHODID_DELETE_SESSION)))
+        .addMethod(
+            getExecuteSqlMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ExecuteSqlRequest, com.google.spanner.v1.ResultSet>(
+                    service, METHODID_EXECUTE_SQL)))
+        .addMethod(
+            getExecuteStreamingSqlMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ExecuteSqlRequest,
+                    com.google.spanner.v1.PartialResultSet>(
+                    service, METHODID_EXECUTE_STREAMING_SQL)))
+        .addMethod(
+            getExecuteBatchDmlMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ExecuteBatchDmlRequest,
+                    com.google.spanner.v1.ExecuteBatchDmlResponse>(
+                    service, METHODID_EXECUTE_BATCH_DML)))
+        .addMethod(
+            getReadMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ReadRequest, com.google.spanner.v1.ResultSet>(
+                    service, METHODID_READ)))
+        .addMethod(
+            getStreamingReadMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.ReadRequest, com.google.spanner.v1.PartialResultSet>(
+                    service, METHODID_STREAMING_READ)))
+        .addMethod(
+            getBeginTransactionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.BeginTransactionRequest,
+                    com.google.spanner.v1.Transaction>(service, METHODID_BEGIN_TRANSACTION)))
+        .addMethod(
+            getCommitMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.CommitRequest, com.google.spanner.v1.CommitResponse>(
+                    service, METHODID_COMMIT)))
+        .addMethod(
+            getRollbackMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.RollbackRequest, com.google.protobuf.Empty>(
+                    service, METHODID_ROLLBACK)))
+        .addMethod(
+            getPartitionQueryMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.PartitionQueryRequest,
+                    com.google.spanner.v1.PartitionResponse>(service, METHODID_PARTITION_QUERY)))
+        .addMethod(
+            getPartitionReadMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+                new MethodHandlers<
+                    com.google.spanner.v1.PartitionReadRequest,
+                    com.google.spanner.v1.PartitionResponse>(service, METHODID_PARTITION_READ)))
+        .build();
+  }
+
   private abstract static class SpannerBaseDescriptorSupplier
       implements io.grpc.protobuf.ProtoFileDescriptorSupplier,
           io.grpc.protobuf.ProtoServiceDescriptorSupplier {
diff --git a/pom.xml b/pom.xml
index 0154ffa82cd..4c8d7ac073b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   com.google.cloud
   google-cloud-spanner-parent
   pom
-  6.36.1
+  6.38.2
   Google Cloud Spanner Parent
   https://github.com/googleapis/java-spanner
   
@@ -54,7 +54,7 @@
     UTF-8
     github
     google-cloud-spanner-parent
-    3.3.0
+    3.6.0
   
 
   
@@ -62,37 +62,37 @@
       
         com.google.api.grpc
         proto-google-cloud-spanner-admin-instance-v1
-        6.36.1
+        6.38.2
       
       
         com.google.api.grpc
         proto-google-cloud-spanner-v1
-        6.36.1
+        6.38.2
       
       
         com.google.api.grpc
         proto-google-cloud-spanner-admin-database-v1
-        6.36.1
+        6.38.2
       
       
         com.google.api.grpc
         grpc-google-cloud-spanner-v1
-        6.36.1
+        6.38.2
       
       
         com.google.api.grpc
         grpc-google-cloud-spanner-admin-instance-v1
-        6.36.1
+        6.38.2
       
       
         com.google.api.grpc
         grpc-google-cloud-spanner-admin-database-v1
-        6.36.1
+        6.38.2
       
       
         com.google.cloud
         google-cloud-spanner
-        6.36.1
+        6.38.2
       
 
       
@@ -142,7 +142,7 @@
       
         org.apache.maven.plugins
         maven-compiler-plugin
-        3.10.1
+        3.11.0
         
           1.8
           1.8
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index 793f57530b8..8412b9e5644 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.36.1
+  6.38.2
   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.36.1
+    6.38.2
   
   
     
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 d5a258d0e52..0d0d3d7b1d3 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
@@ -194,14 +194,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "\033ENCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CO"
           + "NFIG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031G"
           + "OOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_M"
-          + "ANAGED_ENCRYPTION\020\003B\377\001\n$com.google.spann"
-          + "er.admin.database.v1B\013BackupProtoP\001ZHgoo"
-          + "gle.golang.org/genproto/googleapis/spann"
-          + "er/admin/database/v1;database\252\002&Google.C"
-          + "loud.Spanner.Admin.Database.V1\312\002&Google\\"
-          + "Cloud\\Spanner\\Admin\\Database\\V1\352\002+Google"
-          + "::Cloud::Spanner::Admin::Database::V1b\006p"
-          + "roto3"
+          + "ANAGED_ENCRYPTION\020\003B\375\001\n$com.google.spann"
+          + "er.admin.database.v1B\013BackupProtoP\001ZFclo"
+          + "ud.google.com/go/spanner/admin/database/"
+          + "apiv1/databasepb;databasepb\252\002&Google.Clo"
+          + "ud.Spanner.Admin.Database.V1\312\002&Google\\Cl"
+          + "oud\\Spanner\\Admin\\Database\\V1\352\002+Google::"
+          + "Cloud::Spanner::Admin::Database::V1b\006pro"
+          + "to3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
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 73dfc1efb12..a381d3c5122 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
@@ -69,21 +69,20 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "USTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Database"
           + "Dialect\022 \n\034DATABASE_DIALECT_UNSPECIFIED\020"
           + "\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRESQL"
-          + "\020\002B\244\004\n$com.google.spanner.admin.database"
-          + ".v1B\013CommonProtoP\001ZHgoogle.golang.org/ge"
-          + "nproto/googleapis/spanner/admin/database"
-          + "/v1;database\252\002&Google.Cloud.Spanner.Admi"
-          + "n.Database.V1\312\002&Google\\Cloud\\Spanner\\Adm"
-          + "in\\Database\\V1\352\002+Google::Cloud::Spanner:"
-          + ":Admin::Database::V1\352Ax\n!cloudkms.google"
-          + "apis.com/CryptoKey\022Sprojects/{project}/l"
-          + "ocations/{location}/keyRings/{key_ring}/"
-          + "cryptoKeys/{crypto_key}\352A\246\001\n(cloudkms.go"
-          + "ogleapis.com/CryptoKeyVersion\022zprojects/"
-          + "{project}/locations/{location}/keyRings/"
-          + "{key_ring}/cryptoKeys/{crypto_key}/crypt"
-          + "oKeyVersions/{crypto_key_version}b\006proto"
-          + "3"
+          + "\020\002B\242\004\n$com.google.spanner.admin.database"
+          + ".v1B\013CommonProtoP\001ZFcloud.google.com/go/"
+          + "spanner/admin/database/apiv1/databasepb;"
+          + "databasepb\252\002&Google.Cloud.Spanner.Admin."
+          + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin"
+          + "\\Database\\V1\352\002+Google::Cloud::Spanner::A"
+          + "dmin::Database::V1\352Ax\n!cloudkms.googleap"
+          + "is.com/CryptoKey\022Sprojects/{project}/loc"
+          + "ations/{location}/keyRings/{key_ring}/cr"
+          + "yptoKeys/{crypto_key}\352A\246\001\n(cloudkms.goog"
+          + "leapis.com/CryptoKeyVersion\022zprojects/{p"
+          + "roject}/locations/{location}/keyRings/{k"
+          + "ey_ring}/cryptoKeys/{crypto_key}/cryptoK"
+          + "eyVersions/{crypto_key_version}b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
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 9a4c1888ef2..e91f9a65717 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
@@ -351,16 +351,16 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "/*}/databaseRoles\332A\006parent\032x\312A\026spanner.g"
           + "oogleapis.com\322A\\https://www.googleapis.c"
           + "om/auth/cloud-platform,https://www.googl"
-          + "eapis.com/auth/spanner.adminB\332\002\n$com.goo"
+          + "eapis.com/auth/spanner.adminB\330\002\n$com.goo"
           + "gle.spanner.admin.database.v1B\031SpannerDa"
-          + "tabaseAdminProtoP\001ZHgoogle.golang.org/ge"
-          + "nproto/googleapis/spanner/admin/database"
-          + "/v1;database\252\002&Google.Cloud.Spanner.Admi"
-          + "n.Database.V1\312\002&Google\\Cloud\\Spanner\\Adm"
-          + "in\\Database\\V1\352\002+Google::Cloud::Spanner:"
-          + ":Admin::Database::V1\352AJ\n\037spanner.googlea"
-          + "pis.com/Instance\022\'projects/{project}/ins"
-          + "tances/{instance}b\006proto3"
+          + "tabaseAdminProtoP\001ZFcloud.google.com/go/"
+          + "spanner/admin/database/apiv1/databasepb;"
+          + "databasepb\252\002&Google.Cloud.Spanner.Admin."
+          + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin"
+          + "\\Database\\V1\352\002+Google::Cloud::Spanner::A"
+          + "dmin::Database::V1\352AJ\n\037spanner.googleapi"
+          + "s.com/Instance\022\'projects/{project}/insta"
+          + "nces/{instance}b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
index 5e019543eb9..fce69a2f3e3 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/backup.proto
@@ -24,7 +24,7 @@ import "google/protobuf/timestamp.proto";
 import "google/spanner/admin/database/v1/common.proto";
 
 option csharp_namespace = "Google.Cloud.Spanner.Admin.Database.V1";
-option go_package = "google.golang.org/genproto/googleapis/spanner/admin/database/v1;database";
+option go_package = "cloud.google.com/go/spanner/admin/database/apiv1/databasepb;databasepb";
 option java_multiple_files = true;
 option java_outer_classname = "BackupProto";
 option java_package = "com.google.spanner.admin.database.v1";
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
index 720ebb95dbc..32d7519e3a4 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/common.proto
@@ -22,7 +22,7 @@ import "google/protobuf/timestamp.proto";
 import "google/rpc/status.proto";
 
 option csharp_namespace = "Google.Cloud.Spanner.Admin.Database.V1";
-option go_package = "google.golang.org/genproto/googleapis/spanner/admin/database/v1;database";
+option go_package = "cloud.google.com/go/spanner/admin/database/apiv1/databasepb;databasepb";
 option java_multiple_files = true;
 option java_outer_classname = "CommonProto";
 option java_package = "com.google.spanner.admin.database.v1";
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
index 91489ae4b45..4d98fa1313f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
@@ -29,7 +29,7 @@ import "google/spanner/admin/database/v1/backup.proto";
 import "google/spanner/admin/database/v1/common.proto";
 
 option csharp_namespace = "Google.Cloud.Spanner.Admin.Database.V1";
-option go_package = "google.golang.org/genproto/googleapis/spanner/admin/database/v1;database";
+option go_package = "cloud.google.com/go/spanner/admin/database/apiv1/databasepb;databasepb";
 option java_multiple_files = true;
 option java_outer_classname = "SpannerDatabaseAdminProto";
 option java_package = "com.google.spanner.admin.database.v1";
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index a406c33d5fd..bfb562c2b1b 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.36.1
+  6.38.2
   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.36.1
+    6.38.2
   
   
     
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 913672c72b9..a608a7917fb 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
@@ -46,14 +46,13 @@ 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\377\001\n$com.google.spanner."
-          + "admin.instance.v1B\013CommonProtoP\001ZHgoogle"
-          + ".golang.org/genproto/googleapis/spanner/"
-          + "admin/instance/v1;instance\252\002&Google.Clou"
-          + "d.Spanner.Admin.Instance.V1\312\002&Google\\Clo"
-          + "ud\\Spanner\\Admin\\Instance\\V1\352\002+Google::C"
-          + "loud::Spanner::Admin::Instance::V1b\006prot"
-          + "o3"
+          + "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"
     };
     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/SpannerInstanceAdminProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
index 9a698cf6736..3d5256cbd62 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
@@ -333,14 +333,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "missions:\001*\332A\024resource,permissions\032x\312A\026s"
           + "panner.googleapis.com\322A\\https://www.goog"
           + "leapis.com/auth/cloud-platform,https://w"
-          + "ww.googleapis.com/auth/spanner.adminB\215\002\n"
+          + "ww.googleapis.com/auth/spanner.adminB\213\002\n"
           + "$com.google.spanner.admin.instance.v1B\031S"
-          + "pannerInstanceAdminProtoP\001ZHgoogle.golan"
-          + "g.org/genproto/googleapis/spanner/admin/"
-          + "instance/v1;instance\252\002&Google.Cloud.Span"
-          + "ner.Admin.Instance.V1\312\002&Google\\Cloud\\Spa"
-          + "nner\\Admin\\Instance\\V1\352\002+Google::Cloud::"
-          + "Spanner::Admin::Instance::V1b\006proto3"
+          + "pannerInstanceAdminProtoP\001ZFcloud.google"
+          + ".com/go/spanner/admin/instance/apiv1/ins"
+          + "tancepb;instancepb\252\002&Google.Cloud.Spanne"
+          + "r.Admin.Instance.V1\312\002&Google\\Cloud\\Spann"
+          + "er\\Admin\\Instance\\V1\352\002+Google::Cloud::Sp"
+          + "anner::Admin::Instance::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
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 e93b33476e8..ffb69748fbc 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
@@ -19,7 +19,7 @@ package google.spanner.admin.instance.v1;
 import "google/protobuf/timestamp.proto";
 
 option csharp_namespace = "Google.Cloud.Spanner.Admin.Instance.V1";
-option go_package = "google.golang.org/genproto/googleapis/spanner/admin/instance/v1;instance";
+option go_package = "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb;instancepb";
 option java_multiple_files = true;
 option java_outer_classname = "CommonProto";
 option java_package = "com.google.spanner.admin.instance.v1";
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 85b041134ea..0b4a35705b4 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
@@ -29,7 +29,7 @@ import "google/protobuf/timestamp.proto";
 import "google/spanner/admin/instance/v1/common.proto";
 
 option csharp_namespace = "Google.Cloud.Spanner.Admin.Instance.V1";
-option go_package = "google.golang.org/genproto/googleapis/spanner/admin/instance/v1;instance";
+option go_package = "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb;instancepb";
 option java_multiple_files = true;
 option java_outer_classname = "SpannerInstanceAdminProto";
 option java_package = "com.google.spanner.admin.instance.v1";
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 2e6be256040..e7e953aeb80 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.36.1
+  6.38.2
   proto-google-cloud-spanner-v1
   PROTO library for proto-google-cloud-spanner-v1
   
     com.google.cloud
     google-cloud-spanner-parent
-    6.36.1
+    6.38.2
   
   
     
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 8aa46a48cd7..29045351437 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
@@ -50,12 +50,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "it_timestamp\030\001 \001(\0132\032.google.protobuf.Tim"
           + "estamp\022C\n\014commit_stats\030\002 \001(\0132-.google.sp"
           + "anner.v1.CommitResponse.CommitStats\032%\n\013C"
-          + "ommitStats\022\026\n\016mutation_count\030\001 \001(\003B\271\001\n\025c"
+          + "ommitStats\022\026\n\016mutation_count\030\001 \001(\003B\266\001\n\025c"
           + "om.google.spanner.v1B\023CommitResponseProt"
-          + "oP\001Z8google.golang.org/genproto/googleap"
-          + "is/spanner/v1;spanner\252\002\027Google.Cloud.Spa"
-          + "nner.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Goog"
-          + "le::Cloud::Spanner::V1b\006proto3"
+          + "oP\001Z5cloud.google.com/go/spanner/apiv1/s"
+          + "pannerpb;spannerpb\252\002\027Google.Cloud.Spanne"
+          + "r.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google:"
+          + ":Cloud::Spanner::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
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 24ddc22b399..70f4c8219c2 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
@@ -1972,6 +1972,27 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(
         : requestOptions_;
   }
 
+  public static final int DATA_BOOST_ENABLED_FIELD_NUMBER = 16;
+  private boolean dataBoostEnabled_ = false;
+  /**
+   *
+   *
+   * 
+   * If this is for a partitioned query and this field is set to `true`, the
+   * request will be executed via Spanner independent compute resources.
+   * If the field is set to `true` but the request does not set
+   * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+   * 
+ * + * bool data_boost_enabled = 16; + * + * @return The dataBoostEnabled. + */ + @java.lang.Override + public boolean getDataBoostEnabled() { + return dataBoostEnabled_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -2018,6 +2039,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (requestOptions_ != null) { output.writeMessage(11, getRequestOptions()); } + if (dataBoostEnabled_ != false) { + output.writeBool(16, dataBoostEnabled_); + } getUnknownFields().writeTo(output); } @@ -2067,6 +2091,9 @@ public int getSerializedSize() { if (requestOptions_ != null) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getRequestOptions()); } + if (dataBoostEnabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(16, dataBoostEnabled_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2105,6 +2132,7 @@ public boolean equals(final java.lang.Object obj) { if (hasRequestOptions()) { if (!getRequestOptions().equals(other.getRequestOptions())) return false; } + if (getDataBoostEnabled() != other.getDataBoostEnabled()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -2148,6 +2176,8 @@ public int hashCode() { hash = (37 * hash) + REQUEST_OPTIONS_FIELD_NUMBER; hash = (53 * hash) + getRequestOptions().hashCode(); } + hash = (37 * hash) + DATA_BOOST_ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDataBoostEnabled()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -2335,6 +2365,7 @@ public Builder clear() { requestOptionsBuilder_.dispose(); requestOptionsBuilder_ = null; } + dataBoostEnabled_ = false; return this; } @@ -2408,6 +2439,9 @@ private void buildPartial0(com.google.spanner.v1.ExecuteSqlRequest result) { result.requestOptions_ = requestOptionsBuilder_ == null ? requestOptions_ : requestOptionsBuilder_.build(); } + if (((from_bitField0_ & 0x00000800) != 0)) { + result.dataBoostEnabled_ = dataBoostEnabled_; + } } @java.lang.Override @@ -2491,6 +2525,9 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteSqlRequest other) { if (other.hasRequestOptions()) { mergeRequestOptions(other.getRequestOptions()); } + if (other.getDataBoostEnabled() != false) { + setDataBoostEnabled(other.getDataBoostEnabled()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2590,6 +2627,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000400; break; } // case 90 + case 128: + { + dataBoostEnabled_ = input.readBool(); + bitField0_ |= 0x00000800; + break; + } // case 128 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -4210,6 +4253,68 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( return requestOptionsBuilder_; } + private boolean dataBoostEnabled_; + /** + * + * + *
+     * If this is for a partitioned query and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 16; + * + * @return The dataBoostEnabled. + */ + @java.lang.Override + public boolean getDataBoostEnabled() { + return dataBoostEnabled_; + } + /** + * + * + *
+     * If this is for a partitioned query and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 16; + * + * @param value The dataBoostEnabled to set. + * @return This builder for chaining. + */ + public Builder setDataBoostEnabled(boolean value) { + + dataBoostEnabled_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + /** + * + * + *
+     * If this is for a partitioned query and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 16; + * + * @return This builder for chaining. + */ + public Builder clearDataBoostEnabled() { + bitField0_ = (bitField0_ & ~0x00000800); + dataBoostEnabled_ = false; + 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-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 a0093f23f96..832c2f3c503 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 @@ -429,4 +429,20 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * .google.spanner.v1.RequestOptions request_options = 11; */ com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); + + /** + * + * + *
+   * If this is for a partitioned query and this field is set to `true`, the
+   * request will be executed via Spanner independent compute resources.
+   * If the field is set to `true` but the request does not set
+   * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+   * 
+ * + * bool data_boost_enabled = 16; + * + * @return The dataBoostEnabled. + */ + boolean getDataBoostEnabled(); } 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 b79f3d8169b..c448bd7a673 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 @@ -54,12 +54,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + ".ListValueH\001B\020\n\016start_key_typeB\016\n\014end_ke" + "y_type\"l\n\006KeySet\022(\n\004keys\030\001 \003(\0132\032.google." + "protobuf.ListValue\022+\n\006ranges\030\002 \003(\0132\033.goo" - + "gle.spanner.v1.KeyRange\022\013\n\003all\030\003 \001(\010B\257\001\n" - + "\025com.google.spanner.v1B\tKeysProtoP\001Z8goo" - + "gle.golang.org/genproto/googleapis/spann" - + "er/v1;spanner\252\002\027Google.Cloud.Spanner.V1\312" - + "\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google::Clou" - + "d::Spanner::V1b\006proto3" + + "gle.spanner.v1.KeyRange\022\013\n\003all\030\003 \001(\010B\254\001\n" + + "\025com.google.spanner.v1B\tKeysProtoP\001Z5clo" + + "ud.google.com/go/spanner/apiv1/spannerpb" + + ";spannerpb\252\002\027Google.Cloud.Spanner.V1\312\002\027G" + + "oogle\\Cloud\\Spanner\\V1\352\002\032Google::Cloud::" + + "Spanner::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( 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 1c10bfaa9ca..a1706fc4cd1 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 @@ -63,12 +63,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Lis" + "tValue\032M\n\006Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007" + "key_set\030\002 \001(\0132\031.google.spanner.v1.KeySet" - + "B\003\340A\002B\013\n\toperationB\263\001\n\025com.google.spanne" - + "r.v1B\rMutationProtoP\001Z8google.golang.org" - + "/genproto/googleapis/spanner/v1;spanner\252" - + "\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud" - + "\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1" - + "b\006proto3" + + "B\003\340A\002B\013\n\toperationB\260\001\n\025com.google.spanne" + + "r.v1B\rMutationProtoP\001Z5cloud.google.com/" + + "go/spanner/apiv1/spannerpb;spannerpb\252\002\027G" + + "oogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Sp" + + "anner\\V1\352\002\032Google::Cloud::Spanner::V1b\006p" + + "roto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( 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 21cc5708fbc..c3bc87108b6 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 @@ -75,12 +75,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\"8\n\004Kind\022\024\n\020KIND_U" + "NSPECIFIED\020\000\022\016\n\nRELATIONAL\020\001\022\n\n\006SCALAR\020\002" + "\"<\n\tQueryPlan\022/\n\nplan_nodes\030\001 \003(\0132\033.goog" - + "le.spanner.v1.PlanNodeB\264\001\n\025com.google.sp" - + "anner.v1B\016QueryPlanProtoP\001Z8google.golan" - + "g.org/genproto/googleapis/spanner/v1;spa" - + "nner\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\" - + "Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanne" - + "r::V1b\006proto3" + + "le.spanner.v1.PlanNodeB\261\001\n\025com.google.sp" + + "anner.v1B\016QueryPlanProtoP\001Z5cloud.google" + + ".com/go/spanner/apiv1/spannerpb;spannerp" + + "b\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Clo" + + "ud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::" + + "V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( 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 d0dffe37c1c..5b75750eabf 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 @@ -541,6 +541,27 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } + public static final int DATA_BOOST_ENABLED_FIELD_NUMBER = 15; + private boolean dataBoostEnabled_ = false; + /** + * + * + *
+   * If this is for a partitioned read and this field is set to `true`, the
+   * request will be executed via Spanner independent compute resources.
+   * If the field is set to `true` but the request does not set
+   * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+   * 
+ * + * bool data_boost_enabled = 15; + * + * @return The dataBoostEnabled. + */ + @java.lang.Override + public boolean getDataBoostEnabled() { + return dataBoostEnabled_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -585,6 +606,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (requestOptions_ != null) { output.writeMessage(11, getRequestOptions()); } + if (dataBoostEnabled_ != false) { + output.writeBool(15, dataBoostEnabled_); + } getUnknownFields().writeTo(output); } @@ -629,6 +653,9 @@ public int getSerializedSize() { if (requestOptions_ != null) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, getRequestOptions()); } + if (dataBoostEnabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(15, dataBoostEnabled_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -663,6 +690,7 @@ public boolean equals(final java.lang.Object obj) { if (hasRequestOptions()) { if (!getRequestOptions().equals(other.getRequestOptions())) return false; } + if (getDataBoostEnabled() != other.getDataBoostEnabled()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -702,6 +730,8 @@ public int hashCode() { hash = (37 * hash) + REQUEST_OPTIONS_FIELD_NUMBER; hash = (53 * hash) + getRequestOptions().hashCode(); } + hash = (37 * hash) + DATA_BOOST_ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDataBoostEnabled()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -864,6 +894,7 @@ public Builder clear() { requestOptionsBuilder_.dispose(); requestOptionsBuilder_ = null; } + dataBoostEnabled_ = false; return this; } @@ -937,6 +968,9 @@ private void buildPartial0(com.google.spanner.v1.ReadRequest result) { result.requestOptions_ = requestOptionsBuilder_ == null ? requestOptions_ : requestOptionsBuilder_.build(); } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.dataBoostEnabled_ = dataBoostEnabled_; + } } @java.lang.Override @@ -1027,6 +1061,9 @@ public Builder mergeFrom(com.google.spanner.v1.ReadRequest other) { if (other.hasRequestOptions()) { mergeRequestOptions(other.getRequestOptions()); } + if (other.getDataBoostEnabled() != false) { + setDataBoostEnabled(other.getDataBoostEnabled()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1114,6 +1151,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000200; break; } // case 90 + case 120: + { + dataBoostEnabled_ = input.readBool(); + bitField0_ |= 0x00000400; + break; + } // case 120 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -2477,6 +2520,68 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( return requestOptionsBuilder_; } + private boolean dataBoostEnabled_; + /** + * + * + *
+     * If this is for a partitioned read and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 15; + * + * @return The dataBoostEnabled. + */ + @java.lang.Override + public boolean getDataBoostEnabled() { + return dataBoostEnabled_; + } + /** + * + * + *
+     * If this is for a partitioned read and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 15; + * + * @param value The dataBoostEnabled to set. + * @return This builder for chaining. + */ + public Builder setDataBoostEnabled(boolean value) { + + dataBoostEnabled_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + /** + * + * + *
+     * If this is for a partitioned read and this field is set to `true`, the
+     * request will be executed via Spanner independent compute resources.
+     * If the field is set to `true` but the request does not set
+     * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+     * 
+ * + * bool data_boost_enabled = 15; + * + * @return This builder for chaining. + */ + public Builder clearDataBoostEnabled() { + bitField0_ = (bitField0_ & ~0x00000400); + dataBoostEnabled_ = false; + 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-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 5988afde18f..fc986d632d4 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 @@ -344,4 +344,20 @@ public interface ReadRequestOrBuilder * .google.spanner.v1.RequestOptions request_options = 11; */ com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); + + /** + * + * + *
+   * If this is for a partitioned read and this field is set to `true`, the
+   * request will be executed via Spanner independent compute resources.
+   * If the field is set to `true` but the request does not set
+   * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
+   * 
+ * + * bool data_boost_enabled = 15; + * + * @return The dataBoostEnabled. + */ + boolean getDataBoostEnabled(); } 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 3c90e33d825..72abfc21124 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 @@ -75,12 +75,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "nner.v1.QueryPlan\022,\n\013query_stats\030\002 \001(\0132\027" + ".google.protobuf.Struct\022\031\n\017row_count_exa" + "ct\030\003 \001(\003H\000\022\037\n\025row_count_lower_bound\030\004 \001(" - + "\003H\000B\013\n\trow_countB\267\001\n\025com.google.spanner." - + "v1B\016ResultSetProtoP\001Z8google.golang.org/" - + "genproto/googleapis/spanner/v1;spanner\370\001" - + "\001\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Clo" - + "ud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::" - + "V1b\006proto3" + + "\003H\000B\013\n\trow_countB\264\001\n\025com.google.spanner." + + "v1B\016ResultSetProtoP\001Z5cloud.google.com/g" + + "o/spanner/apiv1/spannerpb;spannerpb\370\001\001\252\002" + + "\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud\\" + + "Spanner\\V1\352\002\032Google::Cloud::Spanner::V1b" + + "\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( 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 21c752c5631..4cf68b20170 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 @@ -191,7 +191,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\n\017transaction_tag\030\003 \001(\t\"^\n\010Priority\022\030\n\024P" + "RIORITY_UNSPECIFIED\020\000\022\020\n\014PRIORITY_LOW\020\001\022" + "\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRIORITY_HIGH\020\003\"" - + "\344\005\n\021ExecuteSqlRequest\0227\n\007session\030\001 \001(\tB&" + + "\200\006\n\021ExecuteSqlRequest\0227\n\007session\030\001 \001(\tB&" + "\340A\002\372A \n\036spanner.googleapis.com/Session\022;" + "\n\013transaction\030\002 \001(\0132&.google.spanner.v1." + "TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n" @@ -204,157 +204,158 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\001(\003\022H\n\rquery_options\030\n \001(\01321.google.span" + "ner.v1.ExecuteSqlRequest.QueryOptions\022:\n" + "\017request_options\030\013 \001(\0132!.google.spanner." - + "v1.RequestOptions\032O\n\014QueryOptions\022\031\n\021opt" - + "imizer_version\030\001 \001(\t\022$\n\034optimizer_statis" - + "tics_package\030\002 \001(\t\032J\n\017ParamTypesEntry\022\013\n" - + "\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.spann" - + "er.v1.Type:\0028\001\".\n\tQueryMode\022\n\n\006NORMAL\020\000\022" - + "\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\"\240\004\n\026ExecuteBatchD" - + "mlRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036span" - + "ner.googleapis.com/Session\022@\n\013transactio" - + "n\030\002 \001(\0132&.google.spanner.v1.TransactionS" - + "electorB\003\340A\002\022L\n\nstatements\030\003 \003(\01323.googl" - + "e.spanner.v1.ExecuteBatchDmlRequest.Stat" - + "ementB\003\340A\002\022\022\n\005seqno\030\004 \001(\003B\003\340A\002\022:\n\017reques" - + "t_options\030\005 \001(\0132!.google.spanner.v1.Requ" - + "estOptions\032\354\001\n\tStatement\022\020\n\003sql\030\001 \001(\tB\003\340" - + "A\002\022\'\n\006params\030\002 \001(\0132\027.google.protobuf.Str" - + "uct\022X\n\013param_types\030\003 \003(\0132C.google.spanne" - + "r.v1.ExecuteBatchDmlRequest.Statement.Pa" - + "ramTypesEntry\032J\n\017ParamTypesEntry\022\013\n\003key\030" - + "\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.spanner.v1" - + ".Type:\0028\001\"p\n\027ExecuteBatchDmlResponse\0221\n\013" - + "result_sets\030\001 \003(\0132\034.google.spanner.v1.Re" - + "sultSet\022\"\n\006status\030\002 \001(\0132\022.google.rpc.Sta" - + "tus\"H\n\020PartitionOptions\022\034\n\024partition_siz" - + "e_bytes\030\001 \001(\003\022\026\n\016max_partitions\030\002 \001(\003\"\243\003" - + "\n\025PartitionQueryRequest\0227\n\007session\030\001 \001(\t" - + "B&\340A\002\372A \n\036spanner.googleapis.com/Session" - + "\022;\n\013transaction\030\002 \001(\0132&.google.spanner.v" - + "1.TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022" - + "\'\n\006params\030\004 \001(\0132\027.google.protobuf.Struct" - + "\022M\n\013param_types\030\005 \003(\01328.google.spanner.v" - + "1.PartitionQueryRequest.ParamTypesEntry\022" - + ">\n\021partition_options\030\006 \001(\0132#.google.span" - + "ner.v1.PartitionOptions\032J\n\017ParamTypesEnt" - + "ry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google." - + "spanner.v1.Type:\0028\001\"\261\002\n\024PartitionReadReq" - + "uest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.g" - + "oogleapis.com/Session\022;\n\013transaction\030\002 \001" - + "(\0132&.google.spanner.v1.TransactionSelect" - + "or\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022\017\n" - + "\007columns\030\005 \003(\t\022/\n\007key_set\030\006 \001(\0132\031.google" - + ".spanner.v1.KeySetB\003\340A\002\022>\n\021partition_opt" - + "ions\030\t \001(\0132#.google.spanner.v1.Partition" - + "Options\"$\n\tPartition\022\027\n\017partition_token\030" - + "\001 \001(\014\"z\n\021PartitionResponse\0220\n\npartitions" - + "\030\001 \003(\0132\034.google.spanner.v1.Partition\0223\n\013" - + "transaction\030\002 \001(\0132\036.google.spanner.v1.Tr" - + "ansaction\"\347\002\n\013ReadRequest\0227\n\007session\030\001 \001" - + "(\tB&\340A\002\372A \n\036spanner.googleapis.com/Sessi" - + "on\022;\n\013transaction\030\002 \001(\0132&.google.spanner" - + ".v1.TransactionSelector\022\022\n\005table\030\003 \001(\tB\003" - + "\340A\002\022\r\n\005index\030\004 \001(\t\022\024\n\007columns\030\005 \003(\tB\003\340A\002" - + "\022/\n\007key_set\030\006 \001(\0132\031.google.spanner.v1.Ke" - + "ySetB\003\340A\002\022\r\n\005limit\030\010 \001(\003\022\024\n\014resume_token" - + "\030\t \001(\014\022\027\n\017partition_token\030\n \001(\014\022:\n\017reque" - + "st_options\030\013 \001(\0132!.google.spanner.v1.Req" - + "uestOptions\"\313\001\n\027BeginTransactionRequest\022" - + "7\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.google" - + "apis.com/Session\022;\n\007options\030\002 \001(\0132%.goog" - + "le.spanner.v1.TransactionOptionsB\003\340A\002\022:\n" - + "\017request_options\030\003 \001(\0132!.google.spanner." - + "v1.RequestOptions\"\303\002\n\rCommitRequest\0227\n\007s" - + "ession\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis" - + ".com/Session\022\030\n\016transaction_id\030\002 \001(\014H\000\022G" - + "\n\026single_use_transaction\030\003 \001(\0132%.google." - + "spanner.v1.TransactionOptionsH\000\022.\n\tmutat" - + "ions\030\004 \003(\0132\033.google.spanner.v1.Mutation\022" - + "\033\n\023return_commit_stats\030\005 \001(\010\022:\n\017request_" - + "options\030\006 \001(\0132!.google.spanner.v1.Reques" - + "tOptionsB\r\n\013transaction\"g\n\017RollbackReque" - + "st\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.goo" - + "gleapis.com/Session\022\033\n\016transaction_id\030\002 " - + "\001(\014B\003\340A\0022\300\026\n\007Spanner\022\246\001\n\rCreateSession\022\'" - + ".google.spanner.v1.CreateSessionRequest\032" - + "\032.google.spanner.v1.Session\"P\202\323\344\223\002?\":/v1" - + "/{database=projects/*/instances/*/databa" - + "ses/*}/sessions:\001*\332A\010database\022\340\001\n\023BatchC" - + "reateSessions\022-.google.spanner.v1.BatchC" - + "reateSessionsRequest\032..google.spanner.v1" - + ".BatchCreateSessionsResponse\"j\202\323\344\223\002K\"F/v" - + "1/{database=projects/*/instances/*/datab" - + "ases/*}/sessions:batchCreate:\001*\332A\026databa" - + "se,session_count\022\227\001\n\nGetSession\022$.google" - + ".spanner.v1.GetSessionRequest\032\032.google.s" - + "panner.v1.Session\"G\202\323\344\223\002:\0228/v1/{name=pro" - + "jects/*/instances/*/databases/*/sessions" - + "/*}\332A\004name\022\256\001\n\014ListSessions\022&.google.spa" - + "nner.v1.ListSessionsRequest\032\'.google.spa" - + "nner.v1.ListSessionsResponse\"M\202\323\344\223\002<\022:/v" - + "1/{database=projects/*/instances/*/datab" - + "ases/*}/sessions\332A\010database\022\231\001\n\rDeleteSe" - + "ssion\022\'.google.spanner.v1.DeleteSessionR" - + "equest\032\026.google.protobuf.Empty\"G\202\323\344\223\002:*8" - + "/v1/{name=projects/*/instances/*/databas" - + "es/*/sessions/*}\332A\004name\022\243\001\n\nExecuteSql\022$" - + ".google.spanner.v1.ExecuteSqlRequest\032\034.g" - + "oogle.spanner.v1.ResultSet\"Q\202\323\344\223\002K\"F/v1/" - + "{session=projects/*/instances/*/database" - + "s/*/sessions/*}:executeSql:\001*\022\276\001\n\023Execut" - + "eStreamingSql\022$.google.spanner.v1.Execut" - + "eSqlRequest\032#.google.spanner.v1.PartialR" - + "esultSet\"Z\202\323\344\223\002T\"O/v1/{session=projects/" - + "*/instances/*/databases/*/sessions/*}:ex" - + "ecuteStreamingSql:\001*0\001\022\300\001\n\017ExecuteBatchD" - + "ml\022).google.spanner.v1.ExecuteBatchDmlRe" - + "quest\032*.google.spanner.v1.ExecuteBatchDm" - + "lResponse\"V\202\323\344\223\002P\"K/v1/{session=projects" - + "/*/instances/*/databases/*/sessions/*}:e" - + "xecuteBatchDml:\001*\022\221\001\n\004Read\022\036.google.span" - + "ner.v1.ReadRequest\032\034.google.spanner.v1.R" - + "esultSet\"K\202\323\344\223\002E\"@/v1/{session=projects/" - + "*/instances/*/databases/*/sessions/*}:re" - + "ad:\001*\022\254\001\n\rStreamingRead\022\036.google.spanner" - + ".v1.ReadRequest\032#.google.spanner.v1.Part" - + "ialResultSet\"T\202\323\344\223\002N\"I/v1/{session=proje" - + "cts/*/instances/*/databases/*/sessions/*" - + "}:streamingRead:\001*0\001\022\311\001\n\020BeginTransactio" - + "n\022*.google.spanner.v1.BeginTransactionRe" - + "quest\032\036.google.spanner.v1.Transaction\"i\202" - + "\323\344\223\002Q\"L/v1/{session=projects/*/instances" - + "/*/databases/*/sessions/*}:beginTransact" - + "ion:\001*\332A\017session,options\022\353\001\n\006Commit\022 .go" - + "ogle.spanner.v1.CommitRequest\032!.google.s" - + "panner.v1.CommitResponse\"\233\001\202\323\344\223\002G\"B/v1/{" + + "v1.RequestOptions\022\032\n\022data_boost_enabled\030" + + "\020 \001(\010\032O\n\014QueryOptions\022\031\n\021optimizer_versi" + + "on\030\001 \001(\t\022$\n\034optimizer_statistics_package" + + "\030\002 \001(\t\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&" + + "\n\005value\030\002 \001(\0132\027.google.spanner.v1.Type:\002" + + "8\001\".\n\tQueryMode\022\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n" + + "\007PROFILE\020\002\"\240\004\n\026ExecuteBatchDmlRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleap" + + "is.com/Session\022@\n\013transaction\030\002 \001(\0132&.go" + + "ogle.spanner.v1.TransactionSelectorB\003\340A\002" + + "\022L\n\nstatements\030\003 \003(\01323.google.spanner.v1" + + ".ExecuteBatchDmlRequest.StatementB\003\340A\002\022\022" + + "\n\005seqno\030\004 \001(\003B\003\340A\002\022:\n\017request_options\030\005 " + + "\001(\0132!.google.spanner.v1.RequestOptions\032\354" + + "\001\n\tStatement\022\020\n\003sql\030\001 \001(\tB\003\340A\002\022\'\n\006params" + + "\030\002 \001(\0132\027.google.protobuf.Struct\022X\n\013param" + + "_types\030\003 \003(\0132C.google.spanner.v1.Execute" + + "BatchDmlRequest.Statement.ParamTypesEntr" + + "y\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005val" + + "ue\030\002 \001(\0132\027.google.spanner.v1.Type:\0028\001\"p\n" + + "\027ExecuteBatchDmlResponse\0221\n\013result_sets\030" + + "\001 \003(\0132\034.google.spanner.v1.ResultSet\022\"\n\006s" + + "tatus\030\002 \001(\0132\022.google.rpc.Status\"H\n\020Parti" + + "tionOptions\022\034\n\024partition_size_bytes\030\001 \001(" + + "\003\022\026\n\016max_partitions\030\002 \001(\003\"\243\003\n\025PartitionQ" + + "ueryRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" + + "anner.googleapis.com/Session\022;\n\013transact" + + "ion\030\002 \001(\0132&.google.spanner.v1.Transactio" + + "nSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006params\030\004 " + + "\001(\0132\027.google.protobuf.Struct\022M\n\013param_ty" + + "pes\030\005 \003(\01328.google.spanner.v1.PartitionQ" + + "ueryRequest.ParamTypesEntry\022>\n\021partition" + + "_options\030\006 \001(\0132#.google.spanner.v1.Parti" + + "tionOptions\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 " + + "\001(\t\022&\n\005value\030\002 \001(\0132\027.google.spanner.v1.T" + + "ype:\0028\001\"\261\002\n\024PartitionReadRequest\0227\n\007sess" + + "ion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.co" + + "m/Session\022;\n\013transaction\030\002 \001(\0132&.google." + + "spanner.v1.TransactionSelector\022\022\n\005table\030" + + "\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022\017\n\007columns\030\005 \003" + + "(\t\022/\n\007key_set\030\006 \001(\0132\031.google.spanner.v1." + + "KeySetB\003\340A\002\022>\n\021partition_options\030\t \001(\0132#" + + ".google.spanner.v1.PartitionOptions\"$\n\tP" + + "artition\022\027\n\017partition_token\030\001 \001(\014\"z\n\021Par" + + "titionResponse\0220\n\npartitions\030\001 \003(\0132\034.goo" + + "gle.spanner.v1.Partition\0223\n\013transaction\030" + + "\002 \001(\0132\036.google.spanner.v1.Transaction\"\203\003" + + "\n\013ReadRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036" + + "spanner.googleapis.com/Session\022;\n\013transa" + + "ction\030\002 \001(\0132&.google.spanner.v1.Transact" + + "ionSelector\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index" + + "\030\004 \001(\t\022\024\n\007columns\030\005 \003(\tB\003\340A\002\022/\n\007key_set\030" + + "\006 \001(\0132\031.google.spanner.v1.KeySetB\003\340A\002\022\r\n" + + "\005limit\030\010 \001(\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017pa" + + "rtition_token\030\n \001(\014\022:\n\017request_options\030\013" + + " \001(\0132!.google.spanner.v1.RequestOptions\022" + + "\032\n\022data_boost_enabled\030\017 \001(\010\"\313\001\n\027BeginTra" + + "nsactionRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A " + + "\n\036spanner.googleapis.com/Session\022;\n\007opti" + + "ons\030\002 \001(\0132%.google.spanner.v1.Transactio" + + "nOptionsB\003\340A\002\022:\n\017request_options\030\003 \001(\0132!" + + ".google.spanner.v1.RequestOptions\"\303\002\n\rCo" + + "mmitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" + + "anner.googleapis.com/Session\022\030\n\016transact" + + "ion_id\030\002 \001(\014H\000\022G\n\026single_use_transaction" + + "\030\003 \001(\0132%.google.spanner.v1.TransactionOp" + + "tionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.span" + + "ner.v1.Mutation\022\033\n\023return_commit_stats\030\005" + + " \001(\010\022:\n\017request_options\030\006 \001(\0132!.google.s" + + "panner.v1.RequestOptionsB\r\n\013transaction\"" + + "g\n\017RollbackRequest\0227\n\007session\030\001 \001(\tB&\340A\002" + + "\372A \n\036spanner.googleapis.com/Session\022\033\n\016t" + + "ransaction_id\030\002 \001(\014B\003\340A\0022\300\026\n\007Spanner\022\246\001\n" + + "\rCreateSession\022\'.google.spanner.v1.Creat" + + "eSessionRequest\032\032.google.spanner.v1.Sess" + + "ion\"P\202\323\344\223\002?\":/v1/{database=projects/*/in" + + "stances/*/databases/*}/sessions:\001*\332A\010dat" + + "abase\022\340\001\n\023BatchCreateSessions\022-.google.s" + + "panner.v1.BatchCreateSessionsRequest\032..g" + + "oogle.spanner.v1.BatchCreateSessionsResp" + + "onse\"j\202\323\344\223\002K\"F/v1/{database=projects/*/i" + + "nstances/*/databases/*}/sessions:batchCr" + + "eate:\001*\332A\026database,session_count\022\227\001\n\nGet" + + "Session\022$.google.spanner.v1.GetSessionRe" + + "quest\032\032.google.spanner.v1.Session\"G\202\323\344\223\002" + + ":\0228/v1/{name=projects/*/instances/*/data" + + "bases/*/sessions/*}\332A\004name\022\256\001\n\014ListSessi" + + "ons\022&.google.spanner.v1.ListSessionsRequ" + + "est\032\'.google.spanner.v1.ListSessionsResp" + + "onse\"M\202\323\344\223\002<\022:/v1/{database=projects/*/i" + + "nstances/*/databases/*}/sessions\332A\010datab" + + "ase\022\231\001\n\rDeleteSession\022\'.google.spanner.v" + + "1.DeleteSessionRequest\032\026.google.protobuf" + + ".Empty\"G\202\323\344\223\002:*8/v1/{name=projects/*/ins" + + "tances/*/databases/*/sessions/*}\332A\004name\022" + + "\243\001\n\nExecuteSql\022$.google.spanner.v1.Execu" + + "teSqlRequest\032\034.google.spanner.v1.ResultS" + + "et\"Q\202\323\344\223\002K\"F/v1/{session=projects/*/inst" + + "ances/*/databases/*/sessions/*}:executeS" + + "ql:\001*\022\276\001\n\023ExecuteStreamingSql\022$.google.s" + + "panner.v1.ExecuteSqlRequest\032#.google.spa" + + "nner.v1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/{s" + + "ession=projects/*/instances/*/databases/" + + "*/sessions/*}:executeStreamingSql:\001*0\001\022\300" + + "\001\n\017ExecuteBatchDml\022).google.spanner.v1.E" + + "xecuteBatchDmlRequest\032*.google.spanner.v" + + "1.ExecuteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{" + "session=projects/*/instances/*/databases" - + "/*/sessions/*}:commit:\001*\332A session,trans" - + "action_id,mutations\332A(session,single_use" - + "_transaction,mutations\022\260\001\n\010Rollback\022\".go" - + "ogle.spanner.v1.RollbackRequest\032\026.google" - + ".protobuf.Empty\"h\202\323\344\223\002I\"D/v1/{session=pr" - + "ojects/*/instances/*/databases/*/session" - + "s/*}:rollback:\001*\332A\026session,transaction_i" - + "d\022\267\001\n\016PartitionQuery\022(.google.spanner.v1" - + ".PartitionQueryRequest\032$.google.spanner." - + "v1.PartitionResponse\"U\202\323\344\223\002O\"J/v1/{sessi" + + "/*/sessions/*}:executeBatchDml:\001*\022\221\001\n\004Re" + + "ad\022\036.google.spanner.v1.ReadRequest\032\034.goo" + + "gle.spanner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{s" + + "ession=projects/*/instances/*/databases/" + + "*/sessions/*}:read:\001*\022\254\001\n\rStreamingRead\022" + + "\036.google.spanner.v1.ReadRequest\032#.google" + + ".spanner.v1.PartialResultSet\"T\202\323\344\223\002N\"I/v" + + "1/{session=projects/*/instances/*/databa" + + "ses/*/sessions/*}:streamingRead:\001*0\001\022\311\001\n" + + "\020BeginTransaction\022*.google.spanner.v1.Be" + + "ginTransactionRequest\032\036.google.spanner.v" + + "1.Transaction\"i\202\323\344\223\002Q\"L/v1/{session=proj" + + "ects/*/instances/*/databases/*/sessions/" + + "*}:beginTransaction:\001*\332A\017session,options" + + "\022\353\001\n\006Commit\022 .google.spanner.v1.CommitRe" + + "quest\032!.google.spanner.v1.CommitResponse" + + "\"\233\001\202\323\344\223\002G\"B/v1/{session=projects/*/insta" + + "nces/*/databases/*/sessions/*}:commit:\001*" + + "\332A session,transaction_id,mutations\332A(se" + + "ssion,single_use_transaction,mutations\022\260" + + "\001\n\010Rollback\022\".google.spanner.v1.Rollback" + + "Request\032\026.google.protobuf.Empty\"h\202\323\344\223\002I\"" + + "D/v1/{session=projects/*/instances/*/dat" + + "abases/*/sessions/*}:rollback:\001*\332A\026sessi" + + "on,transaction_id\022\267\001\n\016PartitionQuery\022(.g" + + "oogle.spanner.v1.PartitionQueryRequest\032$" + + ".google.spanner.v1.PartitionResponse\"U\202\323" + + "\344\223\002O\"J/v1/{session=projects/*/instances/" + + "*/databases/*/sessions/*}:partitionQuery" + + ":\001*\022\264\001\n\rPartitionRead\022\'.google.spanner.v" + + "1.PartitionReadRequest\032$.google.spanner." + + "v1.PartitionResponse\"T\202\323\344\223\002N\"I/v1/{sessi" + "on=projects/*/instances/*/databases/*/se" - + "ssions/*}:partitionQuery:\001*\022\264\001\n\rPartitio" - + "nRead\022\'.google.spanner.v1.PartitionReadR" - + "equest\032$.google.spanner.v1.PartitionResp" - + "onse\"T\202\323\344\223\002N\"I/v1/{session=projects/*/in" - + "stances/*/databases/*/sessions/*}:partit" - + "ionRead:\001*\032w\312A\026spanner.googleapis.com\322A[" - + "https://www.googleapis.com/auth/cloud-pl" - + "atform,https://www.googleapis.com/auth/s" - + "panner.dataB\224\002\n\025com.google.spanner.v1B\014S" - + "pannerProtoP\001Z8google.golang.org/genprot" - + "o/googleapis/spanner/v1;spanner\252\002\027Google" - + ".Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spanner" - + "\\V1\352\002\032Google::Cloud::Spanner::V1\352A_\n\037spa" - + "nner.googleapis.com/Database\0221.8 UTF-8 0.31.1 - 2.11.0 - 3.12.0 + 2.14.0 + 3.15.0 @@ -32,7 +32,7 @@ com.google.cloud google-cloud-spanner - 6.36.0 + 6.38.1 @@ -139,7 +139,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0-M9 + 3.0.0 spanner-testing-east1 diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index 7a12359e642..34f084c80de 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -28,7 +28,7 @@ com.google.cloud libraries-bom - 26.8.0 + 26.11.0 pom import @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.0.0 **/*IT diff --git a/samples/pom.xml b/samples/pom.xml index 598cacc5bcc..be994d055bd 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -39,7 +39,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.0 + 3.1.1 true diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index db87a9b633e..2a8420761a7 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -22,8 +22,8 @@ 1.8 UTF-8 0.31.1 - 2.11.0 - 3.12.0 + 2.14.0 + 3.15.0 @@ -31,7 +31,7 @@ com.google.cloud google-cloud-spanner - 6.36.1 + 6.38.2 @@ -138,7 +138,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0-M9 + 3.0.0 spanner-testing-east1 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index b94a93ee786..03a79157934 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -33,7 +33,7 @@ com.google.cloud libraries-bom - 26.8.0 + 26.11.0 pom import @@ -174,7 +174,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0-M9 + 3.0.0 spanner-testing-east1 diff --git a/versions.txt b/versions.txt index a3dbf4297b8..a497310b64b 100644 --- a/versions.txt +++ b/versions.txt @@ -1,11 +1,11 @@ # Format: # module:released-version:current-version -proto-google-cloud-spanner-admin-instance-v1:6.36.1:6.36.1 -proto-google-cloud-spanner-v1:6.36.1:6.36.1 -proto-google-cloud-spanner-admin-database-v1:6.36.1:6.36.1 -grpc-google-cloud-spanner-v1:6.36.1:6.36.1 -grpc-google-cloud-spanner-admin-instance-v1:6.36.1:6.36.1 -grpc-google-cloud-spanner-admin-database-v1:6.36.1:6.36.1 -google-cloud-spanner:6.36.1:6.36.1 -google-cloud-spanner-executor:6.36.1:6.36.1 +proto-google-cloud-spanner-admin-instance-v1:6.38.2:6.38.2 +proto-google-cloud-spanner-v1:6.38.2:6.38.2 +proto-google-cloud-spanner-admin-database-v1:6.38.2:6.38.2 +grpc-google-cloud-spanner-v1:6.38.2:6.38.2 +grpc-google-cloud-spanner-admin-instance-v1:6.38.2:6.38.2 +grpc-google-cloud-spanner-admin-database-v1:6.38.2:6.38.2 +google-cloud-spanner:6.38.2:6.38.2 +google-cloud-spanner-executor:6.38.2:6.38.2