From 0f5fb6dd2ac68a519a087d58354af0b2d442326c Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:12:13 +0000 Subject: [PATCH 01/20] chore(main): release 6.41.1-SNAPSHOT (#2408) :robot: I have created a release *beep* *boop* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). --- google-cloud-spanner-bom/pom.xml | 20 +++++++++---------- google-cloud-spanner-executor/pom.xml | 4 ++-- google-cloud-spanner/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- grpc-google-cloud-spanner-v1/pom.xml | 4 ++-- pom.xml | 16 +++++++-------- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- proto-google-cloud-spanner-v1/pom.xml | 4 ++-- samples/snapshot/pom.xml | 2 +- versions.txt | 16 +++++++-------- 12 files changed, 43 insertions(+), 43 deletions(-) diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index 5bd8f5d7852..7e2fa74de1f 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.41.0 + 6.41.1-SNAPSHOT pom com.google.cloud @@ -53,48 +53,48 @@ com.google.cloud google-cloud-spanner - 6.41.0 + 6.41.1-SNAPSHOT com.google.cloud google-cloud-spanner-executor - 6.41.0 + 6.41.1-SNAPSHOT com.google.cloud google-cloud-spanner test-jar - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index d13c5f2a726..a668a6f0fd2 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.41.0 + 6.41.1-SNAPSHOT jar Google Cloud Spanner Executor com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 617d7cd48aa..77d1a22b2ef 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.41.0 + 6.41.1-SNAPSHOT jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,7 +11,7 @@ com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT google-cloud-spanner diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index 1b72f13e8cf..0b3b05d95c2 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.41.0 + 6.41.1-SNAPSHOT grpc-google-cloud-spanner-admin-database-v1 GRPC library for grpc-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml index 50a96471291..f79f84893b8 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.41.0 + 6.41.1-SNAPSHOT grpc-google-cloud-spanner-admin-instance-v1 GRPC library for grpc-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml index 3adcf0d831a..06fb15ddc28 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.41.0 + 6.41.1-SNAPSHOT grpc-google-cloud-spanner-v1 GRPC library for grpc-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/pom.xml b/pom.xml index 140627e37f0..bbdb38704ca 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-spanner-parent pom - 6.41.0 + 6.41.1-SNAPSHOT Google Cloud Spanner Parent https://github.com/googleapis/java-spanner @@ -62,37 +62,37 @@ com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.41.0 + 6.41.1-SNAPSHOT com.google.cloud google-cloud-spanner - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml index d7fa0946a8b..f67534bcd27 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.41.0 + 6.41.1-SNAPSHOT proto-google-cloud-spanner-admin-database-v1 PROTO library for proto-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml index d23136ba700..4536461df13 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.41.0 + 6.41.1-SNAPSHOT proto-google-cloud-spanner-admin-instance-v1 PROTO library for proto-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml index a9c8352ed01..be03d676f88 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.41.0 + 6.41.1-SNAPSHOT proto-google-cloud-spanner-v1 PROTO library for proto-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 865cd43ece9..9d3f51de51e 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -31,7 +31,7 @@ com.google.cloud google-cloud-spanner - 6.41.0 + 6.41.1-SNAPSHOT diff --git a/versions.txt b/versions.txt index 21d06554b43..02fe515373e 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.41.0:6.41.0 -proto-google-cloud-spanner-v1:6.41.0:6.41.0 -proto-google-cloud-spanner-admin-database-v1:6.41.0:6.41.0 -grpc-google-cloud-spanner-v1:6.41.0:6.41.0 -grpc-google-cloud-spanner-admin-instance-v1:6.41.0:6.41.0 -grpc-google-cloud-spanner-admin-database-v1:6.41.0:6.41.0 -google-cloud-spanner:6.41.0:6.41.0 -google-cloud-spanner-executor:6.41.0:6.41.0 +proto-google-cloud-spanner-admin-instance-v1:6.41.0:6.41.1-SNAPSHOT +proto-google-cloud-spanner-v1:6.41.0:6.41.1-SNAPSHOT +proto-google-cloud-spanner-admin-database-v1:6.41.0:6.41.1-SNAPSHOT +grpc-google-cloud-spanner-v1:6.41.0:6.41.1-SNAPSHOT +grpc-google-cloud-spanner-admin-instance-v1:6.41.0:6.41.1-SNAPSHOT +grpc-google-cloud-spanner-admin-database-v1:6.41.0:6.41.1-SNAPSHOT +google-cloud-spanner:6.41.0:6.41.1-SNAPSHOT +google-cloud-spanner-executor:6.41.0:6.41.1-SNAPSHOT From 06b1ffbea66c76cd82e9e282b896300c40ad173e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 2 May 2023 07:40:41 +0200 Subject: [PATCH 02/20] chore(deps): update dependency com.google.cloud:google-cloud-spanner to v6.41.0 (#2409) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update dependency com.google.cloud:google-cloud-spanner to v6.41.0 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- README.md | 8 ++++---- samples/install-without-bom/pom.xml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9961a9759f9..e557669f94b 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ If you are using Maven without the BOM, add this to your dependencies: com.google.cloud google-cloud-spanner - 6.40.1 + 6.41.0 ``` @@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-spanner' If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-spanner:6.40.1' +implementation 'com.google.cloud:google-cloud-spanner:6.41.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.40.1" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.41.0" ``` @@ -411,7 +411,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html [stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.40.1 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.41.0 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 71c58372966..0d9e48c5d35 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -32,7 +32,7 @@ com.google.cloud google-cloud-spanner - 6.40.1 + 6.41.0 From 701649e045d9e5397035e44d1ec4ee5e1a3aa912 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 4 May 2023 06:34:17 +0200 Subject: [PATCH 03/20] chore(deps): update dependency com.google.cloud:libraries-bom to v26.14.0 (#2412) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update dependency com.google.cloud:libraries-bom to v26.14.0 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- README.md | 4 ++-- samples/native-image/pom.xml | 2 +- samples/snippets/pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e557669f94b..e8dc6907606 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.13.0 + 26.14.0 pom import @@ -50,7 +50,7 @@ If you are using Maven without the BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies: ```Groovy -implementation platform('com.google.cloud:libraries-bom:26.13.0') +implementation platform('com.google.cloud:libraries-bom:26.14.0') implementation 'com.google.cloud:google-cloud-spanner' ``` diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index b4028d42b65..2b6dfb082d1 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -28,7 +28,7 @@ com.google.cloud libraries-bom - 26.13.0 + 26.14.0 pom import diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 48cf09bf081..a2ac9de3612 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -33,7 +33,7 @@ com.google.cloud libraries-bom - 26.13.0 + 26.14.0 pom import From afcc598e05c75610db8d0adacd4da79b4c124122 Mon Sep 17 00:00:00 2001 From: Rajat Bhatta <93644539+rajatbhatta@users.noreply.github.com> Date: Fri, 5 May 2023 12:32:00 +0000 Subject: [PATCH 04/20] fix: use javax.annotation.Nonnull in executor framework (#2414) * fix: use javax.annotation.Nonnull in executor framework Remove an additional dependency on org.jetbrains.annotations and use javax.annotation.Nonnull. --- google-cloud-spanner-executor/pom.xml | 7 ------- .../google/cloud/executor/spanner/CloudClientExecutor.java | 6 +++--- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index a668a6f0fd2..131d6503967 100644 --- a/google-cloud-spanner-executor/pom.xml +++ b/google-cloud-spanner-executor/pom.xml @@ -121,13 +121,6 @@ commons-io 2.11.0 - - - org.jetbrains - annotations - RELEASE - compile - google-spanner-cloud-executor 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 f4b59505b01..651a920dec2 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 @@ -168,9 +168,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.apache.commons.io.FileUtils; -import org.jetbrains.annotations.NotNull; import org.threeten.bp.Duration; import org.threeten.bp.LocalDate; @@ -652,7 +652,7 @@ public synchronized void bufferMutations(List mutations) throws Spanne } /** Execute a batch of updates in a read-write transaction. */ - public synchronized long[] executeBatchDml(@NotNull List stmts) + public synchronized long[] executeBatchDml(@Nonnull List stmts) throws SpannerException { for (int i = 0; i < stmts.size(); i++) { LOGGER.log( @@ -3323,7 +3323,7 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType( } /** Convert a cloud Type to a Type proto. */ - private static com.google.spanner.v1.Type cloudTypeToTypeProto(@NotNull Type cloudTypeProto) { + private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type cloudTypeProto) { switch (cloudTypeProto.getCode()) { case BOOL: return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.BOOL).build(); From ed62aa666ae34cf5e552e19b6b5dc2a8c6609e4e Mon Sep 17 00:00:00 2001 From: gyang-google <48337601+gyang-google@users.noreply.github.com> Date: Fri, 5 May 2023 05:56:13 -0700 Subject: [PATCH 05/20] fix: add error details for INTERNAL error (#2413) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [ ] Make sure to open an issue as a [bug/issue](https://togithub.com/googleapis/java-spanner/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Code coverage does not decrease (if any source code was changed) - [ ] Appropriate docs were updated (if necessary) Fixes # ☕️ If you write sample code, please follow the [samples format]( https://togithub.com/GoogleCloudPlatform/java-docs-samples/blob/main/SAMPLE_FORMAT.md). --- .../java/com/google/cloud/executor/spanner/CloudExecutor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java index bf5f56aadca..cda9923f392 100644 --- a/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java +++ b/google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudExecutor.java @@ -428,7 +428,8 @@ protected Status toStatus(SpannerException e) { case CANCELLED: return Status.fromCode(Status.CANCELLED.getCode()).withDescription(e.getMessage()); case INTERNAL: - return Status.fromCode(Status.INTERNAL.getCode()).withDescription(e.getMessage()); + return Status.fromCode(Status.INTERNAL.getCode()) + .withDescription(e.getMessage() + e.getReason() == null ? "" : ": " + e.getReason()); case FAILED_PRECONDITION: return Status.fromCode(Status.FAILED_PRECONDITION.getCode()) .withDescription(e.getMessage()); From c082a1fccb79cf4c001519eba4a75cef30150541 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 8 May 2023 20:52:54 +0200 Subject: [PATCH 06/20] deps: update dependency org.graalvm.sdk:graal-sdk to v22.3.2 (#2391) --- google-cloud-spanner/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 77d1a22b2ef..3c40208b76d 100644 --- a/google-cloud-spanner/pom.xml +++ b/google-cloud-spanner/pom.xml @@ -16,7 +16,7 @@ google-cloud-spanner 0.31.1 - 22.3.1 + 22.3.2 com.google.cloud.spanner.GceTestEnvConfig projects/gcloud-devel/instances/spanner-testing-east1 gcloud-devel From 32cf03e9baf610ad3f3497b7f37955ad5c749afe Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 00:24:16 +0530 Subject: [PATCH 07/20] chore(deps): update ghcr.io/graalvm/graalvm-ce docker tag to v22.3.2 (#1793) (#2418) Source-Link: https://github.com/googleapis/synthtool/commit/99ad07938fb6bcddcc7b1b586be699d72440758b Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-java:latest@sha256:8dd8395defb6a5069b0b10c435058bf13980606ba1967e2b3925ed50fc3cb22f Co-authored-by: Owl Bot Co-authored-by: Mridula <66699525+mpeddada1@users.noreply.github.com> --- .github/.OwlBot.lock.yaml | 2 +- .kokoro/presubmit/graalvm-native-17.cfg | 2 +- .kokoro/presubmit/graalvm-native.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index d7abbc602ed..35478afe3fd 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:3387f93d4577788512112ff69ddab746ae9192ddd9f13cfd175ef310d62d7d30 + digest: sha256:8dd8395defb6a5069b0b10c435058bf13980606ba1967e2b3925ed50fc3cb22f diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg index e20330c3ca6..f5253354589 100644 --- a/.kokoro/presubmit/graalvm-native-17.cfg +++ b/.kokoro/presubmit/graalvm-native-17.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/graalvm17:22.3.0" + value: "gcr.io/cloud-devrel-kokoro-resources/graalvm17:22.3.2" } env_vars: { diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg index 0fd6ba2fa0c..44b1004875b 100644 --- a/.kokoro/presubmit/graalvm-native.cfg +++ b/.kokoro/presubmit/graalvm-native.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/graalvm:22.3.0" + value: "gcr.io/cloud-devrel-kokoro-resources/graalvm:22.3.2" } env_vars: { From 8cd420281d804eec0bd38ed08145f72206e7375e Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 8 May 2023 20:54:41 +0200 Subject: [PATCH 08/20] build(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.1.0 (#2417) --- samples/native-image/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index 2b6dfb082d1..ab55b88c5f5 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0 + 3.1.0 **/*IT From c23af6cd3d8887f6aef1c4ccd4db5412de859a7b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 8 May 2023 21:10:00 +0200 Subject: [PATCH 09/20] build(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.1.0 (#2416) --- google-cloud-spanner-executor/pom.xml | 2 +- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- samples/snippets/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index 131d6503967..74ffd3d15c4 100644 --- a/google-cloud-spanner-executor/pom.xml +++ b/google-cloud-spanner-executor/pom.xml @@ -151,7 +151,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0 + 3.1.0 diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 0d9e48c5d35..c8cb4278e75 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -139,7 +139,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0 + 3.1.0 spanner-testing-east1 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 9d3f51de51e..b0e3e4d7fec 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -138,7 +138,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0 + 3.1.0 spanner-testing-east1 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index a2ac9de3612..0690ec3be4f 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -174,7 +174,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0 + 3.1.0 spanner-testing-east1 From 679bb366162575c28bab1df9b87d01517ea8d5aa Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 09:31:10 +0200 Subject: [PATCH 10/20] deps: update dependency org.graalvm.buildtools:junit-platform-native to v0.9.22 (#2423) --- samples/native-image/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index ab55b88c5f5..199a89fb98c 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -109,7 +109,7 @@ org.graalvm.buildtools junit-platform-native - 0.9.21 + 0.9.22 test From a72f4ff64cce2e9c746e8f6a9e107cbd72afa67f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 09:31:39 +0200 Subject: [PATCH 11/20] deps: update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.22 (#2424) --- samples/native-image/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index 199a89fb98c..c1e96544e11 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -130,7 +130,7 @@ org.graalvm.buildtools native-maven-plugin - 0.9.21 + 0.9.22 true com.example.spanner.NativeImageSpannerSample From 6f7fee81233811f5bc002f212c8972ffc6afbe16 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 09:32:02 +0200 Subject: [PATCH 12/20] deps: update dependency com.google.cloud:google-cloud-trace to v2.17.0 (#2428) --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index c8cb4278e75..6e473e77fa2 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -22,7 +22,7 @@ 1.8 UTF-8 0.31.1 - 2.16.0 + 2.17.0 3.17.0 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index b0e3e4d7fec..177efd7c93e 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -22,7 +22,7 @@ 1.8 UTF-8 0.31.1 - 2.16.0 + 2.17.0 3.17.0 From 42dbfe3600b1d482d64c6c4f6865f88db399bae3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 09:32:26 +0200 Subject: [PATCH 13/20] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v3.9.0 (#2427) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bbdb38704ca..1c70422d9f0 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ UTF-8 github google-cloud-spanner-parent - 3.8.0 + 3.9.0 From d630c4c38ae8031b323e764a1903e5b5f3d9d319 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 09:34:44 +0200 Subject: [PATCH 14/20] build(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.4.0 (#2425) --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 6e473e77fa2..cd2780c95be 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -110,7 +110,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.3.0 + 3.4.0 add-snippets-source diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 177efd7c93e..21625110fd5 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -109,7 +109,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.3.0 + 3.4.0 add-snippets-source From 05a45f81c2c71dd236fa36cc987e78a6aa31b594 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 10:10:14 +0200 Subject: [PATCH 15/20] deps: update dependency com.google.cloud:google-cloud-monitoring to v3.18.0 (#2426) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-monitoring](https://togithub.com/googleapis/google-cloud-java) | `3.17.0` -> `3.18.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-monitoring/3.18.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-monitoring/3.18.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-monitoring/3.18.0/compatibility-slim/3.17.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-monitoring/3.18.0/confidence-slim/3.17.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-spanner). --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index cd2780c95be..188abac8543 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -23,7 +23,7 @@ UTF-8 0.31.1 2.17.0 - 3.17.0 + 3.18.0 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 21625110fd5..71b5fe1e882 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -23,7 +23,7 @@ UTF-8 0.31.1 2.17.0 - 3.17.0 + 3.18.0 From 4002f47bc4c0f04e31a7fe54a81eda47d8f58676 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 15 May 2023 10:40:14 +0200 Subject: [PATCH 16/20] build(deps): update dependency org.apache.maven.plugins:maven-assembly-plugin to v3.6.0 (#2435) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.apache.maven.plugins:maven-assembly-plugin](https://maven.apache.org/plugins/) | `3.5.0` -> `3.6.0` | [![age](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.6.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.6.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.6.0/compatibility-slim/3.5.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/org.apache.maven.plugins:maven-assembly-plugin/3.6.0/confidence-slim/3.5.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-spanner). --- google-cloud-spanner-executor/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index 74ffd3d15c4..b6c7c52b660 100644 --- a/google-cloud-spanner-executor/pom.xml +++ b/google-cloud-spanner-executor/pom.xml @@ -127,7 +127,7 @@ maven-assembly-plugin - 3.5.0 + 3.6.0 assembly-descriptor.xml From a33ea90f16e3fd25b041516684191e0b297c75fb Mon Sep 17 00:00:00 2001 From: Rajat Bhatta <93644539+rajatbhatta@users.noreply.github.com> Date: Mon, 15 May 2023 08:56:13 +0000 Subject: [PATCH 17/20] chore: mark CLIRR check optional (#2434) --- .github/sync-repo-settings.yaml | 3 --- .github/workflows/samples.yaml | 6 +++--- git-hooks/pre-commit | 7 ++----- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index e0797baefa9..ed1010fe960 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -11,7 +11,6 @@ branchProtectionRules: - dependencies (8) - dependencies (11) - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' @@ -74,7 +73,6 @@ branchProtectionRules: requiresStrictStatusChecks: false requiredStatusCheckContexts: - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' @@ -87,7 +85,6 @@ branchProtectionRules: requiresStrictStatusChecks: false requiredStatusCheckContexts: - lint - - clirr - units (8) - units (11) - 'Kokoro - Test: Integration' diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml index d0eb0cb5def..8bc427d1eee 100644 --- a/.github/workflows/samples.yaml +++ b/.github/workflows/samples.yaml @@ -23,7 +23,7 @@ jobs: java-version: 11 distribution: zulu - name: Compile Spanner - run: mvn clean install + run: mvn clean install -Dclirr.skip=true - uses: actions/setup-java@v3 with: java-version: 8 @@ -44,7 +44,7 @@ jobs: java-version: ${{matrix.java}} distribution: zulu - name: Compile Spanner - run: mvn clean install + run: mvn clean install -Dclirr.skip=true - name: Compile samples run: mvn compile - working-directory: samples \ No newline at end of file + working-directory: samples diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit index 70e559f9fbc..0683a6fcc64 100755 --- a/git-hooks/pre-commit +++ b/git-hooks/pre-commit @@ -4,8 +4,5 @@ set -e -# Checks for: -# - Formatting errors -# - Clirr errors -mvn com.coveo:fmt-maven-plugin:check clirr:check - +# Checks for Formatting errors +mvn com.coveo:fmt-maven-plugin:check From 09f20bd43913a7a01985fd290964d134612c14eb Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 15:58:34 +0530 Subject: [PATCH 18/20] feat: Add support for UpdateDatabase in Cloud Spanner (#2429) * feat: Add support for UpdateDatabase in Cloud Spanner PiperOrigin-RevId: 531423380 Source-Link: https://github.com/googleapis/googleapis/commit/3e054d1467e20b2f475eeb77f17a8595c5aa22d2 Source-Link: https://github.com/googleapis/googleapis-gen/commit/e347738483743e8e866cac722db0e9425356fc80 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiZTM0NzczODQ4Mzc0M2U4ZTg2NmNhYzcyMmRiMGU5NDI1MzU2ZmM4MCJ9 Co-authored-by: Owl Bot Co-authored-by: Mend Renovate Co-authored-by: Rajat Bhatta <93644539+rajatbhatta@users.noreply.github.com> --- .../database/v1/DatabaseAdminClient.java | 231 +++ .../database/v1/DatabaseAdminSettings.java | 24 + .../admin/database/v1/gapic_metadata.json | 3 + .../database/v1/stub/DatabaseAdminStub.java | 11 + .../v1/stub/DatabaseAdminStubSettings.java | 71 + .../v1/stub/GrpcDatabaseAdminStub.java | 45 + .../v1/stub/HttpJsonDatabaseAdminStub.java | 74 + .../v1/DatabaseAdminClientHttpJsonTest.java | 103 ++ .../database/v1/DatabaseAdminClientTest.java | 76 + .../database/v1/MockDatabaseAdminImpl.java | 22 + .../admin/database/v1/DatabaseAdminGrpc.java | 267 +++- .../spanner/admin/database/v1/Database.java | 194 +++ .../admin/database/v1/DatabaseOrBuilder.java | 28 + .../v1/SpannerDatabaseAdminProto.java | 538 +++---- .../database/v1/UpdateDatabaseMetadata.java | 1291 +++++++++++++++++ .../v1/UpdateDatabaseMetadataOrBuilder.java | 142 ++ .../database/v1/UpdateDatabaseRequest.java | 1046 +++++++++++++ .../v1/UpdateDatabaseRequestOrBuilder.java | 113 ++ .../database/v1/spanner_database_admin.proto | 91 +- 19 files changed, 4107 insertions(+), 263 deletions(-) create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java index d625748b5e8..d7bfbec1178 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClient.java @@ -74,6 +74,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import java.io.IOException; import java.util.List; import java.util.concurrent.TimeUnit; @@ -725,6 +727,235 @@ public final UnaryCallable getDatabaseCallable() { return stub.getDatabaseCallable(); } + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates a Cloud Spanner database. The returned [long-running + * operation][google.longrunning.Operation] can be used to track the progress of updating the + * database. If the named database does not exist, returns `NOT_FOUND`. + * + *

While the operation is pending: + * + *

* The database's [reconciling][google.spanner.admin.database.v1.Database.reconciling] + * field is set to true. * Cancelling the operation is best-effort. If the cancellation + * succeeds, the operation metadata's + * [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time] is set, the + * updates are reverted, and the operation terminates with a `CANCELLED` status. * New + * UpdateDatabase requests will return a `FAILED_PRECONDITION` error until the pending operation + * is done (returns successfully or with error). * Reading the database via the API continues + * to give the pre-request values. + * + *

Upon completion of the returned operation: + * + *

* The new values are in effect and readable via the API. * The database's + * [reconciling][google.spanner.admin.database.v1.Database.reconciling] field becomes false. + * + *

The returned [long-running operation][google.longrunning.Operation] will have a name of the + * format + * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>` + * and can be used to track the database modification. The + * [metadata][google.longrunning.Operation.metadata] field type is + * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata]. The + * [response][google.longrunning.Operation.response] field type is + * [Database][google.spanner.admin.database.v1.Database], if successful. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
+   *   Database database = Database.newBuilder().build();
+   *   FieldMask updateMask = FieldMask.newBuilder().build();
+   *   Database response = databaseAdminClient.updateDatabaseAsync(database, updateMask).get();
+   * }
+   * }
+ * + * @param database Required. The database to update. The `name` field of the database is of the + * form `projects/<project>/instances/<instance>/databases/<database>`. + * @param updateMask Required. The list of fields to update. Currently, only + * `enable_drop_protection` field can be updated. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final OperationFuture updateDatabaseAsync( + Database database, FieldMask updateMask) { + UpdateDatabaseRequest request = + UpdateDatabaseRequest.newBuilder().setDatabase(database).setUpdateMask(updateMask).build(); + return updateDatabaseAsync(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates a Cloud Spanner database. The returned [long-running + * operation][google.longrunning.Operation] can be used to track the progress of updating the + * database. If the named database does not exist, returns `NOT_FOUND`. + * + *

While the operation is pending: + * + *

* The database's [reconciling][google.spanner.admin.database.v1.Database.reconciling] + * field is set to true. * Cancelling the operation is best-effort. If the cancellation + * succeeds, the operation metadata's + * [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time] is set, the + * updates are reverted, and the operation terminates with a `CANCELLED` status. * New + * UpdateDatabase requests will return a `FAILED_PRECONDITION` error until the pending operation + * is done (returns successfully or with error). * Reading the database via the API continues + * to give the pre-request values. + * + *

Upon completion of the returned operation: + * + *

* The new values are in effect and readable via the API. * The database's + * [reconciling][google.spanner.admin.database.v1.Database.reconciling] field becomes false. + * + *

The returned [long-running operation][google.longrunning.Operation] will have a name of the + * format + * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>` + * and can be used to track the database modification. The + * [metadata][google.longrunning.Operation.metadata] field type is + * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata]. The + * [response][google.longrunning.Operation.response] field type is + * [Database][google.spanner.admin.database.v1.Database], if successful. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
+   *   UpdateDatabaseRequest request =
+   *       UpdateDatabaseRequest.newBuilder()
+   *           .setDatabase(Database.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   Database response = databaseAdminClient.updateDatabaseAsync(request).get();
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final OperationFuture updateDatabaseAsync( + UpdateDatabaseRequest request) { + return updateDatabaseOperationCallable().futureCall(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates a Cloud Spanner database. The returned [long-running + * operation][google.longrunning.Operation] can be used to track the progress of updating the + * database. If the named database does not exist, returns `NOT_FOUND`. + * + *

While the operation is pending: + * + *

* The database's [reconciling][google.spanner.admin.database.v1.Database.reconciling] + * field is set to true. * Cancelling the operation is best-effort. If the cancellation + * succeeds, the operation metadata's + * [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time] is set, the + * updates are reverted, and the operation terminates with a `CANCELLED` status. * New + * UpdateDatabase requests will return a `FAILED_PRECONDITION` error until the pending operation + * is done (returns successfully or with error). * Reading the database via the API continues + * to give the pre-request values. + * + *

Upon completion of the returned operation: + * + *

* The new values are in effect and readable via the API. * The database's + * [reconciling][google.spanner.admin.database.v1.Database.reconciling] field becomes false. + * + *

The returned [long-running operation][google.longrunning.Operation] will have a name of the + * format + * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>` + * and can be used to track the database modification. The + * [metadata][google.longrunning.Operation.metadata] field type is + * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata]. The + * [response][google.longrunning.Operation.response] field type is + * [Database][google.spanner.admin.database.v1.Database], if successful. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
+   *   UpdateDatabaseRequest request =
+   *       UpdateDatabaseRequest.newBuilder()
+   *           .setDatabase(Database.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   OperationFuture future =
+   *       databaseAdminClient.updateDatabaseOperationCallable().futureCall(request);
+   *   // Do something.
+   *   Database response = future.get();
+   * }
+   * }
+ */ + public final OperationCallable + updateDatabaseOperationCallable() { + return stub.updateDatabaseOperationCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Updates a Cloud Spanner database. The returned [long-running + * operation][google.longrunning.Operation] can be used to track the progress of updating the + * database. If the named database does not exist, returns `NOT_FOUND`. + * + *

While the operation is pending: + * + *

* The database's [reconciling][google.spanner.admin.database.v1.Database.reconciling] + * field is set to true. * Cancelling the operation is best-effort. If the cancellation + * succeeds, the operation metadata's + * [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time] is set, the + * updates are reverted, and the operation terminates with a `CANCELLED` status. * New + * UpdateDatabase requests will return a `FAILED_PRECONDITION` error until the pending operation + * is done (returns successfully or with error). * Reading the database via the API continues + * to give the pre-request values. + * + *

Upon completion of the returned operation: + * + *

* The new values are in effect and readable via the API. * The database's + * [reconciling][google.spanner.admin.database.v1.Database.reconciling] field becomes false. + * + *

The returned [long-running operation][google.longrunning.Operation] will have a name of the + * format + * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>` + * and can be used to track the database modification. The + * [metadata][google.longrunning.Operation.metadata] field type is + * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata]. The + * [response][google.longrunning.Operation.response] field type is + * [Database][google.spanner.admin.database.v1.Database], if successful. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
+   *   UpdateDatabaseRequest request =
+   *       UpdateDatabaseRequest.newBuilder()
+   *           .setDatabase(Database.newBuilder().build())
+   *           .setUpdateMask(FieldMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       databaseAdminClient.updateDatabaseCallable().futureCall(request);
+   *   // Do something.
+   *   Operation response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable updateDatabaseCallable() { + return stub.updateDatabaseCallable(); + } + // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Updates the schema of a Cloud Spanner database by creating/altering/dropping tables, columns, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java index 7f86f2a522a..357efd0042c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java @@ -72,6 +72,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import java.io.IOException; import java.util.List; import javax.annotation.Generated; @@ -137,6 +139,17 @@ public UnaryCallSettings getDatabaseSettings() { return ((DatabaseAdminStubSettings) getStubSettings()).getDatabaseSettings(); } + /** Returns the object with the settings used for calls to updateDatabase. */ + public UnaryCallSettings updateDatabaseSettings() { + return ((DatabaseAdminStubSettings) getStubSettings()).updateDatabaseSettings(); + } + + /** Returns the object with the settings used for calls to updateDatabase. */ + public OperationCallSettings + updateDatabaseOperationSettings() { + return ((DatabaseAdminStubSettings) getStubSettings()).updateDatabaseOperationSettings(); + } + /** Returns the object with the settings used for calls to updateDatabaseDdl. */ public UnaryCallSettings updateDatabaseDdlSettings() { return ((DatabaseAdminStubSettings) getStubSettings()).updateDatabaseDdlSettings(); @@ -391,6 +404,17 @@ public UnaryCallSettings.Builder getDatabaseSettin return getStubSettingsBuilder().getDatabaseSettings(); } + /** Returns the builder for the settings used for calls to updateDatabase. */ + public UnaryCallSettings.Builder updateDatabaseSettings() { + return getStubSettingsBuilder().updateDatabaseSettings(); + } + + /** Returns the builder for the settings used for calls to updateDatabase. */ + public OperationCallSettings.Builder + updateDatabaseOperationSettings() { + return getStubSettingsBuilder().updateDatabaseOperationSettings(); + } + /** Returns the builder for the settings used for calls to updateDatabaseDdl. */ public UnaryCallSettings.Builder updateDatabaseDdlSettings() { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json index 9a63c0b689b..01fcbd4de1a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/gapic_metadata.json @@ -64,6 +64,9 @@ "UpdateBackup": { "methods": ["updateBackup", "updateBackup", "updateBackupCallable"] }, + "UpdateDatabase": { + "methods": ["updateDatabaseAsync", "updateDatabaseAsync", "updateDatabaseOperationCallable", "updateDatabaseCallable"] + }, "UpdateDatabaseDdl": { "methods": ["updateDatabaseDdlAsync", "updateDatabaseDdlAsync", "updateDatabaseDdlAsync", "updateDatabaseDdlOperationCallable", "updateDatabaseDdlCallable"] } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java index 4dbf5e3c212..3cebe17a2d0 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStub.java @@ -62,6 +62,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import javax.annotation.Generated; // AUTO-GENERATED DOCUMENTATION AND CLASS. @@ -103,6 +105,15 @@ public UnaryCallable getDatabaseCallable() { throw new UnsupportedOperationException("Not implemented: getDatabaseCallable()"); } + public OperationCallable + updateDatabaseOperationCallable() { + throw new UnsupportedOperationException("Not implemented: updateDatabaseOperationCallable()"); + } + + public UnaryCallable updateDatabaseCallable() { + throw new UnsupportedOperationException("Not implemented: updateDatabaseCallable()"); + } + public OperationCallable updateDatabaseDdlOperationCallable() { throw new UnsupportedOperationException( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java index f7836e028eb..7f60dcc14a1 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java @@ -92,6 +92,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import java.io.IOException; import java.util.List; import javax.annotation.Generated; @@ -150,6 +152,9 @@ public class DatabaseAdminStubSettings extends StubSettings createDatabaseOperationSettings; private final UnaryCallSettings getDatabaseSettings; + private final UnaryCallSettings updateDatabaseSettings; + private final OperationCallSettings + updateDatabaseOperationSettings; private final UnaryCallSettings updateDatabaseDdlSettings; private final OperationCallSettings updateDatabaseDdlOperationSettings; @@ -506,6 +511,17 @@ public UnaryCallSettings getDatabaseSettings() { return getDatabaseSettings; } + /** Returns the object with the settings used for calls to updateDatabase. */ + public UnaryCallSettings updateDatabaseSettings() { + return updateDatabaseSettings; + } + + /** Returns the object with the settings used for calls to updateDatabase. */ + public OperationCallSettings + updateDatabaseOperationSettings() { + return updateDatabaseOperationSettings; + } + /** Returns the object with the settings used for calls to updateDatabaseDdl. */ public UnaryCallSettings updateDatabaseDdlSettings() { return updateDatabaseDdlSettings; @@ -732,6 +748,8 @@ protected DatabaseAdminStubSettings(Builder settingsBuilder) throws IOException createDatabaseSettings = settingsBuilder.createDatabaseSettings().build(); createDatabaseOperationSettings = settingsBuilder.createDatabaseOperationSettings().build(); getDatabaseSettings = settingsBuilder.getDatabaseSettings().build(); + updateDatabaseSettings = settingsBuilder.updateDatabaseSettings().build(); + updateDatabaseOperationSettings = settingsBuilder.updateDatabaseOperationSettings().build(); updateDatabaseDdlSettings = settingsBuilder.updateDatabaseDdlSettings().build(); updateDatabaseDdlOperationSettings = settingsBuilder.updateDatabaseDdlOperationSettings().build(); @@ -767,6 +785,11 @@ public static class Builder extends StubSettings.Builder createDatabaseOperationSettings; private final UnaryCallSettings.Builder getDatabaseSettings; + private final UnaryCallSettings.Builder + updateDatabaseSettings; + private final OperationCallSettings.Builder< + UpdateDatabaseRequest, Database, UpdateDatabaseMetadata> + updateDatabaseOperationSettings; private final UnaryCallSettings.Builder updateDatabaseDdlSettings; private final OperationCallSettings.Builder< @@ -889,6 +912,8 @@ protected Builder(ClientContext clientContext) { createDatabaseSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); createDatabaseOperationSettings = OperationCallSettings.newBuilder(); getDatabaseSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + updateDatabaseSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + updateDatabaseOperationSettings = OperationCallSettings.newBuilder(); updateDatabaseDdlSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); updateDatabaseDdlOperationSettings = OperationCallSettings.newBuilder(); dropDatabaseSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); @@ -917,6 +942,7 @@ protected Builder(ClientContext clientContext) { listDatabasesSettings, createDatabaseSettings, getDatabaseSettings, + updateDatabaseSettings, updateDatabaseDdlSettings, dropDatabaseSettings, getDatabaseDdlSettings, @@ -943,6 +969,8 @@ protected Builder(DatabaseAdminStubSettings settings) { createDatabaseSettings = settings.createDatabaseSettings.toBuilder(); createDatabaseOperationSettings = settings.createDatabaseOperationSettings.toBuilder(); getDatabaseSettings = settings.getDatabaseSettings.toBuilder(); + updateDatabaseSettings = settings.updateDatabaseSettings.toBuilder(); + updateDatabaseOperationSettings = settings.updateDatabaseOperationSettings.toBuilder(); updateDatabaseDdlSettings = settings.updateDatabaseDdlSettings.toBuilder(); updateDatabaseDdlOperationSettings = settings.updateDatabaseDdlOperationSettings.toBuilder(); dropDatabaseSettings = settings.dropDatabaseSettings.toBuilder(); @@ -969,6 +997,7 @@ protected Builder(DatabaseAdminStubSettings settings) { listDatabasesSettings, createDatabaseSettings, getDatabaseSettings, + updateDatabaseSettings, updateDatabaseDdlSettings, dropDatabaseSettings, getDatabaseDdlSettings, @@ -1029,6 +1058,11 @@ private static Builder initDefaults(Builder builder) { .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + builder + .updateDatabaseSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + builder .updateDatabaseDdlSettings() .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) @@ -1133,6 +1167,30 @@ private static Builder initDefaults(Builder builder) { .setTotalTimeout(Duration.ofMillis(86400000L)) .build())); + builder + .updateDatabaseOperationSettings() + .setInitialCallSettings( + UnaryCallSettings + .newUnaryCallSettingsBuilder() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")) + .build()) + .setResponseTransformer( + ProtoOperationTransformers.ResponseTransformer.create(Database.class)) + .setMetadataTransformer( + ProtoOperationTransformers.MetadataTransformer.create(UpdateDatabaseMetadata.class)) + .setPollingAlgorithm( + OperationTimedPollAlgorithm.create( + RetrySettings.newBuilder() + .setInitialRetryDelay(Duration.ofMillis(5000L)) + .setRetryDelayMultiplier(1.5) + .setMaxRetryDelay(Duration.ofMillis(45000L)) + .setInitialRpcTimeout(Duration.ZERO) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeout(Duration.ZERO) + .setTotalTimeout(Duration.ofMillis(300000L)) + .build())); + builder .updateDatabaseDdlOperationSettings() .setInitialCallSettings( @@ -1272,6 +1330,19 @@ public UnaryCallSettings.Builder getDatabaseSettin return getDatabaseSettings; } + /** Returns the builder for the settings used for calls to updateDatabase. */ + public UnaryCallSettings.Builder updateDatabaseSettings() { + return updateDatabaseSettings; + } + + /** Returns the builder for the settings used for calls to updateDatabase. */ + @BetaApi( + "The surface for use by generated code is not stable yet and may change in the future.") + public OperationCallSettings.Builder + updateDatabaseOperationSettings() { + return updateDatabaseOperationSettings; + } + /** Returns the builder for the settings used for calls to updateDatabaseDdl. */ public UnaryCallSettings.Builder updateDatabaseDdlSettings() { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java index 84b44e2ded8..97c318b0562 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/GrpcDatabaseAdminStub.java @@ -67,6 +67,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import io.grpc.MethodDescriptor; import io.grpc.protobuf.ProtoUtils; import java.io.IOException; @@ -110,6 +112,16 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { .setResponseMarshaller(ProtoUtils.marshaller(Database.getDefaultInstance())) .build(); + private static final MethodDescriptor + updateDatabaseMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/UpdateDatabase") + .setRequestMarshaller( + ProtoUtils.marshaller(UpdateDatabaseRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance())) + .build(); + private static final MethodDescriptor updateDatabaseDdlMethodDescriptor = MethodDescriptor.newBuilder() @@ -272,6 +284,9 @@ public class GrpcDatabaseAdminStub extends DatabaseAdminStub { private final OperationCallable createDatabaseOperationCallable; private final UnaryCallable getDatabaseCallable; + private final UnaryCallable updateDatabaseCallable; + private final OperationCallable + updateDatabaseOperationCallable; private final UnaryCallable updateDatabaseDdlCallable; private final OperationCallable updateDatabaseDdlOperationCallable; @@ -381,6 +396,16 @@ protected GrpcDatabaseAdminStub( return params.build(); }) .build(); + GrpcCallSettings updateDatabaseTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(updateDatabaseMethodDescriptor) + .setParamsExtractor( + request -> { + ImmutableMap.Builder params = ImmutableMap.builder(); + params.put("database.name", String.valueOf(request.getDatabase().getName())); + return params.build(); + }) + .build(); GrpcCallSettings updateDatabaseDdlTransportSettings = GrpcCallSettings.newBuilder() .setMethodDescriptor(updateDatabaseDdlMethodDescriptor) @@ -566,6 +591,15 @@ protected GrpcDatabaseAdminStub( this.getDatabaseCallable = callableFactory.createUnaryCallable( getDatabaseTransportSettings, settings.getDatabaseSettings(), clientContext); + this.updateDatabaseCallable = + callableFactory.createUnaryCallable( + updateDatabaseTransportSettings, settings.updateDatabaseSettings(), clientContext); + this.updateDatabaseOperationCallable = + callableFactory.createOperationCallable( + updateDatabaseTransportSettings, + settings.updateDatabaseOperationSettings(), + clientContext, + operationsStub); this.updateDatabaseDdlCallable = callableFactory.createUnaryCallable( updateDatabaseDdlTransportSettings, @@ -702,6 +736,17 @@ public UnaryCallable getDatabaseCallable() { return getDatabaseCallable; } + @Override + public UnaryCallable updateDatabaseCallable() { + return updateDatabaseCallable; + } + + @Override + public OperationCallable + updateDatabaseOperationCallable() { + return updateDatabaseOperationCallable; + } + @Override public UnaryCallable updateDatabaseDdlCallable() { return updateDatabaseDdlCallable; 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 af9509761df..12065de983a 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 @@ -76,6 +76,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -102,6 +104,7 @@ public class HttpJsonDatabaseAdminStub extends DatabaseAdminStub { .add(Database.getDescriptor()) .add(Backup.getDescriptor()) .add(CopyBackupMetadata.getDescriptor()) + .add(UpdateDatabaseMetadata.getDescriptor()) .add(UpdateDatabaseDdlMetadata.getDescriptor()) .build(); @@ -215,6 +218,48 @@ public class HttpJsonDatabaseAdminStub extends DatabaseAdminStub { .build()) .build(); + private static final ApiMethodDescriptor + updateDatabaseMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.spanner.admin.database.v1.DatabaseAdmin/UpdateDatabase") + .setHttpMethod("PATCH") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{database.name=projects/*/instances/*/databases/*}", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam( + fields, "database.name", request.getDatabase().getName()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "updateMask", request.getUpdateMask()); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("database", request.getDatabase(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Operation.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .setOperationSnapshotFactory( + (UpdateDatabaseRequest request, Operation response) -> + HttpJsonOperationSnapshot.create(response)) + .build(); + private static final ApiMethodDescriptor updateDatabaseDdlMethodDescriptor = ApiMethodDescriptor.newBuilder() @@ -831,6 +876,9 @@ public class HttpJsonDatabaseAdminStub extends DatabaseAdminStub { private final OperationCallable createDatabaseOperationCallable; private final UnaryCallable getDatabaseCallable; + private final UnaryCallable updateDatabaseCallable; + private final OperationCallable + updateDatabaseOperationCallable; private final UnaryCallable updateDatabaseDdlCallable; private final OperationCallable updateDatabaseDdlOperationCallable; @@ -1006,6 +1054,11 @@ protected HttpJsonDatabaseAdminStub( .setMethodDescriptor(getDatabaseMethodDescriptor) .setTypeRegistry(typeRegistry) .build(); + HttpJsonCallSettings updateDatabaseTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(updateDatabaseMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); HttpJsonCallSettings updateDatabaseDdlTransportSettings = HttpJsonCallSettings.newBuilder() .setMethodDescriptor(updateDatabaseDdlMethodDescriptor) @@ -1112,6 +1165,15 @@ protected HttpJsonDatabaseAdminStub( this.getDatabaseCallable = callableFactory.createUnaryCallable( getDatabaseTransportSettings, settings.getDatabaseSettings(), clientContext); + this.updateDatabaseCallable = + callableFactory.createUnaryCallable( + updateDatabaseTransportSettings, settings.updateDatabaseSettings(), clientContext); + this.updateDatabaseOperationCallable = + callableFactory.createOperationCallable( + updateDatabaseTransportSettings, + settings.updateDatabaseOperationSettings(), + clientContext, + httpJsonOperationsStub); this.updateDatabaseDdlCallable = callableFactory.createUnaryCallable( updateDatabaseDdlTransportSettings, @@ -1223,6 +1285,7 @@ public static List getMethodDescriptors() { methodDescriptors.add(listDatabasesMethodDescriptor); methodDescriptors.add(createDatabaseMethodDescriptor); methodDescriptors.add(getDatabaseMethodDescriptor); + methodDescriptors.add(updateDatabaseMethodDescriptor); methodDescriptors.add(updateDatabaseDdlMethodDescriptor); methodDescriptors.add(dropDatabaseMethodDescriptor); methodDescriptors.add(getDatabaseDdlMethodDescriptor); @@ -1273,6 +1336,17 @@ public UnaryCallable getDatabaseCallable() { return getDatabaseCallable; } + @Override + public UnaryCallable updateDatabaseCallable() { + return updateDatabaseCallable; + } + + @Override + public OperationCallable + updateDatabaseOperationCallable() { + return updateDatabaseOperationCallable; + } + @Override public UnaryCallable updateDatabaseDdlCallable() { return updateDatabaseDdlCallable; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java index 31e6d9d97fb..103d0f4f09c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientHttpJsonTest.java @@ -221,6 +221,8 @@ public void createDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -280,6 +282,8 @@ public void createDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -339,6 +343,8 @@ public void getDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); mockService.addResponse(expectedResponse); @@ -391,6 +397,8 @@ public void getDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); mockService.addResponse(expectedResponse); @@ -430,6 +438,93 @@ public void getDatabaseExceptionTest2() throws Exception { } } + @Test + public void updateDatabaseTest() throws Exception { + Database expectedResponse = + Database.newBuilder() + .setName(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setCreateTime(Timestamp.newBuilder().build()) + .setRestoreInfo(RestoreInfo.newBuilder().build()) + .setEncryptionConfig(EncryptionConfig.newBuilder().build()) + .addAllEncryptionInfo(new ArrayList()) + .setVersionRetentionPeriod("versionRetentionPeriod-629783929") + .setEarliestVersionTime(Timestamp.newBuilder().build()) + .setDefaultLeader("defaultLeader759009962") + .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) + .build(); + Operation resultOperation = + Operation.newBuilder() + .setName("updateDatabaseTest") + .setDone(true) + .setResponse(Any.pack(expectedResponse)) + .build(); + mockService.addResponse(resultOperation); + + Database database = + Database.newBuilder() + .setName(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setCreateTime(Timestamp.newBuilder().build()) + .setRestoreInfo(RestoreInfo.newBuilder().build()) + .setEncryptionConfig(EncryptionConfig.newBuilder().build()) + .addAllEncryptionInfo(new ArrayList()) + .setVersionRetentionPeriod("versionRetentionPeriod-629783929") + .setEarliestVersionTime(Timestamp.newBuilder().build()) + .setDefaultLeader("defaultLeader759009962") + .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Database actualResponse = client.updateDatabaseAsync(database, updateMask).get(); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void updateDatabaseExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + Database database = + Database.newBuilder() + .setName(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setCreateTime(Timestamp.newBuilder().build()) + .setRestoreInfo(RestoreInfo.newBuilder().build()) + .setEncryptionConfig(EncryptionConfig.newBuilder().build()) + .addAllEncryptionInfo(new ArrayList()) + .setVersionRetentionPeriod("versionRetentionPeriod-629783929") + .setEarliestVersionTime(Timestamp.newBuilder().build()) + .setDefaultLeader("defaultLeader759009962") + .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) + .build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateDatabaseAsync(database, updateMask).get(); + Assert.fail("No exception raised"); + } catch (ExecutionException e) { + } + } + @Test public void updateDatabaseDdlTest() throws Exception { Empty expectedResponse = Empty.newBuilder().build(); @@ -1741,6 +1836,8 @@ public void restoreDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1802,6 +1899,8 @@ public void restoreDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1863,6 +1962,8 @@ public void restoreDatabaseTest3() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1924,6 +2025,8 @@ public void restoreDatabaseTest4() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java index 51c780c9829..9d2c02a6618 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminClientTest.java @@ -78,6 +78,7 @@ import com.google.spanner.admin.database.v1.RestoreInfo; import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import io.grpc.StatusRuntimeException; import java.io.IOException; import java.util.ArrayList; @@ -232,6 +233,8 @@ public void createDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -289,6 +292,8 @@ public void createDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -346,6 +351,8 @@ public void getDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -392,6 +399,8 @@ public void getDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); mockDatabaseAdmin.addResponse(expectedResponse); @@ -425,6 +434,65 @@ public void getDatabaseExceptionTest2() throws Exception { } } + @Test + public void updateDatabaseTest() throws Exception { + Database expectedResponse = + Database.newBuilder() + .setName(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setCreateTime(Timestamp.newBuilder().build()) + .setRestoreInfo(RestoreInfo.newBuilder().build()) + .setEncryptionConfig(EncryptionConfig.newBuilder().build()) + .addAllEncryptionInfo(new ArrayList()) + .setVersionRetentionPeriod("versionRetentionPeriod-629783929") + .setEarliestVersionTime(Timestamp.newBuilder().build()) + .setDefaultLeader("defaultLeader759009962") + .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) + .build(); + Operation resultOperation = + Operation.newBuilder() + .setName("updateDatabaseTest") + .setDone(true) + .setResponse(Any.pack(expectedResponse)) + .build(); + mockDatabaseAdmin.addResponse(resultOperation); + + Database database = Database.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + + Database actualResponse = client.updateDatabaseAsync(database, updateMask).get(); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatabaseAdmin.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + UpdateDatabaseRequest actualRequest = ((UpdateDatabaseRequest) actualRequests.get(0)); + + Assert.assertEquals(database, actualRequest.getDatabase()); + Assert.assertEquals(updateMask, actualRequest.getUpdateMask()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void updateDatabaseExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatabaseAdmin.addException(exception); + + try { + Database database = Database.newBuilder().build(); + FieldMask updateMask = FieldMask.newBuilder().build(); + client.updateDatabaseAsync(database, updateMask).get(); + Assert.fail("No exception raised"); + } catch (ExecutionException e) { + Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass()); + InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); + Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); + } + } + @Test public void updateDatabaseDdlTest() throws Exception { Empty expectedResponse = Empty.newBuilder().build(); @@ -1607,6 +1675,8 @@ public void restoreDatabaseTest() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1667,6 +1737,8 @@ public void restoreDatabaseTest2() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1727,6 +1799,8 @@ public void restoreDatabaseTest3() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() @@ -1787,6 +1861,8 @@ public void restoreDatabaseTest4() throws Exception { .setEarliestVersionTime(Timestamp.newBuilder().build()) .setDefaultLeader("defaultLeader759009962") .setDatabaseDialect(DatabaseDialect.forNumber(0)) + .setEnableDropProtection(true) + .setReconciling(true) .build(); Operation resultOperation = Operation.newBuilder() diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java index 30199947aed..14ab13fd74e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/admin/database/v1/MockDatabaseAdminImpl.java @@ -50,6 +50,7 @@ import com.google.spanner.admin.database.v1.RestoreDatabaseRequest; import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import io.grpc.stub.StreamObserver; import java.util.ArrayList; import java.util.LinkedList; @@ -151,6 +152,27 @@ public void getDatabase(GetDatabaseRequest request, StreamObserver res } } + @Override + public void updateDatabase( + UpdateDatabaseRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Operation) { + requests.add(request); + responseObserver.onNext(((Operation) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method UpdateDatabase, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Operation.class.getName(), + Exception.class.getName()))); + } + } + @Override public void updateDatabaseDdl( UpdateDatabaseDdlRequest request, StreamObserver responseObserver) { 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 224679c6014..5fb4137fd2a 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 @@ -178,6 +178,52 @@ private DatabaseAdminGrpc() {} return getGetDatabaseMethod; } + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.longrunning.Operation> + getUpdateDatabaseMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "UpdateDatabase", + requestType = com.google.spanner.admin.database.v1.UpdateDatabaseRequest.class, + responseType = com.google.longrunning.Operation.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.longrunning.Operation> + getUpdateDatabaseMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.longrunning.Operation> + getUpdateDatabaseMethod; + if ((getUpdateDatabaseMethod = DatabaseAdminGrpc.getUpdateDatabaseMethod) == null) { + synchronized (DatabaseAdminGrpc.class) { + if ((getUpdateDatabaseMethod = DatabaseAdminGrpc.getUpdateDatabaseMethod) == null) { + DatabaseAdminGrpc.getUpdateDatabaseMethod = + getUpdateDatabaseMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "UpdateDatabase")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.longrunning.Operation.getDefaultInstance())) + .setSchemaDescriptor( + new DatabaseAdminMethodDescriptorSupplier("UpdateDatabase")) + .build(); + } + } + } + return getUpdateDatabaseMethod; + } + private static volatile io.grpc.MethodDescriptor< com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest, com.google.longrunning.Operation> @@ -1002,6 +1048,50 @@ default void getDatabase( getGetDatabaseMethod(), responseObserver); } + /** + * + * + *
+     * Updates a Cloud Spanner database. The returned
+     * [long-running operation][google.longrunning.Operation] can be used to track
+     * the progress of updating the database. If the named database does not
+     * exist, returns `NOT_FOUND`.
+     * While the operation is pending:
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field is set to true.
+     *   * Cancelling the operation is best-effort. If the cancellation succeeds,
+     *     the operation metadata's
+     *     [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time]
+     *     is set, the updates are reverted, and the operation terminates with a
+     *     `CANCELLED` status.
+     *   * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error
+     *     until the pending operation is done (returns successfully or with
+     *     error).
+     *   * Reading the database via the API continues to give the pre-request
+     *     values.
+     * Upon completion of the returned operation:
+     *   * The new values are in effect and readable via the API.
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field becomes false.
+     * The returned [long-running operation][google.longrunning.Operation] will
+     * have a name of the format
+     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`
+     * and can be used to track the database modification. The
+     * [metadata][google.longrunning.Operation.metadata] field type is
+     * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata].
+     * The [response][google.longrunning.Operation.response] field type is
+     * [Database][google.spanner.admin.database.v1.Database], if successful.
+     * 
+ */ + default void updateDatabase( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getUpdateDatabaseMethod(), responseObserver); + } + /** * * @@ -1421,6 +1511,52 @@ public void getDatabase( responseObserver); } + /** + * + * + *
+     * Updates a Cloud Spanner database. The returned
+     * [long-running operation][google.longrunning.Operation] can be used to track
+     * the progress of updating the database. If the named database does not
+     * exist, returns `NOT_FOUND`.
+     * While the operation is pending:
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field is set to true.
+     *   * Cancelling the operation is best-effort. If the cancellation succeeds,
+     *     the operation metadata's
+     *     [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time]
+     *     is set, the updates are reverted, and the operation terminates with a
+     *     `CANCELLED` status.
+     *   * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error
+     *     until the pending operation is done (returns successfully or with
+     *     error).
+     *   * Reading the database via the API continues to give the pre-request
+     *     values.
+     * Upon completion of the returned operation:
+     *   * The new values are in effect and readable via the API.
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field becomes false.
+     * The returned [long-running operation][google.longrunning.Operation] will
+     * have a name of the format
+     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`
+     * and can be used to track the database modification. The
+     * [metadata][google.longrunning.Operation.metadata] field type is
+     * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata].
+     * The [response][google.longrunning.Operation.response] field type is
+     * [Database][google.spanner.admin.database.v1.Database], if successful.
+     * 
+ */ + public void updateDatabase( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getUpdateDatabaseMethod(), getCallOptions()), + request, + responseObserver); + } + /** * * @@ -1839,6 +1975,49 @@ public com.google.spanner.admin.database.v1.Database getDatabase( getChannel(), getGetDatabaseMethod(), getCallOptions(), request); } + /** + * + * + *
+     * Updates a Cloud Spanner database. The returned
+     * [long-running operation][google.longrunning.Operation] can be used to track
+     * the progress of updating the database. If the named database does not
+     * exist, returns `NOT_FOUND`.
+     * While the operation is pending:
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field is set to true.
+     *   * Cancelling the operation is best-effort. If the cancellation succeeds,
+     *     the operation metadata's
+     *     [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time]
+     *     is set, the updates are reverted, and the operation terminates with a
+     *     `CANCELLED` status.
+     *   * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error
+     *     until the pending operation is done (returns successfully or with
+     *     error).
+     *   * Reading the database via the API continues to give the pre-request
+     *     values.
+     * Upon completion of the returned operation:
+     *   * The new values are in effect and readable via the API.
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field becomes false.
+     * The returned [long-running operation][google.longrunning.Operation] will
+     * have a name of the format
+     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`
+     * and can be used to track the database modification. The
+     * [metadata][google.longrunning.Operation.metadata] field type is
+     * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata].
+     * The [response][google.longrunning.Operation.response] field type is
+     * [Database][google.spanner.admin.database.v1.Database], if successful.
+     * 
+ */ + public com.google.longrunning.Operation updateDatabase( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getUpdateDatabaseMethod(), getCallOptions(), request); + } + /** * * @@ -2206,6 +2385,49 @@ protected DatabaseAdminFutureStub build( getChannel().newCall(getGetDatabaseMethod(), getCallOptions()), request); } + /** + * + * + *
+     * Updates a Cloud Spanner database. The returned
+     * [long-running operation][google.longrunning.Operation] can be used to track
+     * the progress of updating the database. If the named database does not
+     * exist, returns `NOT_FOUND`.
+     * While the operation is pending:
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field is set to true.
+     *   * Cancelling the operation is best-effort. If the cancellation succeeds,
+     *     the operation metadata's
+     *     [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time]
+     *     is set, the updates are reverted, and the operation terminates with a
+     *     `CANCELLED` status.
+     *   * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error
+     *     until the pending operation is done (returns successfully or with
+     *     error).
+     *   * Reading the database via the API continues to give the pre-request
+     *     values.
+     * Upon completion of the returned operation:
+     *   * The new values are in effect and readable via the API.
+     *   * The database's
+     *     [reconciling][google.spanner.admin.database.v1.Database.reconciling]
+     *     field becomes false.
+     * The returned [long-running operation][google.longrunning.Operation] will
+     * have a name of the format
+     * `projects/<project>/instances/<instance>/databases/<database>/operations/<operation_id>`
+     * and can be used to track the database modification. The
+     * [metadata][google.longrunning.Operation.metadata] field type is
+     * [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata].
+     * The [response][google.longrunning.Operation.response] field type is
+     * [Database][google.spanner.admin.database.v1.Database], if successful.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + updateDatabase(com.google.spanner.admin.database.v1.UpdateDatabaseRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getUpdateDatabaseMethod(), getCallOptions()), request); + } + /** * * @@ -2515,22 +2737,23 @@ protected DatabaseAdminFutureStub build( private static final int METHODID_LIST_DATABASES = 0; private static final int METHODID_CREATE_DATABASE = 1; private static final int METHODID_GET_DATABASE = 2; - private static final int METHODID_UPDATE_DATABASE_DDL = 3; - private static final int METHODID_DROP_DATABASE = 4; - private static final int METHODID_GET_DATABASE_DDL = 5; - private static final int METHODID_SET_IAM_POLICY = 6; - private static final int METHODID_GET_IAM_POLICY = 7; - private static final int METHODID_TEST_IAM_PERMISSIONS = 8; - private static final int METHODID_CREATE_BACKUP = 9; - private static final int METHODID_COPY_BACKUP = 10; - private static final int METHODID_GET_BACKUP = 11; - private static final int METHODID_UPDATE_BACKUP = 12; - private static final int METHODID_DELETE_BACKUP = 13; - private static final int METHODID_LIST_BACKUPS = 14; - private static final int METHODID_RESTORE_DATABASE = 15; - private static final int METHODID_LIST_DATABASE_OPERATIONS = 16; - private static final int METHODID_LIST_BACKUP_OPERATIONS = 17; - private static final int METHODID_LIST_DATABASE_ROLES = 18; + private static final int METHODID_UPDATE_DATABASE = 3; + private static final int METHODID_UPDATE_DATABASE_DDL = 4; + private static final int METHODID_DROP_DATABASE = 5; + private static final int METHODID_GET_DATABASE_DDL = 6; + private static final int METHODID_SET_IAM_POLICY = 7; + private static final int METHODID_GET_IAM_POLICY = 8; + private static final int METHODID_TEST_IAM_PERMISSIONS = 9; + private static final int METHODID_CREATE_BACKUP = 10; + private static final int METHODID_COPY_BACKUP = 11; + private static final int METHODID_GET_BACKUP = 12; + private static final int METHODID_UPDATE_BACKUP = 13; + private static final int METHODID_DELETE_BACKUP = 14; + private static final int METHODID_LIST_BACKUPS = 15; + private static final int METHODID_RESTORE_DATABASE = 16; + private static final int METHODID_LIST_DATABASE_OPERATIONS = 17; + private static final int METHODID_LIST_BACKUP_OPERATIONS = 18; + private static final int METHODID_LIST_DATABASE_ROLES = 19; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -2567,6 +2790,11 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_UPDATE_DATABASE: + serviceImpl.updateDatabase( + (com.google.spanner.admin.database.v1.UpdateDatabaseRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_UPDATE_DATABASE_DDL: serviceImpl.updateDatabaseDdl( (com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest) request, @@ -2697,6 +2925,12 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser new MethodHandlers< com.google.spanner.admin.database.v1.GetDatabaseRequest, com.google.spanner.admin.database.v1.Database>(service, METHODID_GET_DATABASE))) + .addMethod( + getUpdateDatabaseMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.longrunning.Operation>(service, METHODID_UPDATE_DATABASE))) .addMethod( getUpdateDatabaseDdlMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -2851,6 +3085,7 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getListDatabasesMethod()) .addMethod(getCreateDatabaseMethod()) .addMethod(getGetDatabaseMethod()) + .addMethod(getUpdateDatabaseMethod()) .addMethod(getUpdateDatabaseDdlMethod()) .addMethod(getDropDatabaseMethod()) .addMethod(getGetDatabaseDdlMethod()) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java index 5473f4bc7fd..f982cfe291a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java @@ -879,6 +879,44 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect() : result; } + public static final int ENABLE_DROP_PROTECTION_FIELD_NUMBER = 11; + private boolean enableDropProtection_ = false; + /** + * + * + *
+   * Whether drop protection is enabled for this database. Defaults to false,
+   * if not set.
+   * 
+ * + * bool enable_drop_protection = 11; + * + * @return The enableDropProtection. + */ + @java.lang.Override + public boolean getEnableDropProtection() { + return enableDropProtection_; + } + + public static final int RECONCILING_FIELD_NUMBER = 12; + private boolean reconciling_ = false; + /** + * + * + *
+   * Output only. If true, the database is being updated. If false, there are no
+   * ongoing update operations for the database.
+   * 
+ * + * bool reconciling = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * @return The reconciling. + */ + @java.lang.Override + public boolean getReconciling() { + return reconciling_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -926,6 +964,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io .getNumber()) { output.writeEnum(10, databaseDialect_); } + if (enableDropProtection_ != false) { + output.writeBool(11, enableDropProtection_); + } + if (reconciling_ != false) { + output.writeBool(12, reconciling_); + } getUnknownFields().writeTo(output); } @@ -968,6 +1012,12 @@ public int getSerializedSize() { .getNumber()) { size += com.google.protobuf.CodedOutputStream.computeEnumSize(10, databaseDialect_); } + if (enableDropProtection_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(11, enableDropProtection_); + } + if (reconciling_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(12, reconciling_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -1006,6 +1056,8 @@ public boolean equals(final java.lang.Object obj) { } if (!getDefaultLeader().equals(other.getDefaultLeader())) return false; if (databaseDialect_ != other.databaseDialect_) return false; + if (getEnableDropProtection() != other.getEnableDropProtection()) return false; + if (getReconciling() != other.getReconciling()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -1047,6 +1099,10 @@ public int hashCode() { hash = (53 * hash) + getDefaultLeader().hashCode(); hash = (37 * hash) + DATABASE_DIALECT_FIELD_NUMBER; hash = (53 * hash) + databaseDialect_; + hash = (37 * hash) + ENABLE_DROP_PROTECTION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getEnableDropProtection()); + hash = (37 * hash) + RECONCILING_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getReconciling()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -1218,6 +1274,8 @@ public Builder clear() { } defaultLeader_ = ""; databaseDialect_ = 0; + enableDropProtection_ = false; + reconciling_ = false; return this; } @@ -1299,6 +1357,12 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Database result) if (((from_bitField0_ & 0x00000200) != 0)) { result.databaseDialect_ = databaseDialect_; } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.enableDropProtection_ = enableDropProtection_; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + result.reconciling_ = reconciling_; + } } @java.lang.Override @@ -1406,6 +1470,12 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Database other) { if (other.databaseDialect_ != 0) { setDatabaseDialectValue(other.getDatabaseDialectValue()); } + if (other.getEnableDropProtection() != false) { + setEnableDropProtection(other.getEnableDropProtection()); + } + if (other.getReconciling() != false) { + setReconciling(other.getReconciling()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1502,6 +1572,18 @@ public Builder mergeFrom( bitField0_ |= 0x00000200; break; } // case 80 + case 88: + { + enableDropProtection_ = input.readBool(); + bitField0_ |= 0x00000400; + break; + } // case 88 + case 96: + { + reconciling_ = input.readBool(); + bitField0_ |= 0x00000800; + break; + } // case 96 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -3498,6 +3580,118 @@ public Builder clearDatabaseDialect() { return this; } + private boolean enableDropProtection_; + /** + * + * + *
+     * Whether drop protection is enabled for this database. Defaults to false,
+     * if not set.
+     * 
+ * + * bool enable_drop_protection = 11; + * + * @return The enableDropProtection. + */ + @java.lang.Override + public boolean getEnableDropProtection() { + return enableDropProtection_; + } + /** + * + * + *
+     * Whether drop protection is enabled for this database. Defaults to false,
+     * if not set.
+     * 
+ * + * bool enable_drop_protection = 11; + * + * @param value The enableDropProtection to set. + * @return This builder for chaining. + */ + public Builder setEnableDropProtection(boolean value) { + + enableDropProtection_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + /** + * + * + *
+     * Whether drop protection is enabled for this database. Defaults to false,
+     * if not set.
+     * 
+ * + * bool enable_drop_protection = 11; + * + * @return This builder for chaining. + */ + public Builder clearEnableDropProtection() { + bitField0_ = (bitField0_ & ~0x00000400); + enableDropProtection_ = false; + onChanged(); + return this; + } + + private boolean reconciling_; + /** + * + * + *
+     * Output only. If true, the database is being updated. If false, there are no
+     * ongoing update operations for the database.
+     * 
+ * + * bool reconciling = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * @return The reconciling. + */ + @java.lang.Override + public boolean getReconciling() { + return reconciling_; + } + /** + * + * + *
+     * Output only. If true, the database is being updated. If false, there are no
+     * ongoing update operations for the database.
+     * 
+ * + * bool reconciling = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * @param value The reconciling to set. + * @return This builder for chaining. + */ + public Builder setReconciling(boolean value) { + + reconciling_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + /** + * + * + *
+     * Output only. If true, the database is being updated. If false, there are no
+     * ongoing update operations for the database.
+     * 
+ * + * bool reconciling = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * @return This builder for chaining. + */ + public Builder clearReconciling() { + bitField0_ = (bitField0_ & ~0x00000800); + reconciling_ = 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-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java index de9373a0f9e..0252781fe91 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java @@ -457,4 +457,32 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr * @return The databaseDialect. */ com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect(); + + /** + * + * + *
+   * Whether drop protection is enabled for this database. Defaults to false,
+   * if not set.
+   * 
+ * + * bool enable_drop_protection = 11; + * + * @return The enableDropProtection. + */ + boolean getEnableDropProtection(); + + /** + * + * + *
+   * Output only. If true, the database is being updated. If false, there are no
+   * ongoing update operations for the database.
+   * 
+ * + * bool reconciling = 12 [(.google.api.field_behavior) = OUTPUT_ONLY]; + * + * @return The reconciling. + */ + boolean getReconciling(); } 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 e91f9a65717..0045ee30f35 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 @@ -55,6 +55,14 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable @@ -128,239 +136,257 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "source.proto\032\036google/iam/v1/iam_policy.p" + "roto\032\032google/iam/v1/policy.proto\032#google" + "/longrunning/operations.proto\032\033google/pr" - + "otobuf/empty.proto\032\037google/protobuf/time" - + "stamp.proto\032-google/spanner/admin/databa" - + "se/v1/backup.proto\032-google/spanner/admin" - + "/database/v1/common.proto\"\253\001\n\013RestoreInf" - + "o\022H\n\013source_type\030\001 \001(\01623.google.spanner." - + "admin.database.v1.RestoreSourceType\022C\n\013b" - + "ackup_info\030\002 \001(\0132,.google.spanner.admin." - + "database.v1.BackupInfoH\000B\r\n\013source_info\"" - + "\220\006\n\010Database\022\021\n\004name\030\001 \001(\tB\003\340A\002\022D\n\005state" - + "\030\002 \001(\01620.google.spanner.admin.database.v" - + "1.Database.StateB\003\340A\003\0224\n\013create_time\030\003 \001" - + "(\0132\032.google.protobuf.TimestampB\003\340A\003\022H\n\014r" - + "estore_info\030\004 \001(\0132-.google.spanner.admin" - + ".database.v1.RestoreInfoB\003\340A\003\022R\n\021encrypt" - + "ion_config\030\005 \001(\01322.google.spanner.admin." - + "database.v1.EncryptionConfigB\003\340A\003\022N\n\017enc" - + "ryption_info\030\010 \003(\01320.google.spanner.admi" - + "n.database.v1.EncryptionInfoB\003\340A\003\022%\n\030ver" - + "sion_retention_period\030\006 \001(\tB\003\340A\003\022>\n\025earl" - + "iest_version_time\030\007 \001(\0132\032.google.protobu" - + "f.TimestampB\003\340A\003\022\033\n\016default_leader\030\t \001(\t" - + "B\003\340A\003\022P\n\020database_dialect\030\n \001(\01621.google" - + ".spanner.admin.database.v1.DatabaseDiale" - + "ctB\003\340A\003\"M\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022" - + "\014\n\010CREATING\020\001\022\t\n\005READY\020\002\022\024\n\020READY_OPTIMI" - + "ZING\020\003:b\352A_\n\037spanner.googleapis.com/Data" - + "base\022\202\323\344\223\002/\022-/v1/{parent=projects" - + "/*/instances/*}/databases\332A\006parent\022\244\002\n\016C" - + "reateDatabase\0227.google.spanner.admin.dat" - + "abase.v1.CreateDatabaseRequest\032\035.google." - + "longrunning.Operation\"\271\001\202\323\344\223\0022\"-/v1/{par" - + "ent=projects/*/instances/*}/databases:\001*" - + "\332A\027parent,create_statement\312Ad\n)google.sp" - + "anner.admin.database.v1.Database\0227google" - + ".spanner.admin.database.v1.CreateDatabas" - + "eMetadata\022\255\001\n\013GetDatabase\0224.google.spann" - + "er.admin.database.v1.GetDatabaseRequest\032" - + "*.google.spanner.admin.database.v1.Datab" - + "ase\"<\202\323\344\223\002/\022-/v1/{name=projects/*/instan" - + "ces/*/databases/*}\332A\004name\022\235\002\n\021UpdateData" - + "baseDdl\022:.google.spanner.admin.database." - + "v1.UpdateDatabaseDdlRequest\032\035.google.lon" - + "grunning.Operation\"\254\001\202\323\344\223\002:25/v1/{databa" - + "se=projects/*/instances/*/databases/*}/d" - + "dl:\001*\332A\023database,statements\312AS\n\025google.p" - + "rotobuf.Empty\022:google.spanner.admin.data" - + "base.v1.UpdateDatabaseDdlMetadata\022\243\001\n\014Dr" - + "opDatabase\0225.google.spanner.admin.databa" - + "se.v1.DropDatabaseRequest\032\026.google.proto" - + "buf.Empty\"D\202\323\344\223\0023*1/v1/{database=project" - + "s/*/instances/*/databases/*}\332A\010database\022" - + "\315\001\n\016GetDatabaseDdl\0227.google.spanner.admi" - + "n.database.v1.GetDatabaseDdlRequest\0328.go" - + "ogle.spanner.admin.database.v1.GetDataba" - + "seDdlResponse\"H\202\323\344\223\0027\0225/v1/{database=pro" - + "jects/*/instances/*/databases/*}/ddl\332A\010d" - + "atabase\022\353\001\n\014SetIamPolicy\022\".google.iam.v1" - + ".SetIamPolicyRequest\032\025.google.iam.v1.Pol" - + "icy\"\237\001\202\323\344\223\002\206\001\">/v1/{resource=projects/*/" - + "instances/*/databases/*}:setIamPolicy:\001*" - + "ZA\"/v1/{resource=projects/*/in" - + "stances/*/databases/*}:getIamPolicy:\001*ZA" - + "\".google.sp" - + "anner.admin.database.v1.ListBackupOperat" - + "ionsResponse\"E\202\323\344\223\0026\0224/v1/{parent=projec" - + "ts/*/instances/*}/backupOperations\332A\006par" - + "ent\022\334\001\n\021ListDatabaseRoles\022:.google.spann" - + "er.admin.database.v1.ListDatabaseRolesRe" - + "quest\032;.google.spanner.admin.database.v1" - + ".ListDatabaseRolesResponse\"N\202\323\344\223\002?\022=/v1/" - + "{parent=projects/*/instances/*/databases" - + "/*}/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\330\002\n$com.goo" - + "gle.spanner.admin.database.v1B\031SpannerDa" - + "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" + + "info\030\002 \001(\0132,.google.spanner.admin.databa" + + "se.v1.BackupInfoH\000B\r\n\013source_info\"\312\006\n\010Da" + + "tabase\022\021\n\004name\030\001 \001(\tB\003\340A\002\022D\n\005state\030\002 \001(\016" + + "20.google.spanner.admin.database.v1.Data" + + "base.StateB\003\340A\003\0224\n\013create_time\030\003 \001(\0132\032.g" + + "oogle.protobuf.TimestampB\003\340A\003\022H\n\014restore" + + "_info\030\004 \001(\0132-.google.spanner.admin.datab" + + "ase.v1.RestoreInfoB\003\340A\003\022R\n\021encryption_co" + + "nfig\030\005 \001(\01322.google.spanner.admin.databa" + + "se.v1.EncryptionConfigB\003\340A\003\022N\n\017encryptio" + + "n_info\030\010 \003(\01320.google.spanner.admin.data" + + "base.v1.EncryptionInfoB\003\340A\003\022%\n\030version_r" + + "etention_period\030\006 \001(\tB\003\340A\003\022>\n\025earliest_v" + + "ersion_time\030\007 \001(\0132\032.google.protobuf.Time" + + "stampB\003\340A\003\022\033\n\016default_leader\030\t \001(\tB\003\340A\003\022" + + "P\n\020database_dialect\030\n \001(\01621.google.spann" + + "er.admin.database.v1.DatabaseDialectB\003\340A" + + "\003\022\036\n\026enable_drop_protection\030\013 \001(\010\022\030\n\013rec" + + "onciling\030\014 \001(\010B\003\340A\003\"M\n\005State\022\025\n\021STATE_UN" + + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002\022\024\n\020" + + "READY_OPTIMIZING\020\003:b\352A_\n\037spanner.googlea" + + "pis.com/Database\022\202\323\344\223\002/\022-" + + "/v1/{parent=projects/*/instances/*}/data" + + "bases\332A\006parent\022\244\002\n\016CreateDatabase\0227.goog" + + "le.spanner.admin.database.v1.CreateDatab" + + "aseRequest\032\035.google.longrunning.Operatio" + + "n\"\271\001\202\323\344\223\0022\"-/v1/{parent=projects/*/insta" + + "nces/*}/databases:\001*\332A\027parent,create_sta" + + "tement\312Ad\n)google.spanner.admin.database" + + ".v1.Database\0227google.spanner.admin.datab" + + "ase.v1.CreateDatabaseMetadata\022\255\001\n\013GetDat" + + "abase\0224.google.spanner.admin.database.v1" + + ".GetDatabaseRequest\032*.google.spanner.adm" + + "in.database.v1.Database\"<\202\323\344\223\002/\022-/v1/{na" + + "me=projects/*/instances/*/databases/*}\332A" + + "\004name\022\357\001\n\016UpdateDatabase\0227.google.spanne" + + "r.admin.database.v1.UpdateDatabaseReques" + + "t\032\035.google.longrunning.Operation\"\204\001\202\323\344\223\002" + + "B26/v1/{database.name=projects/*/instanc" + + "es/*/databases/*}:\010database\332A\024database,u" + + "pdate_mask\312A\"\n\010Database\022\026UpdateDatabaseM" + + "etadata\022\235\002\n\021UpdateDatabaseDdl\022:.google.s" + + "panner.admin.database.v1.UpdateDatabaseD" + + "dlRequest\032\035.google.longrunning.Operation" + + "\"\254\001\202\323\344\223\002:25/v1/{database=projects/*/inst" + + "ances/*/databases/*}/ddl:\001*\332A\023database,s" + + "tatements\312AS\n\025google.protobuf.Empty\022:goo" + + "gle.spanner.admin.database.v1.UpdateData" + + "baseDdlMetadata\022\243\001\n\014DropDatabase\0225.googl" + + "e.spanner.admin.database.v1.DropDatabase" + + "Request\032\026.google.protobuf.Empty\"D\202\323\344\223\0023*" + + "1/v1/{database=projects/*/instances/*/da" + + "tabases/*}\332A\010database\022\315\001\n\016GetDatabaseDdl" + + "\0227.google.spanner.admin.database.v1.GetD" + + "atabaseDdlRequest\0328.google.spanner.admin" + + ".database.v1.GetDatabaseDdlResponse\"H\202\323\344" + + "\223\0027\0225/v1/{database=projects/*/instances/" + + "*/databases/*}/ddl\332A\010database\022\353\001\n\014SetIam" + + "Policy\022\".google.iam.v1.SetIamPolicyReque" + + "st\032\025.google.iam.v1.Policy\"\237\001\202\323\344\223\002\206\001\">/v1" + + "/{resource=projects/*/instances/*/databa" + + "ses/*}:setIamPolicy:\001*ZA\"/v1/{" + + "resource=projects/*/instances/*/database" + + "s/*}:getIamPolicy:\001*ZA\".google.spanner.admin.databa" + + "se.v1.ListBackupOperationsResponse\"E\202\323\344\223" + + "\0026\0224/v1/{parent=projects/*/instances/*}/" + + "backupOperations\332A\006parent\022\334\001\n\021ListDataba" + + "seRoles\022:.google.spanner.admin.database." + + "v1.ListDatabaseRolesRequest\032;.google.spa" + + "nner.admin.database.v1.ListDatabaseRoles" + + "Response\"N\202\323\344\223\002?\022=/v1/{parent=projects/*" + + "/instances/*/databases/*}/databaseRoles\332" + + "A\006parent\032x\312A\026spanner.googleapis.com\322A\\ht" + + "tps://www.googleapis.com/auth/cloud-plat" + + "form,https://www.googleapis.com/auth/spa" + + "nner.adminB\330\002\n$com.google.spanner.admin." + + "database.v1B\031SpannerDatabaseAdminProtoP\001" + + "ZFcloud.google.com/go/spanner/admin/data" + + "base/apiv1/databasepb;databasepb\252\002&Googl" + + "e.Cloud.Spanner.Admin.Database.V1\312\002&Goog" + + "le\\Cloud\\Spanner\\Admin\\Database\\V1\352\002+Goo" + + "gle::Cloud::Spanner::Admin::Database::V1" + + "\352AJ\n\037spanner.googleapis.com/Instance\022\'pr" + + "ojects/{project}/instances/{instance}b\006p" + + "roto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -374,6 +400,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.iam.v1.PolicyProto.getDescriptor(), com.google.longrunning.OperationsProto.getDescriptor(), com.google.protobuf.EmptyProto.getDescriptor(), + com.google.protobuf.FieldMaskProto.getDescriptor(), com.google.protobuf.TimestampProto.getDescriptor(), com.google.spanner.admin.database.v1.BackupProto.getDescriptor(), com.google.spanner.admin.database.v1.CommonProto.getDescriptor(), @@ -402,6 +429,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EarliestVersionTime", "DefaultLeader", "DatabaseDialect", + "EnableDropProtection", + "Reconciling", }); internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor = getDescriptor().getMessageTypes().get(2); @@ -443,8 +472,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new java.lang.String[] { "Name", }); - internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor = + internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor = getDescriptor().getMessageTypes().get(7); + internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor, + new java.lang.String[] { + "Database", "UpdateMask", + }); + internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor, + new java.lang.String[] { + "Request", "Progress", "CancelTime", + }); + internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor = + getDescriptor().getMessageTypes().get(9); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor, @@ -452,7 +497,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Database", "Statements", "OperationId", }); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor = - getDescriptor().getMessageTypes().get(8); + getDescriptor().getMessageTypes().get(10); internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor, @@ -460,7 +505,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Database", "Statements", "CommitTimestamps", "Throttled", "Progress", }); internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageTypes().get(11); internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor, @@ -468,7 +513,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Database", }); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageTypes().get(12); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor, @@ -476,7 +521,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Database", }); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageTypes().get(13); internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor, @@ -484,7 +529,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Statements", }); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageTypes().get(14); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor, @@ -492,7 +537,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Parent", "Filter", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageTypes().get(15); internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor, @@ -500,7 +545,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Operations", "NextPageToken", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageTypes().get(16); internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor, @@ -508,7 +553,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Parent", "DatabaseId", "Backup", "EncryptionConfig", "Source", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor = - getDescriptor().getMessageTypes().get(15); + getDescriptor().getMessageTypes().get(17); internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor, @@ -516,7 +561,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EncryptionType", "KmsKeyName", }); internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(16); + getDescriptor().getMessageTypes().get(18); internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor, @@ -530,7 +575,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "SourceInfo", }); internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor = - getDescriptor().getMessageTypes().get(17); + getDescriptor().getMessageTypes().get(19); internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor, @@ -538,7 +583,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Name", "Progress", }); internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor = - getDescriptor().getMessageTypes().get(18); + getDescriptor().getMessageTypes().get(20); internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor, @@ -546,7 +591,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Name", }); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor = - getDescriptor().getMessageTypes().get(19); + getDescriptor().getMessageTypes().get(21); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor, @@ -554,7 +599,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Parent", "PageSize", "PageToken", }); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor = - getDescriptor().getMessageTypes().get(20); + getDescriptor().getMessageTypes().get(22); internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor, @@ -582,6 +627,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.iam.v1.PolicyProto.getDescriptor(); com.google.longrunning.OperationsProto.getDescriptor(); com.google.protobuf.EmptyProto.getDescriptor(); + com.google.protobuf.FieldMaskProto.getDescriptor(); com.google.protobuf.TimestampProto.getDescriptor(); com.google.spanner.admin.database.v1.BackupProto.getDescriptor(); com.google.spanner.admin.database.v1.CommonProto.getDescriptor(); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java new file mode 100644 index 00000000000..f37b1ad1ef6 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java @@ -0,0 +1,1291 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/spanner_database_admin.proto + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
+ * Metadata type for the operation returned by
+ * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+ * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseMetadata} + */ +public final class UpdateDatabaseMetadata extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseMetadata) + UpdateDatabaseMetadataOrBuilder { + private static final long serialVersionUID = 0L; + // Use UpdateDatabaseMetadata.newBuilder() to construct. + private UpdateDatabaseMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private UpdateDatabaseMetadata() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new UpdateDatabaseMetadata(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.class, + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.Builder.class); + } + + public static final int REQUEST_FIELD_NUMBER = 1; + private com.google.spanner.admin.database.v1.UpdateDatabaseRequest request_; + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return Whether the request field is set. + */ + @java.lang.Override + public boolean hasRequest() { + return request_ != null; + } + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return The request. + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest() { + return request_ == null + ? com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance() + : request_; + } + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder getRequestOrBuilder() { + return request_ == null + ? com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance() + : request_; + } + + public static final int PROGRESS_FIELD_NUMBER = 2; + private com.google.spanner.admin.database.v1.OperationProgress progress_; + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return Whether the progress field is set. + */ + @java.lang.Override + public boolean hasProgress() { + return progress_ != null; + } + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return The progress. + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.OperationProgress getProgress() { + return progress_ == null + ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() + : progress_; + } + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder() { + return progress_ == null + ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() + : progress_; + } + + public static final int CANCEL_TIME_FIELD_NUMBER = 3; + private com.google.protobuf.Timestamp cancelTime_; + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return Whether the cancelTime field is set. + */ + @java.lang.Override + public boolean hasCancelTime() { + return cancelTime_ != null; + } + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return The cancelTime. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getCancelTime() { + return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; + } + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { + return cancelTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : cancelTime_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (request_ != null) { + output.writeMessage(1, getRequest()); + } + if (progress_ != null) { + output.writeMessage(2, getProgress()); + } + if (cancelTime_ != null) { + output.writeMessage(3, getCancelTime()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (request_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getRequest()); + } + if (progress_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getProgress()); + } + if (cancelTime_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getCancelTime()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.UpdateDatabaseMetadata)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata other = + (com.google.spanner.admin.database.v1.UpdateDatabaseMetadata) obj; + + if (hasRequest() != other.hasRequest()) return false; + if (hasRequest()) { + if (!getRequest().equals(other.getRequest())) return false; + } + if (hasProgress() != other.hasProgress()) return false; + if (hasProgress()) { + if (!getProgress().equals(other.getProgress())) return false; + } + if (hasCancelTime() != other.hasCancelTime()) return false; + if (hasCancelTime()) { + if (!getCancelTime().equals(other.getCancelTime())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRequest()) { + hash = (37 * hash) + REQUEST_FIELD_NUMBER; + hash = (53 * hash) + getRequest().hashCode(); + } + if (hasProgress()) { + hash = (37 * hash) + PROGRESS_FIELD_NUMBER; + hash = (53 * hash) + getProgress().hashCode(); + } + if (hasCancelTime()) { + hash = (37 * hash) + CANCEL_TIME_FIELD_NUMBER; + hash = (53 * hash) + getCancelTime().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * Metadata type for the operation returned by
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseMetadata} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseMetadata) + com.google.spanner.admin.database.v1.UpdateDatabaseMetadataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.class, + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + request_ = null; + if (requestBuilder_ != null) { + requestBuilder_.dispose(); + requestBuilder_ = null; + } + progress_ = null; + if (progressBuilder_ != null) { + progressBuilder_.dispose(); + progressBuilder_ = null; + } + cancelTime_ = null; + if (cancelTimeBuilder_ != null) { + cancelTimeBuilder_.dispose(); + cancelTimeBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseMetadata getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseMetadata build() { + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseMetadata buildPartial() { + com.google.spanner.admin.database.v1.UpdateDatabaseMetadata result = + new com.google.spanner.admin.database.v1.UpdateDatabaseMetadata(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.admin.database.v1.UpdateDatabaseMetadata result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.request_ = requestBuilder_ == null ? request_ : requestBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.progress_ = progressBuilder_ == null ? progress_ : progressBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.cancelTime_ = cancelTimeBuilder_ == null ? cancelTime_ : cancelTimeBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.UpdateDatabaseMetadata) { + return mergeFrom((com.google.spanner.admin.database.v1.UpdateDatabaseMetadata) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseMetadata other) { + if (other == com.google.spanner.admin.database.v1.UpdateDatabaseMetadata.getDefaultInstance()) + return this; + if (other.hasRequest()) { + mergeRequest(other.getRequest()); + } + if (other.hasProgress()) { + mergeProgress(other.getProgress()); + } + if (other.hasCancelTime()) { + mergeCancelTime(other.getCancelTime()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(getRequestFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(getProgressFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage(getCancelTimeFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.spanner.admin.database.v1.UpdateDatabaseRequest request_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, + com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder> + requestBuilder_; + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return Whether the request field is set. + */ + public boolean hasRequest() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return The request. + */ + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest() { + if (requestBuilder_ == null) { + return request_ == null + ? com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance() + : request_; + } else { + return requestBuilder_.getMessage(); + } + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public Builder setRequest(com.google.spanner.admin.database.v1.UpdateDatabaseRequest value) { + if (requestBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + request_ = value; + } else { + requestBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public Builder setRequest( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder builderForValue) { + if (requestBuilder_ == null) { + request_ = builderForValue.build(); + } else { + requestBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public Builder mergeRequest(com.google.spanner.admin.database.v1.UpdateDatabaseRequest value) { + if (requestBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && request_ != null + && request_ + != com.google.spanner.admin.database.v1.UpdateDatabaseRequest + .getDefaultInstance()) { + getRequestBuilder().mergeFrom(value); + } else { + request_ = value; + } + } else { + requestBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public Builder clearRequest() { + bitField0_ = (bitField0_ & ~0x00000001); + request_ = null; + if (requestBuilder_ != null) { + requestBuilder_.dispose(); + requestBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder getRequestBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRequestFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + public com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder + getRequestOrBuilder() { + if (requestBuilder_ != null) { + return requestBuilder_.getMessageOrBuilder(); + } else { + return request_ == null + ? com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance() + : request_; + } + } + /** + * + * + *
+     * The request for
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+     * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, + com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder> + getRequestFieldBuilder() { + if (requestBuilder_ == null) { + requestBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.UpdateDatabaseRequest, + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder, + com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder>( + getRequest(), getParentForChildren(), isClean()); + request_ = null; + } + return requestBuilder_; + } + + private com.google.spanner.admin.database.v1.OperationProgress progress_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.OperationProgress, + com.google.spanner.admin.database.v1.OperationProgress.Builder, + com.google.spanner.admin.database.v1.OperationProgressOrBuilder> + progressBuilder_; + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return Whether the progress field is set. + */ + public boolean hasProgress() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return The progress. + */ + public com.google.spanner.admin.database.v1.OperationProgress getProgress() { + if (progressBuilder_ == null) { + return progress_ == null + ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() + : progress_; + } else { + return progressBuilder_.getMessage(); + } + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public Builder setProgress(com.google.spanner.admin.database.v1.OperationProgress value) { + if (progressBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + progress_ = value; + } else { + progressBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public Builder setProgress( + com.google.spanner.admin.database.v1.OperationProgress.Builder builderForValue) { + if (progressBuilder_ == null) { + progress_ = builderForValue.build(); + } else { + progressBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public Builder mergeProgress(com.google.spanner.admin.database.v1.OperationProgress value) { + if (progressBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && progress_ != null + && progress_ + != com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance()) { + getProgressBuilder().mergeFrom(value); + } else { + progress_ = value; + } + } else { + progressBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public Builder clearProgress() { + bitField0_ = (bitField0_ & ~0x00000002); + progress_ = null; + if (progressBuilder_ != null) { + progressBuilder_.dispose(); + progressBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgressBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getProgressFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder() { + if (progressBuilder_ != null) { + return progressBuilder_.getMessageOrBuilder(); + } else { + return progress_ == null + ? com.google.spanner.admin.database.v1.OperationProgress.getDefaultInstance() + : progress_; + } + } + /** + * + * + *
+     * The progress of the
+     * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+     * operation.
+     * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.OperationProgress, + com.google.spanner.admin.database.v1.OperationProgress.Builder, + com.google.spanner.admin.database.v1.OperationProgressOrBuilder> + getProgressFieldBuilder() { + if (progressBuilder_ == null) { + progressBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.OperationProgress, + com.google.spanner.admin.database.v1.OperationProgress.Builder, + com.google.spanner.admin.database.v1.OperationProgressOrBuilder>( + getProgress(), getParentForChildren(), isClean()); + progress_ = null; + } + return progressBuilder_; + } + + private com.google.protobuf.Timestamp cancelTime_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + cancelTimeBuilder_; + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return Whether the cancelTime field is set. + */ + public boolean hasCancelTime() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return The cancelTime. + */ + public com.google.protobuf.Timestamp getCancelTime() { + if (cancelTimeBuilder_ == null) { + return cancelTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : cancelTime_; + } else { + return cancelTimeBuilder_.getMessage(); + } + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public Builder setCancelTime(com.google.protobuf.Timestamp value) { + if (cancelTimeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + cancelTime_ = value; + } else { + cancelTimeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public Builder setCancelTime(com.google.protobuf.Timestamp.Builder builderForValue) { + if (cancelTimeBuilder_ == null) { + cancelTime_ = builderForValue.build(); + } else { + cancelTimeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public Builder mergeCancelTime(com.google.protobuf.Timestamp value) { + if (cancelTimeBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && cancelTime_ != null + && cancelTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getCancelTimeBuilder().mergeFrom(value); + } else { + cancelTime_ = value; + } + } else { + cancelTimeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public Builder clearCancelTime() { + bitField0_ = (bitField0_ & ~0x00000004); + cancelTime_ = null; + if (cancelTimeBuilder_ != null) { + cancelTimeBuilder_.dispose(); + cancelTimeBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public com.google.protobuf.Timestamp.Builder getCancelTimeBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getCancelTimeFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + public com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder() { + if (cancelTimeBuilder_ != null) { + return cancelTimeBuilder_.getMessageOrBuilder(); + } else { + return cancelTime_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : cancelTime_; + } + } + /** + * + * + *
+     * The time at which this operation was cancelled. If set, this operation is
+     * in the process of undoing itself (which is best-effort).
+     * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + getCancelTimeFieldBuilder() { + if (cancelTimeBuilder_ == null) { + cancelTimeBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getCancelTime(), getParentForChildren(), isClean()); + cancelTime_ = null; + } + return cancelTimeBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseMetadata) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.UpdateDatabaseMetadata) + private static final com.google.spanner.admin.database.v1.UpdateDatabaseMetadata DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.UpdateDatabaseMetadata(); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseMetadata getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateDatabaseMetadata parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseMetadata getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java new file mode 100644 index 00000000000..876bdd9440f --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadataOrBuilder.java @@ -0,0 +1,142 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/spanner_database_admin.proto + +package com.google.spanner.admin.database.v1; + +public interface UpdateDatabaseMetadataOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseMetadata) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return Whether the request field is set. + */ + boolean hasRequest(); + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + * + * @return The request. + */ + com.google.spanner.admin.database.v1.UpdateDatabaseRequest getRequest(); + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * .google.spanner.admin.database.v1.UpdateDatabaseRequest request = 1; + */ + com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder getRequestOrBuilder(); + + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return Whether the progress field is set. + */ + boolean hasProgress(); + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + * + * @return The progress. + */ + com.google.spanner.admin.database.v1.OperationProgress getProgress(); + /** + * + * + *
+   * The progress of the
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]
+   * operation.
+   * 
+ * + * .google.spanner.admin.database.v1.OperationProgress progress = 2; + */ + com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder(); + + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return Whether the cancelTime field is set. + */ + boolean hasCancelTime(); + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + * + * @return The cancelTime. + */ + com.google.protobuf.Timestamp getCancelTime(); + /** + * + * + *
+   * The time at which this operation was cancelled. If set, this operation is
+   * in the process of undoing itself (which is best-effort).
+   * 
+ * + * .google.protobuf.Timestamp cancel_time = 3; + */ + com.google.protobuf.TimestampOrBuilder getCancelTimeOrBuilder(); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java new file mode 100644 index 00000000000..c496653a2fd --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java @@ -0,0 +1,1046 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/spanner_database_admin.proto + +package com.google.spanner.admin.database.v1; + +/** + * + * + *
+ * The request for
+ * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+ * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseRequest} + */ +public final class UpdateDatabaseRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.UpdateDatabaseRequest) + UpdateDatabaseRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use UpdateDatabaseRequest.newBuilder() to construct. + private UpdateDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private UpdateDatabaseRequest() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new UpdateDatabaseRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.class, + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder.class); + } + + public static final int DATABASE_FIELD_NUMBER = 1; + private com.google.spanner.admin.database.v1.Database database_; + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the database field is set. + */ + @java.lang.Override + public boolean hasDatabase() { + return database_ != null; + } + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The database. + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.Database getDatabase() { + return database_ == null + ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() + : database_; + } + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuilder() { + return database_ == null + ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() + : database_; + } + + public static final int UPDATE_MASK_FIELD_NUMBER = 2; + private com.google.protobuf.FieldMask updateMask_; + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + @java.lang.Override + public boolean hasUpdateMask() { + return updateMask_ != null; + } + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + @java.lang.Override + public com.google.protobuf.FieldMask getUpdateMask() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + return updateMask_ == null ? com.google.protobuf.FieldMask.getDefaultInstance() : updateMask_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (database_ != null) { + output.writeMessage(1, getDatabase()); + } + if (updateMask_ != null) { + output.writeMessage(2, getUpdateMask()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (database_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getDatabase()); + } + if (updateMask_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getUpdateMask()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.UpdateDatabaseRequest)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.UpdateDatabaseRequest other = + (com.google.spanner.admin.database.v1.UpdateDatabaseRequest) obj; + + if (hasDatabase() != other.hasDatabase()) return false; + if (hasDatabase()) { + if (!getDatabase().equals(other.getDatabase())) return false; + } + if (hasUpdateMask() != other.hasUpdateMask()) return false; + if (hasUpdateMask()) { + if (!getUpdateMask().equals(other.getUpdateMask())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasDatabase()) { + hash = (37 * hash) + DATABASE_FIELD_NUMBER; + hash = (53 * hash) + getDatabase().hashCode(); + } + if (hasUpdateMask()) { + hash = (37 * hash) + UPDATE_MASK_FIELD_NUMBER; + hash = (53 * hash) + getUpdateMask().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * The request for
+   * [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase].
+   * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.UpdateDatabaseRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.UpdateDatabaseRequest) + com.google.spanner.admin.database.v1.UpdateDatabaseRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.class, + com.google.spanner.admin.database.v1.UpdateDatabaseRequest.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.UpdateDatabaseRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + database_ = null; + if (databaseBuilder_ != null) { + databaseBuilder_.dispose(); + databaseBuilder_ = null; + } + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest build() { + com.google.spanner.admin.database.v1.UpdateDatabaseRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest buildPartial() { + com.google.spanner.admin.database.v1.UpdateDatabaseRequest result = + new com.google.spanner.admin.database.v1.UpdateDatabaseRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.admin.database.v1.UpdateDatabaseRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.database_ = databaseBuilder_ == null ? database_ : databaseBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.updateMask_ = updateMaskBuilder_ == null ? updateMask_ : updateMaskBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.UpdateDatabaseRequest) { + return mergeFrom((com.google.spanner.admin.database.v1.UpdateDatabaseRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseRequest other) { + if (other == com.google.spanner.admin.database.v1.UpdateDatabaseRequest.getDefaultInstance()) + return this; + if (other.hasDatabase()) { + mergeDatabase(other.getDatabase()); + } + if (other.hasUpdateMask()) { + mergeUpdateMask(other.getUpdateMask()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(getDatabaseFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(getUpdateMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.spanner.admin.database.v1.Database database_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.Database, + com.google.spanner.admin.database.v1.Database.Builder, + com.google.spanner.admin.database.v1.DatabaseOrBuilder> + databaseBuilder_; + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the database field is set. + */ + public boolean hasDatabase() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The database. + */ + public com.google.spanner.admin.database.v1.Database getDatabase() { + if (databaseBuilder_ == null) { + return database_ == null + ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() + : database_; + } else { + return databaseBuilder_.getMessage(); + } + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setDatabase(com.google.spanner.admin.database.v1.Database value) { + if (databaseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + database_ = value; + } else { + databaseBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setDatabase( + com.google.spanner.admin.database.v1.Database.Builder builderForValue) { + if (databaseBuilder_ == null) { + database_ = builderForValue.build(); + } else { + databaseBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeDatabase(com.google.spanner.admin.database.v1.Database value) { + if (databaseBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && database_ != null + && database_ != com.google.spanner.admin.database.v1.Database.getDefaultInstance()) { + getDatabaseBuilder().mergeFrom(value); + } else { + database_ = value; + } + } else { + databaseBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearDatabase() { + bitField0_ = (bitField0_ & ~0x00000001); + database_ = null; + if (databaseBuilder_ != null) { + databaseBuilder_.dispose(); + databaseBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.Database.Builder getDatabaseBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getDatabaseFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuilder() { + if (databaseBuilder_ != null) { + return databaseBuilder_.getMessageOrBuilder(); + } else { + return database_ == null + ? com.google.spanner.admin.database.v1.Database.getDefaultInstance() + : database_; + } + } + /** + * + * + *
+     * Required. The database to update.
+     * The `name` field of the database is of the form
+     * `projects/<project>/instances/<instance>/databases/<database>`.
+     * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.Database, + com.google.spanner.admin.database.v1.Database.Builder, + com.google.spanner.admin.database.v1.DatabaseOrBuilder> + getDatabaseFieldBuilder() { + if (databaseBuilder_ == null) { + databaseBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.admin.database.v1.Database, + com.google.spanner.admin.database.v1.Database.Builder, + com.google.spanner.admin.database.v1.DatabaseOrBuilder>( + getDatabase(), getParentForChildren(), isClean()); + database_ = null; + } + return databaseBuilder_; + } + + private com.google.protobuf.FieldMask updateMask_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + updateMaskBuilder_; + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + public boolean hasUpdateMask() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + public com.google.protobuf.FieldMask getUpdateMask() { + if (updateMaskBuilder_ == null) { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } else { + return updateMaskBuilder_.getMessage(); + } + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + updateMask_ = value; + } else { + updateMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setUpdateMask(com.google.protobuf.FieldMask.Builder builderForValue) { + if (updateMaskBuilder_ == null) { + updateMask_ = builderForValue.build(); + } else { + updateMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeUpdateMask(com.google.protobuf.FieldMask value) { + if (updateMaskBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && updateMask_ != null + && updateMask_ != com.google.protobuf.FieldMask.getDefaultInstance()) { + getUpdateMaskBuilder().mergeFrom(value); + } else { + updateMask_ = value; + } + } else { + updateMaskBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearUpdateMask() { + bitField0_ = (bitField0_ & ~0x00000002); + updateMask_ = null; + if (updateMaskBuilder_ != null) { + updateMaskBuilder_.dispose(); + updateMaskBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMask.Builder getUpdateMaskBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getUpdateMaskFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder() { + if (updateMaskBuilder_ != null) { + return updateMaskBuilder_.getMessageOrBuilder(); + } else { + return updateMask_ == null + ? com.google.protobuf.FieldMask.getDefaultInstance() + : updateMask_; + } + } + /** + * + * + *
+     * Required. The list of fields to update. Currently, only
+     * `enable_drop_protection` field can be updated.
+     * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder> + getUpdateMaskFieldBuilder() { + if (updateMaskBuilder_ == null) { + updateMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.FieldMask, + com.google.protobuf.FieldMask.Builder, + com.google.protobuf.FieldMaskOrBuilder>( + getUpdateMask(), getParentForChildren(), isClean()); + updateMask_ = null; + } + return updateMaskBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.UpdateDatabaseRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.UpdateDatabaseRequest) + private static final com.google.spanner.admin.database.v1.UpdateDatabaseRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.UpdateDatabaseRequest(); + } + + public static com.google.spanner.admin.database.v1.UpdateDatabaseRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateDatabaseRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.UpdateDatabaseRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java new file mode 100644 index 00000000000..810c0bce696 --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequestOrBuilder.java @@ -0,0 +1,113 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/spanner_database_admin.proto + +package com.google.spanner.admin.database.v1; + +public interface UpdateDatabaseRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.UpdateDatabaseRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the database field is set. + */ + boolean hasDatabase(); + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The database. + */ + com.google.spanner.admin.database.v1.Database getDatabase(); + /** + * + * + *
+   * Required. The database to update.
+   * The `name` field of the database is of the form
+   * `projects/<project>/instances/<instance>/databases/<database>`.
+   * 
+ * + * + * .google.spanner.admin.database.v1.Database database = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.admin.database.v1.DatabaseOrBuilder getDatabaseOrBuilder(); + + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the updateMask field is set. + */ + boolean hasUpdateMask(); + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The updateMask. + */ + com.google.protobuf.FieldMask getUpdateMask(); + /** + * + * + *
+   * Required. The list of fields to update. Currently, only
+   * `enable_drop_protection` field can be updated.
+   * 
+ * + * .google.protobuf.FieldMask update_mask = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.FieldMaskOrBuilder getUpdateMaskOrBuilder(); +} 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 4d98fa1313f..f45bb932fda 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 @@ -1,4 +1,4 @@ -// Copyright 2022 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import "google/iam/v1/iam_policy.proto"; import "google/iam/v1/policy.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; import "google/spanner/admin/database/v1/backup.proto"; import "google/spanner/admin/database/v1/common.proto"; @@ -89,6 +90,55 @@ service DatabaseAdmin { option (google.api.method_signature) = "name"; } + // Updates a Cloud Spanner database. The returned + // [long-running operation][google.longrunning.Operation] can be used to track + // the progress of updating the database. If the named database does not + // exist, returns `NOT_FOUND`. + // + // While the operation is pending: + // + // * The database's + // [reconciling][google.spanner.admin.database.v1.Database.reconciling] + // field is set to true. + // * Cancelling the operation is best-effort. If the cancellation succeeds, + // the operation metadata's + // [cancel_time][google.spanner.admin.database.v1.UpdateDatabaseMetadata.cancel_time] + // is set, the updates are reverted, and the operation terminates with a + // `CANCELLED` status. + // * New UpdateDatabase requests will return a `FAILED_PRECONDITION` error + // until the pending operation is done (returns successfully or with + // error). + // * Reading the database via the API continues to give the pre-request + // values. + // + // Upon completion of the returned operation: + // + // * The new values are in effect and readable via the API. + // * The database's + // [reconciling][google.spanner.admin.database.v1.Database.reconciling] + // field becomes false. + // + // The returned [long-running operation][google.longrunning.Operation] will + // have a name of the format + // `projects//instances//databases//operations/` + // and can be used to track the database modification. The + // [metadata][google.longrunning.Operation.metadata] field type is + // [UpdateDatabaseMetadata][google.spanner.admin.database.v1.UpdateDatabaseMetadata]. + // The [response][google.longrunning.Operation.response] field type is + // [Database][google.spanner.admin.database.v1.Database], if successful. + rpc UpdateDatabase(UpdateDatabaseRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{database.name=projects/*/instances/*/databases/*}" + body: "database" + }; + option (google.api.method_signature) = "database,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "Database" + metadata_type: "UpdateDatabaseMetadata" + }; + } + // Updates the schema of a Cloud Spanner database by // creating/altering/dropping tables, columns, indexes, etc. The returned // [long-running operation][google.longrunning.Operation] will have a name of @@ -449,6 +499,14 @@ message Database { // Output only. The dialect of the Cloud Spanner Database. DatabaseDialect database_dialect = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Whether drop protection is enabled for this database. Defaults to false, + // if not set. + bool enable_drop_protection = 11; + + // Output only. If true, the database is being updated. If false, there are no + // ongoing update operations for the database. + bool reconciling = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; } // The request for [ListDatabases][google.spanner.admin.database.v1.DatabaseAdmin.ListDatabases]. @@ -537,6 +595,37 @@ message GetDatabaseRequest { ]; } +// The request for +// [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]. +message UpdateDatabaseRequest { + // Required. The database to update. + // The `name` field of the database is of the form + // `projects//instances//databases/`. + Database database = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The list of fields to update. Currently, only + // `enable_drop_protection` field can be updated. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata type for the operation returned by +// [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]. +message UpdateDatabaseMetadata { + // The request for + // [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase]. + UpdateDatabaseRequest request = 1; + + // The progress of the + // [UpdateDatabase][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase] + // operation. + OperationProgress progress = 2; + + // The time at which this operation was cancelled. If set, this operation is + // in the process of undoing itself (which is best-effort). + google.protobuf.Timestamp cancel_time = 3; +} + // Enqueues the given DDL statements to be applied, in order but not // necessarily all at once, to the database schema at some point (or // points) in the future. The server checks that the statements From 2ea06e70a6f22635bcad7b7e4c79d0cf710dc6dc Mon Sep 17 00:00:00 2001 From: aayushimalik Date: Mon, 15 May 2023 15:42:03 +0000 Subject: [PATCH 19/20] feat: add support for UpdateDatabase in Cloud Spanner (#2265) * feature: Cloud Spanner Drop Database Protection Co-authored-by: Owl Bot Co-authored-by: Rajat Bhatta <93644539+rajatbhatta@users.noreply.github.com> --- .../com/google/cloud/spanner/Database.java | 61 +++++++-- .../cloud/spanner/DatabaseAdminClient.java | 42 +++++++ .../spanner/DatabaseAdminClientImpl.java | 22 ++++ .../google/cloud/spanner/DatabaseInfo.java | 117 ++++++++++++++++-- .../encryption/CustomerManagedEncryption.java | 4 + .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 13 ++ .../cloud/spanner/spi/v1/SpannerRpc.java | 14 +++ .../spanner/DatabaseAdminClientImplTest.java | 22 ++++ .../google/cloud/spanner/DatabaseTest.java | 22 ++++ .../cloud/spanner/it/ITDatabaseAdminTest.java | 76 ++++++++++++ 10 files changed, 374 insertions(+), 19 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Database.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Database.java index 94c30c9c702..92c4d55d4d9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Database.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Database.java @@ -194,17 +194,56 @@ private String database() { static Database fromProto( com.google.spanner.admin.database.v1.Database proto, DatabaseAdminClient client) { checkArgument(!proto.getName().isEmpty(), "Missing expected 'name' field"); - return new Database.Builder(client, DatabaseId.of(proto.getName())) - .setState(fromProtoState(proto.getState())) - .setCreateTime(Timestamp.fromProto(proto.getCreateTime())) - .setRestoreInfo(RestoreInfo.fromProtoOrNullIfDefaultInstance(proto.getRestoreInfo())) - .setVersionRetentionPeriod(proto.getVersionRetentionPeriod()) - .setEarliestVersionTime(Timestamp.fromProto(proto.getEarliestVersionTime())) - .setEncryptionConfig(CustomerManagedEncryption.fromProtoOrNull(proto.getEncryptionConfig())) - .setDefaultLeader(proto.getDefaultLeader()) - .setDialect(Dialect.fromProto(proto.getDatabaseDialect())) - .setProto(proto) - .build(); + DatabaseInfo.Builder builder = + new Builder(client, DatabaseId.of(proto.getName())) + .setState(fromProtoState(proto.getState())) + .setCreateTime(Timestamp.fromProto(proto.getCreateTime())) + .setRestoreInfo(RestoreInfo.fromProtoOrNullIfDefaultInstance(proto.getRestoreInfo())) + .setVersionRetentionPeriod(proto.getVersionRetentionPeriod()) + .setEarliestVersionTime(Timestamp.fromProto(proto.getEarliestVersionTime())) + .setEncryptionConfig( + CustomerManagedEncryption.fromProtoOrNull(proto.getEncryptionConfig())) + .setDefaultLeader(proto.getDefaultLeader()) + .setDialect(Dialect.fromProto(proto.getDatabaseDialect())) + .setReconciling(proto.getReconciling()) + .setProto(proto); + if (proto.getEnableDropProtection()) { + builder.enableDropProtection(); + } else { + builder.disableDropProtection(); + } + return builder.build(); + } + + public com.google.spanner.admin.database.v1.Database toProto() { + com.google.spanner.admin.database.v1.Database.Builder builder = + com.google.spanner.admin.database.v1.Database.newBuilder() + .setName(getId().getName()) + .setState(getState().toProto()) + .setEnableDropProtection(isDropProtectionEnabled()) + .setReconciling(getReconciling()); + if (getCreateTime() != null) { + builder.setCreateTime(getCreateTime().toProto()); + } + if (getRestoreInfo() != null) { + builder.setRestoreInfo(getRestoreInfo().getProto()); + } + if (getVersionRetentionPeriod() != null) { + builder.setVersionRetentionPeriod(getVersionRetentionPeriod()); + } + if (getEarliestVersionTime() != null) { + builder.setEarliestVersionTime(getEarliestVersionTime().toProto()); + } + if (getEncryptionConfig() != null) { + builder.setEncryptionConfig(getEncryptionConfig().toProto()); + } + if (getDefaultLeader() != null) { + builder.setDefaultLeader(getDefaultLeader()); + } + if (getDialect() != null) { + builder.setDatabaseDialect(getDialect().toProto()); + } + return builder.build(); } static DatabaseInfo.State fromProtoState( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClient.java index 1363118e3aa..9168c2a11dd 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClient.java @@ -28,6 +28,7 @@ import com.google.spanner.admin.database.v1.CreateDatabaseRequest; import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; import java.util.List; import javax.annotation.Nullable; @@ -358,6 +359,47 @@ OperationFuture restoreDatabase(Restore resto */ Database getDatabase(String instanceId, String databaseId) throws SpannerException; + /** + * Updates a Cloud Spanner database. The returned {@code Operation} can be used to track the + * progress of the update. Throws SpannerException if the Cloud Spanner database does not exist. + * + *

Until completion of the returned operation: + * + *

    + *
  • Cancelling the operation is best effort and may or may not succeed. + *
  • All other attempts to modify the database are rejected. + *
  • Reading the database via the API continues to give the pre-request field values. + *
+ * + * Upon completion of the returned operation: + * + *
    + *
  • The database's new fields are readable via the API. + *
+ * + *

Example of updating a database. + * + *

{@code
+   * String projectId = my_project_id;
+   * String instanceId = my_instance_id;
+   * String databaseId = my_database_id;
+   * Database databaseToUpdate = databaseAdminClient.newDatabaseBuilder(
+   *         DatabaseId.of(projectId, instanceId, databaseId))
+   *      .enableDropProtection().build();
+   * OperationFuture op = databaseAdminClient.updateDatabase(
+   *           databaseToUpdate, DatabaseField.DROP_PROTECTION);
+   * Database updateDatabase = op.get(5, TimeUnit.MINUTES);
+   * }
+ * + * @param database The database to update to. The current field values of the database will be + * updated to the values specified in this parameter. + * @param fieldsToUpdate The fields that should be updated. Only these fields will have their + * values updated to the values specified in {@param database}, even if there are other fields + * specified in {@param database}. + */ + OperationFuture updateDatabase( + Database database, DatabaseInfo.DatabaseField... fieldsToUpdate) throws SpannerException; + /** * Gets the current state of a Cloud Spanner database backup. * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java index 73ece214c3a..8a5d0d613a5 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java @@ -23,6 +23,7 @@ import com.google.cloud.Policy; import com.google.cloud.Policy.DefaultMarshaller; import com.google.cloud.Timestamp; +import com.google.cloud.spanner.DatabaseInfo.DatabaseField; import com.google.cloud.spanner.Options.ListOption; import com.google.cloud.spanner.SpannerImpl.PageFetcher; import com.google.cloud.spanner.spi.v1.SpannerRpc; @@ -415,6 +416,27 @@ public Database getDatabase(String instanceId, String databaseId) throws Spanner return Database.fromProto(rpc.getDatabase(dbName), DatabaseAdminClientImpl.this); } + @Override + public OperationFuture updateDatabase( + Database database, DatabaseField... fieldsToUpdate) throws SpannerException { + FieldMask fieldMask = DatabaseInfo.DatabaseField.toFieldMask(fieldsToUpdate); + OperationFuture + rawOperationFuture = rpc.updateDatabase(database.toProto(), fieldMask); + return new OperationFutureImpl<>( + rawOperationFuture.getPollingFuture(), + rawOperationFuture.getInitialFuture(), + snapshot -> + Database.fromProto( + ProtoOperationTransformers.ResponseTransformer.create( + com.google.spanner.admin.database.v1.Database.class) + .apply(snapshot), + DatabaseAdminClientImpl.this), + ProtoOperationTransformers.MetadataTransformer.create(UpdateDatabaseMetadata.class), + e -> { + throw SpannerExceptionFactory.newSpannerException(e); + }); + } + @Override public OperationFuture updateDatabaseDdl( final String instanceId, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseInfo.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseInfo.java index 565517e3419..d231ef34e37 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseInfo.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseInfo.java @@ -16,15 +16,42 @@ package com.google.cloud.spanner; +import com.google.cloud.FieldSelector; import com.google.cloud.Timestamp; import com.google.cloud.spanner.encryption.CustomerManagedEncryption; import com.google.common.base.Preconditions; +import com.google.protobuf.FieldMask; +import com.google.spanner.admin.database.v1.Database.State; import java.util.Objects; import javax.annotation.Nullable; /** Represents a Cloud Spanner database. */ public class DatabaseInfo { + /** Represent an updatable field in a Cloud Spanner database. */ + public enum DatabaseField implements FieldSelector { + DROP_PROTECTION("enable_drop_protection"); + + private final String selector; + + DatabaseField(String selector) { + this.selector = selector; + } + + @Override + public String getSelector() { + return selector; + } + + static FieldMask toFieldMask(DatabaseInfo.DatabaseField... fields) { + FieldMask.Builder builder = FieldMask.newBuilder(); + for (DatabaseInfo.DatabaseField field : fields) { + builder.addPaths(field.getSelector()); + } + return builder.build(); + } + } + public abstract static class Builder { abstract Builder setState(State state); @@ -58,6 +85,18 @@ public Builder setDialect(Dialect dialect) { throw new UnsupportedOperationException("Unimplemented"); } + public Builder enableDropProtection() { + throw new UnsupportedOperationException("Unimplemented"); + } + + public Builder disableDropProtection() { + throw new UnsupportedOperationException("Unimplemented"); + } + + protected Builder setReconciling(boolean reconciling) { + throw new UnsupportedOperationException("Unimplemented"); + } + abstract Builder setProto(com.google.spanner.admin.database.v1.Database proto); /** Builds the database from this builder. */ @@ -74,6 +113,8 @@ abstract static class BuilderImpl extends Builder { private CustomerManagedEncryption encryptionConfig; private String defaultLeader; private Dialect dialect = Dialect.GOOGLE_STANDARD_SQL; + private boolean dropProtectionEnabled; + private boolean reconciling; private com.google.spanner.admin.database.v1.Database proto; BuilderImpl(DatabaseId id) { @@ -141,6 +182,24 @@ public Builder setDialect(Dialect dialect) { return this; } + @Override + public Builder enableDropProtection() { + this.dropProtectionEnabled = true; + return this; + } + + @Override + public Builder disableDropProtection() { + this.dropProtectionEnabled = false; + return this; + } + + @Override + protected Builder setReconciling(boolean reconciling) { + this.reconciling = reconciling; + return this; + } + @Override Builder setProto(@Nullable com.google.spanner.admin.database.v1.Database proto) { this.proto = proto; @@ -151,13 +210,35 @@ Builder setProto(@Nullable com.google.spanner.admin.database.v1.Database proto) /** State of the database. */ public enum State { // Not specified. - UNSPECIFIED, + UNSPECIFIED { + @Override + public com.google.spanner.admin.database.v1.Database.State toProto() { + return com.google.spanner.admin.database.v1.Database.State.STATE_UNSPECIFIED; + } + }, // The database is still being created and is not ready to use. - CREATING, + CREATING { + @Override + public com.google.spanner.admin.database.v1.Database.State toProto() { + return com.google.spanner.admin.database.v1.Database.State.CREATING; + } + }, // The database is fully created and ready to use. - READY, + READY { + @Override + public com.google.spanner.admin.database.v1.Database.State toProto() { + return com.google.spanner.admin.database.v1.Database.State.READY; + } + }, // The database has restored and is being optimized for use. - READY_OPTIMIZING + READY_OPTIMIZING { + @Override + public com.google.spanner.admin.database.v1.Database.State toProto() { + return com.google.spanner.admin.database.v1.Database.State.READY_OPTIMIZING; + } + }; + + public abstract com.google.spanner.admin.database.v1.Database.State toProto(); } private final DatabaseId id; @@ -169,6 +250,8 @@ public enum State { private final CustomerManagedEncryption encryptionConfig; private final String defaultLeader; private final Dialect dialect; + private final boolean dropProtectionEnabled; + private final boolean reconciling; private final com.google.spanner.admin.database.v1.Database proto; public DatabaseInfo(DatabaseId id, State state) { @@ -181,6 +264,8 @@ public DatabaseInfo(DatabaseId id, State state) { this.encryptionConfig = null; this.defaultLeader = null; this.dialect = null; + this.dropProtectionEnabled = false; + this.reconciling = false; this.proto = null; } @@ -194,6 +279,8 @@ public DatabaseInfo(DatabaseId id, State state) { this.encryptionConfig = builder.encryptionConfig; this.defaultLeader = builder.defaultLeader; this.dialect = builder.dialect; + this.dropProtectionEnabled = builder.dropProtectionEnabled; + this.reconciling = builder.reconciling; this.proto = builder.proto; } @@ -262,6 +349,14 @@ public Timestamp getEarliestVersionTime() { return dialect; } + public boolean isDropProtectionEnabled() { + return dropProtectionEnabled; + } + + public boolean getReconciling() { + return reconciling; + } + /** Returns the raw proto instance that was used to construct this {@link Database}. */ public @Nullable com.google.spanner.admin.database.v1.Database getProto() { return proto; @@ -284,7 +379,9 @@ public boolean equals(Object o) { && Objects.equals(earliestVersionTime, that.earliestVersionTime) && Objects.equals(encryptionConfig, that.encryptionConfig) && Objects.equals(defaultLeader, that.defaultLeader) - && Objects.equals(dialect, that.dialect); + && Objects.equals(dialect, that.dialect) + && Objects.equals(dropProtectionEnabled, that.dropProtectionEnabled) + && Objects.equals(reconciling, that.reconciling); } @Override @@ -298,13 +395,15 @@ public int hashCode() { earliestVersionTime, encryptionConfig, defaultLeader, - dialect); + dialect, + dropProtectionEnabled, + reconciling); } @Override public String toString() { return String.format( - "Database[%s, %s, %s, %s, %s, %s, %s, %s, %s]", + "Database[%s, %s, %s, %s, %s, %s, %s, %s, %s %s %s]", id.getName(), state, createTime, @@ -313,6 +412,8 @@ public String toString() { earliestVersionTime, encryptionConfig, defaultLeader, - dialect); + dialect, + dropProtectionEnabled, + reconciling); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/encryption/CustomerManagedEncryption.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/encryption/CustomerManagedEncryption.java index fdc48cf3d2c..b24c4767294 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/encryption/CustomerManagedEncryption.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/encryption/CustomerManagedEncryption.java @@ -42,6 +42,10 @@ public static CustomerManagedEncryption fromProtoOrNull(EncryptionConfig proto) : new CustomerManagedEncryption(proto.getKmsKeyName()); } + public EncryptionConfig toProto() { + return EncryptionConfig.newBuilder().setKmsKeyName(this.getKmsKeyName()).build(); + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 4d70a26866c..53954097822 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -132,6 +132,8 @@ import com.google.spanner.admin.database.v1.UpdateBackupRequest; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; @@ -1252,6 +1254,17 @@ public Database getDatabase(String databaseName) throws SpannerException { () -> get(databaseAdminStub.getDatabaseCallable().futureCall(request, context))); } + @Override + public OperationFuture updateDatabase( + Database database, FieldMask updateMask) throws SpannerException { + UpdateDatabaseRequest request = + UpdateDatabaseRequest.newBuilder().setDatabase(database).setUpdateMask(updateMask).build(); + GrpcCallContext context = + newCallContext( + null, database.getName(), request, DatabaseAdminGrpc.getUpdateDatabaseMethod()); + return databaseAdminStub.updateDatabaseOperationCallable().futureCall(request, context); + } + @Override public List getDatabaseDdl(String databaseName) throws SpannerException { acquireAdministrativeRequestsRateLimiter(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java index 552c53e85ee..27adf89a235 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java @@ -42,6 +42,7 @@ import com.google.spanner.admin.database.v1.DatabaseRole; import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; import com.google.spanner.admin.instance.v1.Instance; @@ -232,6 +233,19 @@ OperationFuture updateDatabaseDdl( Database getDatabase(String databaseName) throws SpannerException; + /** + * Updates the specified fields of a Cloud Spanner database. + * + * @param database The database proto whose field values will be used as the new values in the + * stored database. + * @param fieldMask The fields to update. Currently, only the "enable_drop_protection" field of + * the database supports updates. + * @return an `OperationFuture` that can be used to track the status of the update. + * @throws SpannerException + */ + OperationFuture updateDatabase( + Database database, FieldMask fieldMask) throws SpannerException; + List getDatabaseDdl(String databaseName) throws SpannerException; /** Lists the backups in the specified instance. */ Paginated listBackups( diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java index 0255f6c1668..dbb08f51a4c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java @@ -18,7 +18,9 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.spanner.admin.database.v1.DatabaseDialect.GOOGLE_STANDARD_SQL; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @@ -27,6 +29,7 @@ import com.google.cloud.Identity; import com.google.cloud.Role; import com.google.cloud.Timestamp; +import com.google.cloud.spanner.DatabaseInfo.DatabaseField; import com.google.cloud.spanner.DatabaseInfo.State; import com.google.cloud.spanner.encryption.EncryptionConfigs; import com.google.cloud.spanner.spi.v1.SpannerRpc; @@ -53,6 +56,7 @@ import com.google.spanner.admin.database.v1.EncryptionInfo; import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -246,6 +250,24 @@ public void updateDatabaseDdlOpAlreadyExists() throws Exception { assertThat(op.getName()).isEqualTo(originalOpName); } + @Test + public void updateDatabase() throws Exception { + com.google.cloud.spanner.Database database = + client.newDatabaseBuilder(DatabaseId.of(DB_NAME)).enableDropProtection().build(); + Database databaseProto = database.toProto(); + OperationFuture rawOperationFuture = + OperationFutureUtil.immediateOperationFuture( + "updateDatabase", databaseProto, UpdateDatabaseMetadata.getDefaultInstance()); + when(rpc.updateDatabase( + databaseProto, DatabaseField.toFieldMask(DatabaseField.DROP_PROTECTION))) + .thenReturn(rawOperationFuture); + OperationFuture op = + client.updateDatabase(database, DatabaseField.DROP_PROTECTION); + assertTrue(op.isDone()); + assertEquals(op.get().getId().getName(), DB_NAME); + assertTrue(op.get().isDropProtectionEnabled()); + } + @Test public void dropDatabase() { client.dropDatabase(INSTANCE_ID, DB_ID); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java index 1eb2794c8ee..78c04ae61bc 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseTest.java @@ -67,6 +67,10 @@ public class DatabaseTest { private static final String DEFAULT_LEADER = "default-leader"; private static final DatabaseDialect DEFAULT_DIALECT = DatabaseDialect.GOOGLE_STANDARD_SQL; + private static final boolean DROP_PROTECTION_ENABLED = true; + + private static final boolean RECONCILING = true; + @Mock DatabaseAdminClient dbClient; @Before @@ -113,6 +117,22 @@ public void testFromProto() { EncryptionConfigs.customerManagedEncryption(KMS_KEY_NAME), database.getEncryptionConfig()); assertEquals(DEFAULT_LEADER, database.getDefaultLeader()); assertEquals(Dialect.GOOGLE_STANDARD_SQL, database.getDialect()); + assertEquals(DROP_PROTECTION_ENABLED, database.isDropProtectionEnabled()); + assertEquals(RECONCILING, database.getReconciling()); + } + + @Test + public void testToProto() { + final com.google.spanner.admin.database.v1.Database database = createDatabase().toProto(); + assertEquals(NAME, database.getName()); + assertEquals(com.google.spanner.admin.database.v1.Database.State.CREATING, database.getState()); + assertEquals(VERSION_RETENTION_PERIOD, database.getVersionRetentionPeriod()); + assertEquals(EARLIEST_VERSION_TIME.toProto(), database.getEarliestVersionTime()); + assertEquals(ENCRYPTION_CONFIG, database.getEncryptionConfig()); + assertEquals(DEFAULT_LEADER, database.getDefaultLeader()); + assertEquals(DEFAULT_DIALECT, database.getDatabaseDialect()); + assertEquals(DROP_PROTECTION_ENABLED, database.getEnableDropProtection()); + assertEquals(RECONCILING, database.getReconciling()); } @Test @@ -231,6 +251,8 @@ private com.google.spanner.admin.database.v1.Database defaultProtoDatabase() { .addAllEncryptionInfo(ENCRYPTION_INFOS) .setDefaultLeader(DEFAULT_LEADER) .setDatabaseDialect(DEFAULT_DIALECT) + .setEnableDropProtection(DROP_PROTECTION_ENABLED) + .setReconciling(RECONCILING) .build(); } } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java index e19272a0768..6bb02a7a61f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITDatabaseAdminTest.java @@ -19,6 +19,8 @@ import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeFalse; @@ -27,6 +29,7 @@ import com.google.api.gax.paging.Page; import com.google.cloud.spanner.Database; import com.google.cloud.spanner.DatabaseAdminClient; +import com.google.cloud.spanner.DatabaseInfo.DatabaseField; import com.google.cloud.spanner.DatabaseRole; import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.ErrorCode; @@ -39,10 +42,14 @@ import com.google.common.collect.Iterables; import com.google.spanner.admin.database.v1.CreateDatabaseMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -57,6 +64,8 @@ public class ITDatabaseAdminTest { private static final long TIMEOUT_MINUTES = 5; @ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(); + + private static final Logger logger = Logger.getLogger(ITDatabaseAdminTest.class.getName()); private DatabaseAdminClient dbAdminClient; private RemoteSpannerHelper testHelper; private List dbs = new ArrayList<>(); @@ -269,4 +278,71 @@ public void createAndListDatabaseRoles() throws Exception { } assertThat(dbRolesRemaining).containsNoneIn(dbRoles); } + + @Test + public void updateDatabaseInvalidFieldsToUpdate() throws Exception { + assumeFalse("Emulator does not drop database protection", isUsingEmulator()); + String instanceId = testHelper.getInstanceId().getInstance(); + Database database = + dbAdminClient + .createDatabase(instanceId, testHelper.getUniqueDatabaseId(), ImmutableList.of()) + .get(); + logger.log(Level.INFO, "Created database: {0}", database.getId().getName()); + + Database databaseToUpdate = + dbAdminClient.newDatabaseBuilder(database.getId()).enableDropProtection().build(); + // Don't provide any fields to update. + OperationFuture op = + dbAdminClient.updateDatabase(databaseToUpdate); + + ExecutionException e = + assertThrows(ExecutionException.class, () -> op.get(5, TimeUnit.MINUTES)); + assertThat(e.getMessage()).contains("Invalid field mask"); + } + + @Test + public void dropDatabaseWithProtectionEnabled() throws Exception { + assumeFalse("Emulator does not drop database protection", isUsingEmulator()); + String instanceId = testHelper.getInstanceId().getInstance(); + Database database = + dbAdminClient + .createDatabase(instanceId, testHelper.getUniqueDatabaseId(), ImmutableList.of()) + .get(); + logger.log(Level.INFO, "Created database: {0}", database.getId().getName()); + + // Enable drop protection for the database. + Database databaseToUpdate = + dbAdminClient.newDatabaseBuilder(database.getId()).enableDropProtection().build(); + OperationFuture op = + dbAdminClient.updateDatabase(databaseToUpdate, DatabaseField.DROP_PROTECTION); + Database updatedDatabase = op.get(5, TimeUnit.MINUTES); + assertEquals(updatedDatabase.getId().getName(), database.getId().getName()); + assertTrue(updatedDatabase.isDropProtectionEnabled()); + + String databaseId = database.getId().getDatabase(); + + // Assert that dropping a database with protection enabled fails due to precondition violation. + SpannerException e = + assertThrows( + SpannerException.class, () -> dbAdminClient.dropDatabase(instanceId, databaseId)); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + + // Assert that deleting the instance also fails due to precondition violation. + e = + assertThrows( + SpannerException.class, + () -> testHelper.getClient().getInstanceAdminClient().deleteInstance(instanceId)); + assertEquals(ErrorCode.FAILED_PRECONDITION, e.getErrorCode()); + + // Disable drop protection for the database. + databaseToUpdate = + dbAdminClient.newDatabaseBuilder(database.getId()).disableDropProtection().build(); + op = dbAdminClient.updateDatabase(databaseToUpdate, DatabaseField.DROP_PROTECTION); + updatedDatabase = op.get(5, TimeUnit.MINUTES); + assertEquals(updatedDatabase.getId().getName(), database.getId().getName()); + assertFalse(updatedDatabase.isDropProtectionEnabled()); + + // Dropping the database should succeed now. + dbAdminClient.dropDatabase(instanceId, databaseId); + } } From 1a37973e829e0e1e71bc2ba75cc831249cfc8e0a Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 22:14:38 +0530 Subject: [PATCH 20/20] chore(main): release 6.42.0 (#2415) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- CHANGELOG.md | 24 +++++++++++++++++++ google-cloud-spanner-bom/pom.xml | 20 ++++++++-------- google-cloud-spanner-executor/pom.xml | 4 ++-- google-cloud-spanner/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- grpc-google-cloud-spanner-v1/pom.xml | 4 ++-- pom.xml | 16 ++++++------- .../pom.xml | 4 ++-- .../pom.xml | 4 ++-- proto-google-cloud-spanner-v1/pom.xml | 4 ++-- samples/snapshot/pom.xml | 2 +- versions.txt | 16 ++++++------- 13 files changed, 67 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49cc40d9ef3..25dfe33d618 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [6.42.0](https://github.com/googleapis/java-spanner/compare/v6.41.0...v6.42.0) (2023-05-15) + + +### Features + +* Add support for UpdateDatabase in Cloud Spanner ([#2265](https://github.com/googleapis/java-spanner/issues/2265)) ([2ea06e7](https://github.com/googleapis/java-spanner/commit/2ea06e70a6f22635bcad7b7e4c79d0cf710dc6dc)) +* Add support for UpdateDatabase in Cloud Spanner ([#2429](https://github.com/googleapis/java-spanner/issues/2429)) ([09f20bd](https://github.com/googleapis/java-spanner/commit/09f20bd43913a7a01985fd290964d134612c14eb)) + + +### Bug Fixes + +* Add error details for INTERNAL error ([#2413](https://github.com/googleapis/java-spanner/issues/2413)) ([ed62aa6](https://github.com/googleapis/java-spanner/commit/ed62aa666ae34cf5e552e19b6b5dc2a8c6609e4e)) +* Use javax.annotation.Nonnull in executor framework ([#2414](https://github.com/googleapis/java-spanner/issues/2414)) ([afcc598](https://github.com/googleapis/java-spanner/commit/afcc598e05c75610db8d0adacd4da79b4c124122)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-monitoring to v3.18.0 ([#2426](https://github.com/googleapis/java-spanner/issues/2426)) ([05a45f8](https://github.com/googleapis/java-spanner/commit/05a45f81c2c71dd236fa36cc987e78a6aa31b594)) +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.9.0 ([#2427](https://github.com/googleapis/java-spanner/issues/2427)) ([42dbfe3](https://github.com/googleapis/java-spanner/commit/42dbfe3600b1d482d64c6c4f6865f88db399bae3)) +* Update dependency com.google.cloud:google-cloud-trace to v2.17.0 ([#2428](https://github.com/googleapis/java-spanner/issues/2428)) ([6f7fee8](https://github.com/googleapis/java-spanner/commit/6f7fee81233811f5bc002f212c8972ffc6afbe16)) +* Update dependency org.graalvm.buildtools:junit-platform-native to v0.9.22 ([#2423](https://github.com/googleapis/java-spanner/issues/2423)) ([679bb36](https://github.com/googleapis/java-spanner/commit/679bb366162575c28bab1df9b87d01517ea8d5aa)) +* Update dependency org.graalvm.buildtools:native-maven-plugin to v0.9.22 ([#2424](https://github.com/googleapis/java-spanner/issues/2424)) ([a72f4ff](https://github.com/googleapis/java-spanner/commit/a72f4ff64cce2e9c746e8f6a9e107cbd72afa67f)) +* Update dependency org.graalvm.sdk:graal-sdk to v22.3.2 ([#2391](https://github.com/googleapis/java-spanner/issues/2391)) ([c082a1f](https://github.com/googleapis/java-spanner/commit/c082a1fccb79cf4c001519eba4a75cef30150541)) + ## [6.41.0](https://github.com/googleapis/java-spanner/compare/v6.40.1...v6.41.0) (2023-04-28) diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml index 7e2fa74de1f..7b273012032 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.41.1-SNAPSHOT + 6.42.0 pom com.google.cloud @@ -53,48 +53,48 @@ com.google.cloud google-cloud-spanner - 6.41.1-SNAPSHOT + 6.42.0 com.google.cloud google-cloud-spanner-executor - 6.41.1-SNAPSHOT + 6.42.0 com.google.cloud google-cloud-spanner test-jar - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.41.1-SNAPSHOT + 6.42.0
diff --git a/google-cloud-spanner-executor/pom.xml b/google-cloud-spanner-executor/pom.xml index b6c7c52b660..588c12ea578 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.41.1-SNAPSHOT + 6.42.0 jar Google Cloud Spanner Executor com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 3c40208b76d..36dbded84b7 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.41.1-SNAPSHOT + 6.42.0 jar Google Cloud Spanner https://github.com/googleapis/java-spanner @@ -11,7 +11,7 @@ com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 google-cloud-spanner diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml index 0b3b05d95c2..4772f4f9f4e 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.41.1-SNAPSHOT + 6.42.0 grpc-google-cloud-spanner-admin-database-v1 GRPC library for grpc-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml index f79f84893b8..ca20528d958 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.41.1-SNAPSHOT + 6.42.0 grpc-google-cloud-spanner-admin-instance-v1 GRPC library for grpc-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml index 06fb15ddc28..8d006a30709 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.41.1-SNAPSHOT + 6.42.0 grpc-google-cloud-spanner-v1 GRPC library for grpc-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/pom.xml b/pom.xml index 1c70422d9f0..579666d2c78 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-spanner-parent pom - 6.41.1-SNAPSHOT + 6.42.0 Google Cloud Spanner Parent https://github.com/googleapis/java-spanner @@ -62,37 +62,37 @@ com.google.api.grpc proto-google-cloud-spanner-admin-instance-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc proto-google-cloud-spanner-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc proto-google-cloud-spanner-admin-database-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-admin-instance-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.api.grpc grpc-google-cloud-spanner-admin-database-v1 - 6.41.1-SNAPSHOT + 6.42.0 com.google.cloud google-cloud-spanner - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml index f67534bcd27..d69a7fe7490 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.41.1-SNAPSHOT + 6.42.0 proto-google-cloud-spanner-admin-database-v1 PROTO library for proto-google-cloud-spanner-admin-database-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml index 4536461df13..57f6af991bb 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.41.1-SNAPSHOT + 6.42.0 proto-google-cloud-spanner-admin-instance-v1 PROTO library for proto-google-cloud-spanner-admin-instance-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml index be03d676f88..10bc7a53201 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.41.1-SNAPSHOT + 6.42.0 proto-google-cloud-spanner-v1 PROTO library for proto-google-cloud-spanner-v1 com.google.cloud google-cloud-spanner-parent - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 71b5fe1e882..0d451de2284 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -31,7 +31,7 @@ com.google.cloud google-cloud-spanner - 6.41.1-SNAPSHOT + 6.42.0 diff --git a/versions.txt b/versions.txt index 02fe515373e..b8b3d8efccc 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.41.0:6.41.1-SNAPSHOT -proto-google-cloud-spanner-v1:6.41.0:6.41.1-SNAPSHOT -proto-google-cloud-spanner-admin-database-v1:6.41.0:6.41.1-SNAPSHOT -grpc-google-cloud-spanner-v1:6.41.0:6.41.1-SNAPSHOT -grpc-google-cloud-spanner-admin-instance-v1:6.41.0:6.41.1-SNAPSHOT -grpc-google-cloud-spanner-admin-database-v1:6.41.0:6.41.1-SNAPSHOT -google-cloud-spanner:6.41.0:6.41.1-SNAPSHOT -google-cloud-spanner-executor:6.41.0:6.41.1-SNAPSHOT +proto-google-cloud-spanner-admin-instance-v1:6.42.0:6.42.0 +proto-google-cloud-spanner-v1:6.42.0:6.42.0 +proto-google-cloud-spanner-admin-database-v1:6.42.0:6.42.0 +grpc-google-cloud-spanner-v1:6.42.0:6.42.0 +grpc-google-cloud-spanner-admin-instance-v1:6.42.0:6.42.0 +grpc-google-cloud-spanner-admin-database-v1:6.42.0:6.42.0 +google-cloud-spanner:6.42.0:6.42.0 +google-cloud-spanner-executor:6.42.0:6.42.0