From 4943485fd518c080456086ddae338d37fe997251 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:41:06 -0500 Subject: [PATCH 01/12] chore(main): release 2.29.2-SNAPSHOT (#1996) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- google-cloud-bigtable-bom/pom.xml | 18 +++++++++--------- google-cloud-bigtable-deps-bom/pom.xml | 2 +- google-cloud-bigtable-emulator-core/pom.xml | 4 ++-- google-cloud-bigtable-emulator/pom.xml | 10 +++++----- google-cloud-bigtable-stats/pom.xml | 6 +++--- google-cloud-bigtable/pom.xml | 10 +++++----- .../com/google/cloud/bigtable/Version.java | 2 +- grpc-google-cloud-bigtable-admin-v2/pom.xml | 8 ++++---- grpc-google-cloud-bigtable-v2/pom.xml | 8 ++++---- pom.xml | 12 ++++++------ proto-google-cloud-bigtable-admin-v2/pom.xml | 8 ++++---- proto-google-cloud-bigtable-v2/pom.xml | 8 ++++---- samples/snapshot/pom.xml | 2 +- test-proxy/pom.xml | 4 ++-- versions.txt | 14 +++++++------- 15 files changed, 58 insertions(+), 58 deletions(-) diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index c8684b1d3a2c..f73831bc9449 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom com.google.cloud @@ -63,42 +63,42 @@ com.google.cloud google-cloud-bigtable - 2.29.1 + 2.29.2-SNAPSHOT com.google.cloud google-cloud-bigtable-emulator - 0.166.1 + 0.166.2-SNAPSHOT com.google.cloud google-cloud-bigtable-emulator-core - 0.166.1 + 0.166.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.cloud google-cloud-bigtable-stats - 2.29.1 + 2.29.2-SNAPSHOT diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index baa7485fe4a4..da114521d433 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -13,7 +13,7 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom diff --git a/google-cloud-bigtable-emulator-core/pom.xml b/google-cloud-bigtable-emulator-core/pom.xml index 7cebe63c5437..142a1e8d5f1d 100644 --- a/google-cloud-bigtable-emulator-core/pom.xml +++ b/google-cloud-bigtable-emulator-core/pom.xml @@ -7,11 +7,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.29.1 + 2.29.2-SNAPSHOT google-cloud-bigtable-emulator-core - 0.166.1 + 0.166.2-SNAPSHOT A Java wrapper for the Cloud Bigtable emulator. diff --git a/google-cloud-bigtable-emulator/pom.xml b/google-cloud-bigtable-emulator/pom.xml index 7ea51c92b886..14f9ba204e8b 100644 --- a/google-cloud-bigtable-emulator/pom.xml +++ b/google-cloud-bigtable-emulator/pom.xml @@ -5,7 +5,7 @@ 4.0.0 google-cloud-bigtable-emulator - 0.166.1 + 0.166.2-SNAPSHOT Google Cloud Java - Bigtable Emulator https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT scm:git:git@github.com:googleapis/java-bigtable.git @@ -81,14 +81,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import @@ -99,7 +99,7 @@ com.google.cloud google-cloud-bigtable-emulator-core - 0.166.1 + 0.166.2-SNAPSHOT diff --git a/google-cloud-bigtable-stats/pom.xml b/google-cloud-bigtable-stats/pom.xml index 83c7ad36e56a..9d26c5e49639 100644 --- a/google-cloud-bigtable-stats/pom.xml +++ b/google-cloud-bigtable-stats/pom.xml @@ -5,7 +5,7 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT 4.0.0 @@ -13,7 +13,7 @@ through Stackdriver. Built-in metrics will be implemented with shaded OpenCensus so it won't interfere with customer's application metrics. --> google-cloud-bigtable-stats - 2.29.1 + 2.29.2-SNAPSHOT Experimental project to shade OpenCensus dependencies. @@ -21,7 +21,7 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 8fa180fb5799..7fd27114b2b4 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-bigtable - 2.29.1 + 2.29.2-SNAPSHOT jar Google Cloud Bigtable https://github.com/googleapis/java-bigtable @@ -12,11 +12,11 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT - 2.29.1 + 2.29.2-SNAPSHOT google-cloud-bigtable @@ -47,14 +47,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java index 79c93d0148a8..b4c4578ab293 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java @@ -20,6 +20,6 @@ @InternalApi("For internal use only") public final class Version { // {x-version-update-start:google-cloud-bigtable:current} - public static String VERSION = "2.29.1"; + public static String VERSION = "2.29.2-SNAPSHOT"; // {x-version-update-end} } diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index 2a5084eada4b..bab7a4f0faa8 100644 --- a/grpc-google-cloud-bigtable-admin-v2/pom.xml +++ b/grpc-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index e7590cc180ca..662111b76aca 100644 --- a/grpc-google-cloud-bigtable-v2/pom.xml +++ b/grpc-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/pom.xml b/pom.xml index 3011d9fca657..7544a12eb380 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 2.29.1 + 2.29.2-SNAPSHOT Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable @@ -153,27 +153,27 @@ com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT com.google.cloud google-cloud-bigtable - 2.29.1 + 2.29.2-SNAPSHOT diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index 672a0c4c04d9..f65375310262 100644 --- a/proto-google-cloud-bigtable-admin-v2/pom.xml +++ b/proto-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.1 + 2.29.2-SNAPSHOT proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index cdadfae0580e..d1e6028468a6 100644 --- a/proto-google-cloud-bigtable-v2/pom.xml +++ b/proto-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.1 + 2.29.2-SNAPSHOT proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.1 + 2.29.2-SNAPSHOT @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import com.google.cloud google-cloud-bigtable-bom - 2.29.1 + 2.29.2-SNAPSHOT pom import diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 8ac838d3fef3..06cf918e4313 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-bigtable - 2.29.1 + 2.29.2-SNAPSHOT diff --git a/test-proxy/pom.xml b/test-proxy/pom.xml index 1f941596cbf7..fcb0ee68e5c8 100644 --- a/test-proxy/pom.xml +++ b/test-proxy/pom.xml @@ -12,11 +12,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.29.1 + 2.29.2-SNAPSHOT - 2.29.1 + 2.29.2-SNAPSHOT diff --git a/versions.txt b/versions.txt index dff167209295..41a499a55dd0 100644 --- a/versions.txt +++ b/versions.txt @@ -1,10 +1,10 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:2.29.1:2.29.1 -grpc-google-cloud-bigtable-admin-v2:2.29.1:2.29.1 -grpc-google-cloud-bigtable-v2:2.29.1:2.29.1 -proto-google-cloud-bigtable-admin-v2:2.29.1:2.29.1 -proto-google-cloud-bigtable-v2:2.29.1:2.29.1 -google-cloud-bigtable-emulator:0.166.1:0.166.1 -google-cloud-bigtable-emulator-core:0.166.1:0.166.1 +google-cloud-bigtable:2.29.1:2.29.2-SNAPSHOT +grpc-google-cloud-bigtable-admin-v2:2.29.1:2.29.2-SNAPSHOT +grpc-google-cloud-bigtable-v2:2.29.1:2.29.2-SNAPSHOT +proto-google-cloud-bigtable-admin-v2:2.29.1:2.29.2-SNAPSHOT +proto-google-cloud-bigtable-v2:2.29.1:2.29.2-SNAPSHOT +google-cloud-bigtable-emulator:0.166.1:0.166.2-SNAPSHOT +google-cloud-bigtable-emulator-core:0.166.1:0.166.2-SNAPSHOT From 12591452238aef9b25ce2e53d4951f00c4c062b8 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 10 Nov 2023 17:42:26 +0100 Subject: [PATCH 02/12] build(deps): update dependency com.google.cloud:google-cloud-shared-config to v1.6.1 (#1984) --- google-cloud-bigtable-bom/pom.xml | 2 +- google-cloud-bigtable-deps-bom/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index f73831bc9449..bde24e45a134 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -8,7 +8,7 @@ com.google.cloud google-cloud-shared-config - 1.6.0 + 1.6.1 diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index da114521d433..c75a12d9b6f8 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -7,7 +7,7 @@ com.google.cloud google-cloud-shared-config - 1.6.0 + 1.6.1 diff --git a/pom.xml b/pom.xml index 7544a12eb380..ffb8d0203e5c 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ com.google.cloud google-cloud-shared-config - 1.6.0 + 1.6.1 From 21e99220a099bcb0abe12a9b5bd9d080dffdcb57 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 10 Nov 2023 17:42:43 +0100 Subject: [PATCH 03/12] test(deps): update dependency com.google.protobuf:protoc to v3.25.0 (#1986) --- google-cloud-bigtable/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 7fd27114b2b4..0598d180ad26 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -39,7 +39,7 @@ 1.59.0 - 3.24.4 + 3.25.0 From 7ad70e3abc1af7dfab715386978bf14f02b34e5d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 10 Nov 2023 17:43:02 +0100 Subject: [PATCH 04/12] deps: update dependency org.junit.vintage:junit-vintage-engine to v5.10.1 (#1990) --- samples/native-image-sample/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml index b6c62862874c..377134cef1e2 100644 --- a/samples/native-image-sample/pom.xml +++ b/samples/native-image-sample/pom.xml @@ -83,7 +83,7 @@ org.junit.vintage junit-vintage-engine - 5.10.0 + 5.10.1 test From 0827252a1f20f847330998a6224d49146a41931a Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 10 Nov 2023 17:43:22 +0100 Subject: [PATCH 05/12] chore(deps): update dependency com.google.cloud:google-cloud-bigtable to v2.29.1 (#1998) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update dependency com.google.cloud:google-cloud-bigtable to v2.29.1 * 🦉 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 984083333090..736624d00aa7 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-bigtable - 2.29.0 + 2.29.1 ``` @@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-bigtable' If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-bigtable:2.29.0' +implementation 'com.google.cloud:google-cloud-bigtable:2.29.1' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "2.29.0" +libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "2.29.1" ``` @@ -609,7 +609,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-bigtable/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-bigtable.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-bigtable/2.29.0 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-bigtable/2.29.1 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index b0fa13a80a45..b688c9276b5d 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-bigtable - 2.29.0 + 2.29.1 From 4c73abd2f4a07808b591dd9178e87715d2f3008d Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Mon, 27 Nov 2023 10:15:12 -0500 Subject: [PATCH 06/12] feat: client sends routing cookie back to server (#1888) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: client sends retry cookie back to server * udpate to use trailer instead of error info * updating the header name * address some comments * udpate * update tests and handling of retry cookie * address comments * address comments * add cookie to readChangeStream * also check headers and add a test * simplify code * clean up test * clean up test * update dependency * test * move MetadataSubject to a separate file * add the file * add license * address comments * close client * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot --- README.md | 2 +- .../bigtable/data/v2/stub/CookiesHolder.java | 70 +++ .../data/v2/stub/CookiesInterceptor.java | 96 +++ .../stub/CookiesServerStreamingCallable.java | 48 ++ .../data/v2/stub/CookiesUnaryCallable.java | 44 ++ .../data/v2/stub/EnhancedBigtableStub.java | 64 +- .../bigtable/data/v2/MetadataSubject.java | 60 ++ .../data/v2/stub/CookiesHolderTest.java | 561 ++++++++++++++++++ 8 files changed, 924 insertions(+), 21 deletions(-) create mode 100644 google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolder.java create mode 100644 google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesInterceptor.java create mode 100644 google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesServerStreamingCallable.java create mode 100644 google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesUnaryCallable.java create mode 100644 google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/MetadataSubject.java create mode 100644 google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolderTest.java diff --git a/README.md b/README.md index 736624d00aa7..5caf555e9485 100644 --- a/README.md +++ b/README.md @@ -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.26.0') +implementation platform('com.google.cloud:libraries-bom:26.27.0') implementation 'com.google.cloud:google-cloud-bigtable' ``` diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolder.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolder.java new file mode 100644 index 000000000000..7d7ca6a0291c --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolder.java @@ -0,0 +1,70 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2.stub; + +import io.grpc.CallOptions; +import io.grpc.Metadata; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; + +/** A cookie that holds information for retry or routing */ +class CookiesHolder { + + static final CallOptions.Key COOKIES_HOLDER_KEY = + CallOptions.Key.create("bigtable-cookies"); + + /** Routing cookie key prefix. */ + static final String COOKIE_KEY_PREFIX = "x-goog-cbt-cookie"; + + /** A map that stores all the routing cookies. */ + private final Map, String> cookies = new HashMap<>(); + + /** Returns CookiesHolder if presents in CallOptions, otherwise returns null. */ + @Nullable + static CookiesHolder fromCallOptions(CallOptions options) { + // CookiesHolder should be added by CookiesServerStreamingCallable and + // CookiesUnaryCallable for most methods. However, methods like PingAndWarm + // doesn't support routing cookie, in which case this will return null. + return options.getOption(COOKIES_HOLDER_KEY); + } + + /** Add all the routing cookies to headers if any. */ + Metadata injectCookiesInRequestHeaders(Metadata headers) { + for (Metadata.Key key : cookies.keySet()) { + headers.put(key, cookies.get(key)); + } + return headers; + } + + /** + * Iterate through all the keys in initial or trailing metadata, and add all the keys that match + * COOKIE_KEY_PREFIX to cookies. Values in trailers will override the value set in initial + * metadata for the same keys. + */ + void extractCookiesFromMetadata(@Nullable Metadata trailers) { + if (trailers == null) { + return; + } + for (String key : trailers.keys()) { + if (key.startsWith(COOKIE_KEY_PREFIX)) { + Metadata.Key metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + String value = trailers.get(metadataKey); + cookies.put(metadataKey, value); + } + } + } +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesInterceptor.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesInterceptor.java new file mode 100644 index 000000000000..77387851fabd --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesInterceptor.java @@ -0,0 +1,96 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2.stub; + +import io.grpc.CallOptions; +import io.grpc.Channel; +import io.grpc.ClientCall; +import io.grpc.ClientInterceptor; +import io.grpc.ForwardingClientCall; +import io.grpc.ForwardingClientCallListener; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; +import io.grpc.Status; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * A cookie interceptor that checks the cookie value from returned trailer, updates the cookie + * holder, and inject it in the header of the next request. + */ +class CookiesInterceptor implements ClientInterceptor { + + private static final Logger LOG = Logger.getLogger(CookiesInterceptor.class.getName()); + + @Override + public ClientCall interceptCall( + MethodDescriptor methodDescriptor, CallOptions callOptions, Channel channel) { + return new ForwardingClientCall.SimpleForwardingClientCall( + channel.newCall(methodDescriptor, callOptions)) { + @Override + public void start(Listener responseListener, Metadata headers) { + // Gets the CookiesHolder added from CookiesServerStreamingCallable and + // CookiesUnaryCallable. + // Add CookiesHolder content to request headers if there's any. + try { + CookiesHolder cookie = CookiesHolder.fromCallOptions(callOptions); + if (cookie != null) { + headers = cookie.injectCookiesInRequestHeaders(headers); + responseListener = new UpdateCookieListener<>(responseListener, cookie); + } + } catch (Throwable e) { + LOG.warning("Failed to inject cookie to request headers: " + e); + } finally { + super.start(responseListener, headers); + } + } + }; + } + + /** Add headers and trailers to CookiesHolder if there's any. * */ + static class UpdateCookieListener + extends ForwardingClientCallListener.SimpleForwardingClientCallListener { + + private final CookiesHolder cookie; + + UpdateCookieListener(ClientCall.Listener delegate, CookiesHolder cookiesHolder) { + super(delegate); + this.cookie = cookiesHolder; + } + + @Override + public void onHeaders(Metadata headers) { + try { + cookie.extractCookiesFromMetadata(headers); + } catch (Throwable e) { + LOG.log(Level.WARNING, "Failed to extract cookie from response headers.", e); + } finally { + super.onHeaders(headers); + } + } + + @Override + public void onClose(Status status, Metadata trailers) { + try { + cookie.extractCookiesFromMetadata(trailers); + } catch (Throwable e) { + LOG.log(Level.WARNING, "Failed to extract cookie from response trailers.", e); + } finally { + super.onClose(status, trailers); + } + } + } +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesServerStreamingCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesServerStreamingCallable.java new file mode 100644 index 000000000000..0d012b8ea061 --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesServerStreamingCallable.java @@ -0,0 +1,48 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2.stub; + +import static com.google.cloud.bigtable.data.v2.stub.CookiesHolder.COOKIES_HOLDER_KEY; + +import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.ResponseObserver; +import com.google.api.gax.rpc.ServerStreamingCallable; + +/** + * The cookie holder will act as operation scoped storage for all retry attempts. Each attempt's + * cookies will be merged into the value holder and will be sent out with the next retry attempt. + */ +class CookiesServerStreamingCallable + extends ServerStreamingCallable { + + private final ServerStreamingCallable callable; + + CookiesServerStreamingCallable(ServerStreamingCallable innerCallable) { + this.callable = innerCallable; + } + + @Override + public void call( + RequestT request, ResponseObserver responseObserver, ApiCallContext context) { + GrpcCallContext grpcCallContext = (GrpcCallContext) context; + callable.call( + request, + responseObserver, + grpcCallContext.withCallOptions( + grpcCallContext.getCallOptions().withOption(COOKIES_HOLDER_KEY, new CookiesHolder()))); + } +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesUnaryCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesUnaryCallable.java new file mode 100644 index 000000000000..b0d42d59552a --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/CookiesUnaryCallable.java @@ -0,0 +1,44 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2.stub; + +import static com.google.cloud.bigtable.data.v2.stub.CookiesHolder.COOKIES_HOLDER_KEY; + +import com.google.api.core.ApiFuture; +import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.UnaryCallable; + +/** + * The cookie holder will act as operation scoped storage for all retry attempts. Each attempt's + * cookies will be merged into the value holder and will be sent out with the next retry attempt. + */ +class CookiesUnaryCallable extends UnaryCallable { + private final UnaryCallable innerCallable; + + CookiesUnaryCallable(UnaryCallable callable) { + this.innerCallable = callable; + } + + @Override + public ApiFuture futureCall(RequestT request, ApiCallContext context) { + GrpcCallContext grpcCallContext = (GrpcCallContext) context; + return innerCallable.futureCall( + request, + grpcCallContext.withCallOptions( + grpcCallContext.getCallOptions().withOption(COOKIES_HOLDER_KEY, new CookiesHolder()))); + } +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java index 0420e47dcf4b..705b3027ed62 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java @@ -185,6 +185,14 @@ public static EnhancedBigtableStubSettings finalizeSettings( // workaround JWT audience issues patchCredentials(builder); + // patch cookies interceptor + InstantiatingGrpcChannelProvider.Builder transportProvider = null; + if (builder.getTransportChannelProvider() instanceof InstantiatingGrpcChannelProvider) { + transportProvider = + ((InstantiatingGrpcChannelProvider) builder.getTransportChannelProvider()).toBuilder(); + transportProvider.setInterceptorProvider(() -> ImmutableList.of(new CookiesInterceptor())); + } + // Inject channel priming if (settings.isRefreshingChannel()) { // Fix the credentials so that they can be shared @@ -194,20 +202,18 @@ public static EnhancedBigtableStubSettings finalizeSettings( } builder.setCredentialsProvider(FixedCredentialsProvider.create(credentials)); - // Inject the primer - InstantiatingGrpcChannelProvider transportProvider = - (InstantiatingGrpcChannelProvider) settings.getTransportChannelProvider(); - - builder.setTransportChannelProvider( - transportProvider - .toBuilder() - .setChannelPrimer( - BigtableChannelPrimer.create( - credentials, - settings.getProjectId(), - settings.getInstanceId(), - settings.getAppProfileId())) - .build()); + if (transportProvider != null) { + transportProvider.setChannelPrimer( + BigtableChannelPrimer.create( + credentials, + settings.getProjectId(), + settings.getInstanceId(), + settings.getAppProfileId())); + } + } + + if (transportProvider != null) { + builder.setTransportChannelProvider(transportProvider.build()); } ImmutableMap attributes = @@ -365,7 +371,11 @@ public ServerStreamingCallable createReadRowsCallable( new TracedServerStreamingCallable<>( readRowsUserCallable, clientContext.getTracerFactory(), span); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + // CookieHolder needs to be injected to the CallOptions outside of retries, otherwise retry + // attempts won't see a CookieHolder. + ServerStreamingCallable withCookie = new CookiesServerStreamingCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } /** @@ -401,7 +411,9 @@ public UnaryCallable createReadRowCallable(RowAdapter new TracedUnaryCallable<>( firstRow, clientContext.getTracerFactory(), getSpanName("ReadRow")); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + UnaryCallable withCookie = new CookiesUnaryCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } /** @@ -642,7 +654,9 @@ private UnaryCallable createBulkMutateRowsCallable() { new TracedUnaryCallable<>( tracedBatcherUnaryCallable, clientContext.getTracerFactory(), spanName); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + UnaryCallable withCookie = new CookiesUnaryCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } /** @@ -924,7 +938,10 @@ public Map extract( ServerStreamingCallable traced = new TracedServerStreamingCallable<>(retrying, clientContext.getTracerFactory(), span); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + ServerStreamingCallable withCookie = + new CookiesServerStreamingCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } /** @@ -1004,7 +1021,10 @@ public Map extract( new TracedServerStreamingCallable<>( readChangeStreamUserCallable, clientContext.getTracerFactory(), span); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + ServerStreamingCallable withCookie = + new CookiesServerStreamingCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } /** @@ -1017,7 +1037,11 @@ private UnaryCallable createUserFacin UnaryCallable traced = new TracedUnaryCallable<>(inner, clientContext.getTracerFactory(), getSpanName(methodName)); - return traced.withDefaultCallContext(clientContext.getDefaultCallContext()); + // CookieHolder needs to be injected to the CallOptions outside of retries, otherwise retry + // attempts won't see a CookieHolder. + UnaryCallable withCookie = new CookiesUnaryCallable<>(traced); + + return withCookie.withDefaultCallContext(clientContext.getDefaultCallContext()); } private UnaryCallable createPingAndWarmCallable() { diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/MetadataSubject.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/MetadataSubject.java new file mode 100644 index 000000000000..5e76ce38cd30 --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/MetadataSubject.java @@ -0,0 +1,60 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2; + +import static com.google.common.truth.Truth.assertAbout; + +import com.google.common.truth.FailureMetadata; +import com.google.common.truth.Subject; +import io.grpc.Metadata; +import javax.annotation.Nullable; + +/** Utility class to test key-value pairs in {@link io.grpc.Metadata}. */ +public final class MetadataSubject extends Subject { + + @Nullable private final Metadata actual; + + public static Factory metadata() { + return MetadataSubject::new; + } + + private MetadataSubject(FailureMetadata metadata, @Nullable Metadata actual) { + super(metadata, actual); + this.actual = actual; + } + + public static MetadataSubject assertThat(@Nullable Metadata actual) { + return assertAbout(metadata()).that(actual); + } + + public void containsAtLeast(String... keyValuePairs) { + assert actual != null; + for (int i = 0; i < keyValuePairs.length; i += 2) { + check("containsAtLeast()") + .that(actual.get(Metadata.Key.of(keyValuePairs[i], Metadata.ASCII_STRING_MARSHALLER))) + .isEqualTo(keyValuePairs[i + 1]); + } + } + + public void doesNotContainKeys(String... keys) { + assert actual != null; + for (String key : keys) { + check("doesNotContainKeys()") + .that(actual.containsKey(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER))) + .isFalse(); + } + } +} diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolderTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolderTest.java new file mode 100644 index 000000000000..5dac05352374 --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/CookiesHolderTest.java @@ -0,0 +1,561 @@ +/* + * 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. + * 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. + */ +package com.google.cloud.bigtable.data.v2.stub; + +import static com.google.cloud.bigtable.data.v2.MetadataSubject.assertThat; +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.StatusCode; +import com.google.bigtable.v2.BigtableGrpc; +import com.google.bigtable.v2.CheckAndMutateRowRequest; +import com.google.bigtable.v2.CheckAndMutateRowResponse; +import com.google.bigtable.v2.GenerateInitialChangeStreamPartitionsRequest; +import com.google.bigtable.v2.GenerateInitialChangeStreamPartitionsResponse; +import com.google.bigtable.v2.MutateRowRequest; +import com.google.bigtable.v2.MutateRowResponse; +import com.google.bigtable.v2.MutateRowsRequest; +import com.google.bigtable.v2.MutateRowsResponse; +import com.google.bigtable.v2.ReadChangeStreamRequest; +import com.google.bigtable.v2.ReadChangeStreamResponse; +import com.google.bigtable.v2.ReadModifyWriteRowRequest; +import com.google.bigtable.v2.ReadModifyWriteRowResponse; +import com.google.bigtable.v2.ReadRowsRequest; +import com.google.bigtable.v2.ReadRowsResponse; +import com.google.bigtable.v2.SampleRowKeysRequest; +import com.google.bigtable.v2.SampleRowKeysResponse; +import com.google.cloud.bigtable.data.v2.BigtableDataClient; +import com.google.cloud.bigtable.data.v2.BigtableDataSettings; +import com.google.cloud.bigtable.data.v2.FakeServiceBuilder; +import com.google.cloud.bigtable.data.v2.models.BulkMutation; +import com.google.cloud.bigtable.data.v2.models.ConditionalRowMutation; +import com.google.cloud.bigtable.data.v2.models.Mutation; +import com.google.cloud.bigtable.data.v2.models.Query; +import com.google.cloud.bigtable.data.v2.models.ReadChangeStreamQuery; +import com.google.cloud.bigtable.data.v2.models.ReadModifyWriteRow; +import com.google.cloud.bigtable.data.v2.models.RowMutation; +import com.google.cloud.bigtable.data.v2.models.RowMutationEntry; +import io.grpc.ForwardingServerCall; +import io.grpc.Metadata; +import io.grpc.MethodDescriptor; +import io.grpc.Server; +import io.grpc.ServerCall; +import io.grpc.ServerCallHandler; +import io.grpc.ServerInterceptor; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; + +@RunWith(JUnit4.class) +public class CookiesHolderTest { + private static final Metadata.Key ROUTING_COOKIE_1 = + Metadata.Key.of("x-goog-cbt-cookie-routing", Metadata.ASCII_STRING_MARSHALLER); + private static final Metadata.Key ROUTING_COOKIE_2 = + Metadata.Key.of("x-goog-cbt-cookie-random", Metadata.ASCII_STRING_MARSHALLER); + private static final Metadata.Key BAD_KEY = + Metadata.Key.of("x-goog-cbt-not-cookie", Metadata.ASCII_STRING_MARSHALLER); + private static final String testCookie = "test-routing-cookie"; + + private Server server; + private final FakeService fakeService = new FakeService(); + private BigtableDataClient client; + private final List serverMetadata = new ArrayList<>(); + + private final Set methods = new HashSet<>(); + + @Before + public void setup() throws Exception { + ServerInterceptor serverInterceptor = + new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall serverCall, + Metadata metadata, + ServerCallHandler serverCallHandler) { + serverMetadata.add(metadata); + if (metadata.containsKey(ROUTING_COOKIE_1)) { + methods.add(serverCall.getMethodDescriptor().getBareMethodName()); + } + return serverCallHandler.startCall(serverCall, metadata); + } + }; + + server = FakeServiceBuilder.create(fakeService).intercept(serverInterceptor).start(); + + BigtableDataSettings.Builder settings = + BigtableDataSettings.newBuilderForEmulator(server.getPort()) + .setProjectId("fake-project") + .setInstanceId("fake-instance"); + + // Override CheckAndMutate and ReadModifyWrite retry settings here. These operations + // are currently not retryable but this could change in the future after we + // have routing cookie sends back meaningful information and changes how retry works. + // Routing cookie still needs to be respected and handled by the callables. + settings + .stubSettings() + .checkAndMutateRowSettings() + .setRetrySettings( + RetrySettings.newBuilder() + .setInitialRetryDelay(Duration.ofMillis(10)) + .setMaxRetryDelay(Duration.ofMinutes(1)) + .setMaxAttempts(2) + .build()) + .setRetryableCodes(StatusCode.Code.UNAVAILABLE); + + settings + .stubSettings() + .readModifyWriteRowSettings() + .setRetrySettings( + RetrySettings.newBuilder() + .setInitialRetryDelay(Duration.ofMillis(10)) + .setMaxRetryDelay(Duration.ofMinutes(1)) + .setMaxAttempts(2) + .build()) + .setRetryableCodes(StatusCode.Code.UNAVAILABLE); + + client = BigtableDataClient.create(settings.build()); + } + + @After + public void tearDown() throws Exception { + if (client != null) { + client.close(); + } + if (server != null) { + server.shutdown(); + } + } + + @Test + public void testReadRows() { + client.readRows(Query.create("fake-table")).iterator().hasNext(); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast(ROUTING_COOKIE_1.name(), "readRows", ROUTING_COOKIE_2.name(), testCookie); + assertThat(lastMetadata).doesNotContainKeys(BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testReadRow() { + client.readRow("fake-table", "key"); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast(ROUTING_COOKIE_1.name(), "readRows", ROUTING_COOKIE_2.name(), testCookie); + assertThat(lastMetadata).doesNotContainKeys(BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testMutateRows() { + client.bulkMutateRows( + BulkMutation.create("fake-table") + .add(RowMutationEntry.create("key").setCell("cf", "q", "v"))); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast( + ROUTING_COOKIE_1.name(), "mutateRows", ROUTING_COOKIE_2.name(), testCookie); + assertThat(lastMetadata).doesNotContainKeys(BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testMutateRow() { + client.mutateRow(RowMutation.create("table", "key").setCell("cf", "q", "v")); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast(ROUTING_COOKIE_1.name(), "mutateRow", ROUTING_COOKIE_2.name(), testCookie); + assertThat(lastMetadata).doesNotContainKeys(BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testSampleRowKeys() { + + client.sampleRowKeys("fake-table"); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast( + ROUTING_COOKIE_1.name(), "sampleRowKeys", ROUTING_COOKIE_2.name(), testCookie); + assertThat(lastMetadata).doesNotContainKeys(BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testNoCookieSucceedReadRows() { + fakeService.returnCookie = false; + + client.readRows(Query.create("fake-table")).iterator().hasNext(); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata).doesNotContainKeys(ROUTING_COOKIE_1.name(), ROUTING_COOKIE_2.name()); + + serverMetadata.clear(); + } + + @Test + public void testNoCookieSucceedReadRow() { + fakeService.returnCookie = false; + + client.readRow("fake-table", "key"); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .doesNotContainKeys(ROUTING_COOKIE_1.name(), ROUTING_COOKIE_2.name(), BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testNoCookieSucceedMutateRows() { + fakeService.returnCookie = false; + + client.bulkMutateRows( + BulkMutation.create("fake-table") + .add(RowMutationEntry.create("key").setCell("cf", "q", "v"))); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .doesNotContainKeys(ROUTING_COOKIE_1.name(), ROUTING_COOKIE_2.name(), BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testNoCookieSucceedMutateRow() { + fakeService.returnCookie = false; + + client.mutateRow(RowMutation.create("fake-table", "key").setCell("cf", "q", "v")); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .doesNotContainKeys(ROUTING_COOKIE_1.name(), ROUTING_COOKIE_2.name(), BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testNoCookieSucceedSampleRowKeys() { + fakeService.returnCookie = false; + + client.sampleRowKeys("fake-table"); + + assertThat(fakeService.count.get()).isGreaterThan(1); + assertThat(serverMetadata).hasSize(fakeService.count.get()); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .doesNotContainKeys(ROUTING_COOKIE_1.name(), ROUTING_COOKIE_2.name(), BAD_KEY.name()); + + serverMetadata.clear(); + } + + @Test + public void testCookiesInHeaders() throws Exception { + // Send 2 cookies in the headers, with routingCookieKey and ROUTING_COOKIE_2. ROUTING_COOKIE_2 + // is also sent in the trailers so the value should be overridden. + final Metadata.Key routingCookieKey = + Metadata.Key.of("x-goog-cbt-cookie-no-override", Metadata.ASCII_STRING_MARSHALLER); + final String routingCookieValue = "no-override"; + ServerInterceptor serverInterceptor = + new ServerInterceptor() { + @Override + public ServerCall.Listener interceptCall( + ServerCall serverCall, + Metadata metadata, + ServerCallHandler serverCallHandler) { + serverMetadata.add(metadata); + + metadata.put(routingCookieKey, routingCookieValue); + return serverCallHandler.startCall( + new ForwardingServerCall.SimpleForwardingServerCall(serverCall) { + @Override + public void sendHeaders(Metadata headers) { + headers.put(routingCookieKey, routingCookieValue); + headers.put(ROUTING_COOKIE_2, "will-be-overridden"); + super.sendHeaders(headers); + } + }, + metadata); + } + }; + + Server newServer = null; + try { + newServer = FakeServiceBuilder.create(fakeService).intercept(serverInterceptor).start(); + + BigtableDataSettings.Builder settings = + BigtableDataSettings.newBuilderForEmulator(newServer.getPort()) + .setProjectId("fake-project") + .setInstanceId("fake-instance"); + + try (BigtableDataClient client = BigtableDataClient.create(settings.build())) { + + client.readRows(Query.create("table")).iterator().hasNext(); + + Metadata lastMetadata = serverMetadata.get(fakeService.count.get() - 1); + + assertThat(lastMetadata) + .containsAtLeast( + ROUTING_COOKIE_2.name(), testCookie, routingCookieKey.name(), routingCookieValue); + } + } finally { + if (newServer != null) { + newServer.shutdown(); + } + } + } + + @Test + public void testAllMethodsAreCalled() throws InterruptedException { + // This test ensures that all methods respect the retry cookie except for the ones that are + // explicitly added to the methods list. It requires that any newly method is exercised in this + // test. This is enforced by introspecting grpc method descriptors. + client.readRows(Query.create("fake-table")).iterator().hasNext(); + + fakeService.count.set(0); + client.mutateRow(RowMutation.create("fake-table", "key").setCell("cf", "q", "v")); + + fakeService.count.set(0); + client.bulkMutateRows( + BulkMutation.create("fake-table") + .add(RowMutationEntry.create("key").setCell("cf", "q", "v"))); + + fakeService.count.set(0); + client.sampleRowKeys("fake-table"); + + fakeService.count.set(0); + client.checkAndMutateRow( + ConditionalRowMutation.create("fake-table", "key") + .then(Mutation.create().setCell("cf", "q", "v"))); + + fakeService.count.set(0); + client.readModifyWriteRow( + ReadModifyWriteRow.create("fake-table", "key").append("cf", "q", "v")); + + fakeService.count.set(0); + client.generateInitialChangeStreamPartitions("fake-table").iterator().hasNext(); + + fakeService.count.set(0); + client.readChangeStream(ReadChangeStreamQuery.create("fake-table")).iterator().hasNext(); + + Set expected = + BigtableGrpc.getServiceDescriptor().getMethods().stream() + .map(MethodDescriptor::getBareMethodName) + .collect(Collectors.toSet()); + + // Exclude methods that are not supported by routing cookie + methods.add("PingAndWarm"); + + assertThat(methods).containsExactlyElementsIn(expected); + } + + static class FakeService extends BigtableGrpc.BigtableImplBase { + + private boolean returnCookie = true; + private final AtomicInteger count = new AtomicInteger(); + + @Override + public void readRows( + ReadRowsRequest request, StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "readRows"); + responseObserver.onNext(ReadRowsResponse.getDefaultInstance()); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(ReadRowsResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void mutateRow( + MutateRowRequest request, StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "mutateRow"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(MutateRowResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void mutateRows( + MutateRowsRequest request, StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "mutateRows"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext( + MutateRowsResponse.newBuilder() + .addEntries(MutateRowsResponse.Entry.getDefaultInstance()) + .build()); + responseObserver.onCompleted(); + } + + @Override + public void sampleRowKeys( + SampleRowKeysRequest request, StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "sampleRowKeys"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(SampleRowKeysResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void checkAndMutateRow( + CheckAndMutateRowRequest request, + StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "checkAndMutate"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(CheckAndMutateRowResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void readModifyWriteRow( + ReadModifyWriteRowRequest request, + StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "readModifyWrite"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(ReadModifyWriteRowResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + @Override + public void readChangeStream( + ReadChangeStreamRequest request, + StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "readChangeStream"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext( + ReadChangeStreamResponse.newBuilder() + .setCloseStream(ReadChangeStreamResponse.CloseStream.getDefaultInstance()) + .build()); + responseObserver.onCompleted(); + } + + @Override + public void generateInitialChangeStreamPartitions( + GenerateInitialChangeStreamPartitionsRequest request, + StreamObserver responseObserver) { + if (count.getAndIncrement() < 1) { + Metadata trailers = new Metadata(); + maybePopulateCookie(trailers, "generateInitialChangeStreamPartitions"); + StatusRuntimeException exception = new StatusRuntimeException(Status.UNAVAILABLE, trailers); + responseObserver.onError(exception); + return; + } + responseObserver.onNext(GenerateInitialChangeStreamPartitionsResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } + + private void maybePopulateCookie(Metadata trailers, String label) { + if (returnCookie) { + trailers.put(ROUTING_COOKIE_1, label); + trailers.put(ROUTING_COOKIE_2, testCookie); + trailers.put(BAD_KEY, "bad-key"); + } + } + } +} From 8230069fe2fcadae96f5c7ba85768d8bd30d01ec Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 17:07:19 +0100 Subject: [PATCH 07/12] build(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.5.0 (#2013) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * build(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.5.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 --- google-cloud-bigtable/pom.xml | 2 +- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 0598d180ad26..011faaac8a22 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -630,7 +630,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.4.0 + 3.5.0 add-source diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index b688c9276b5d..e7462e744d3e 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -53,7 +53,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.4.0 + 3.5.0 add-snippets-source diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 06cf918e4313..9496f6a1e919 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -52,7 +52,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.4.0 + 3.5.0 add-snippets-source From 1023a503541aaa3988b341d02cb896e7e1c3f204 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 17:07:40 +0100 Subject: [PATCH 08/12] test(deps): update dependency com.google.protobuf:protoc to v3.25.1 (#2010) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test(deps): update dependency com.google.protobuf:protoc to v3.25.1 * 🦉 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 --- google-cloud-bigtable/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 011faaac8a22..55bc0be7079e 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -39,7 +39,7 @@ 1.59.0 - 3.25.0 + 3.25.1 From 7a2cafae3560dc698f7bf5ddd2681930ee2cd9c5 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 29 Nov 2023 17:32:15 +0100 Subject: [PATCH 09/12] test(deps): update dependency io.grpc:protoc-gen-grpc-java to v1.59.1 (#2014) 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 | |---|---|---|---|---|---| | [io.grpc:protoc-gen-grpc-java](https://togithub.com/grpc/grpc-java) | `1.59.0` -> `1.59.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.grpc:protoc-gen-grpc-java/1.59.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.grpc:protoc-gen-grpc-java/1.59.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.grpc:protoc-gen-grpc-java/1.59.0/1.59.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.grpc:protoc-gen-grpc-java/1.59.0/1.59.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
grpc/grpc-java (io.grpc:protoc-gen-grpc-java) ### [`v1.59.1`](https://togithub.com/grpc/grpc-java/releases/tag/v1.59.1) - netty: Implement `Http2Headers.isEmpty()`. This fixes compatibility with Netty 4.1.101.Final. - netty: Add `NettyServerBuilder.maxRstFramesPerWindow()`. This can be used to limit impact of Rapid Reset - xds: Log ORCA UNIMPLEMENTED error to subchannel logger. This removes them from the normal application logs, reducing log spam
--- ### 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://developer.mend.io/github/googleapis/java-bigtable). --- google-cloud-bigtable/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 55bc0be7079e..abe258f630f4 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -38,7 +38,7 @@ batch-bigtable.googleapis.com:443 - 1.59.0 + 1.59.1 3.25.1 From c3c383b72636e42c63fbc1fb99eb0e4a9c29b5b9 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:57:06 -0500 Subject: [PATCH 10/12] ci: Update ci.yaml to introduce Java 21 unit testing (#1907) (#2019) Source-Link: https://github.com/googleapis/synthtool/commit/c06d605503f34e91c9d7dfee8f5287d58b5988ae Post-Processor: gcr.io/cloud-devrel-public-resources/owlbot-java:latest@sha256:6f431774e11cc46619cf093fd1481193c4024031073697fa18f0099b943aab88 Co-authored-by: Owl Bot --- .github/.OwlBot.lock.yaml | 4 ++-- .github/workflows/ci.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index 208af343821b..d304652e1c44 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:fb7584f6adb3847ac480ed49a4bfe1463965026b2919a1be270e3174f3ce1191 -# created: 2023-10-26T23:22:21.357007231Z + digest: sha256:6f431774e11cc46619cf093fd1481193c4024031073697fa18f0099b943aab88 +# created: 2023-12-01T19:50:20.444857406Z diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e27b2c57563c..ae66b1973b17 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false matrix: - java: [11, 17] + java: [11, 17, 21] steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 From 4e49dffa72db8dd04e75ca86178d875fab6f566b Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 5 Dec 2023 17:30:16 +0100 Subject: [PATCH 11/12] deps: update shared dependencies (#2016) 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-shared-dependencies](https://togithub.com/googleapis/sdk-platform-java) | `3.19.0` -> `3.20.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:google-cloud-shared-dependencies/3.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:google-cloud-shared-dependencies/3.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:google-cloud-shared-dependencies/3.19.0/3.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:google-cloud-shared-dependencies/3.19.0/3.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [com.google.cloud:gapic-libraries-bom](https://togithub.com/googleapis/google-cloud-java) | `1.24.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:gapic-libraries-bom/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:gapic-libraries-bom/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:gapic-libraries-bom/1.24.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:gapic-libraries-bom/1.24.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/google-cloud-java (com.google.cloud:gapic-libraries-bom) ### [`v1.25.0`](https://togithub.com/googleapis/google-cloud-java/blob/HEAD/CHANGELOG.md#1250-2023-12-04) [Compare Source](https://togithub.com/googleapis/google-cloud-java/compare/v1.24.0...v1.25.0) ##### âš  BREAKING CHANGES - add FeatureViewDataFormat, FeatureViewDataKey to FeatureOnlineStoreService - \[recaptchaenterprise] added required annotations ([#​10045](https://togithub.com/googleapis/google-cloud-java/issues/10045)) - change the resource pattern value to `properties/{property}/audienceLists/{audience_list}` for the resource definition `analyticsdata.googleapis.com/AudienceList` - change the resource pattern value to `properties/{property}` for the resource definition `analyticsadmin.googleapis.com/Property` ##### Features - \[aiplatform] add ComputeTokens and CountTokens API ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[aiplatform] add ComputeTokens API ([#​10053](https://togithub.com/googleapis/google-cloud-java/issues/10053)) ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[aiplatform] add deployment_timeout to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[aiplatform] add deployment_timeout to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[aiplatform] add grpc_ports to UploadModel ModelContainerSpec ([#​10065](https://togithub.com/googleapis/google-cloud-java/issues/10065)) ([de32d7a](https://togithub.com/googleapis/google-cloud-java/commit/de32d7a5c7738761b2cb30fb30b6b53836c9556c)) - \[aiplatform] add grpc_ports to UploadModel ModelContainerSpec ([#​10091](https://togithub.com/googleapis/google-cloud-java/issues/10091)) ([eeb5108](https://togithub.com/googleapis/google-cloud-java/commit/eeb510862b36a32523b385deda0b7a5207d052b6)) - \[aiplatform] add protected_artifact_location_id to CustomJob ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[aiplatform] add protected_artifact_location_id to CustomJob ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - \[analyticsdata] add `CreateRecurringAudienceList`, `GetRecurringAudienceList`, `ListRecurringAudienceLists` methods to the Data API v1 alpha ([#​10092](https://togithub.com/googleapis/google-cloud-java/issues/10092)) ([e4f430e](https://togithub.com/googleapis/google-cloud-java/commit/e4f430eb37c310c1f3caf1ddbc3b3b42bd7ae75f)) - \[analyticsdata] add the `SheetExportAudienceList` method to the Data API v1 alpha ([#​10047](https://togithub.com/googleapis/google-cloud-java/issues/10047)) ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - \[batch] add a CloudLoggingOption and use_generic_task_monitored_resource fields for users to opt out new batch monitored resource in cloud logging ([#​10056](https://togithub.com/googleapis/google-cloud-java/issues/10056)) ([a9830d9](https://togithub.com/googleapis/google-cloud-java/commit/a9830d9373cad9d2235ed93a625ebee886ff6ff0)) - \[batch] add a CloudLoggingOption and use_generic_task_monitored_resource fields for users to opt out new batch monitored resource in cloud logging ([#​10073](https://togithub.com/googleapis/google-cloud-java/issues/10073)) ([5c91759](https://togithub.com/googleapis/google-cloud-java/commit/5c91759a2067bb7bf8d6ffe26f5aeef07c9cbb0a)) - \[binaryauthorization] add container_name, container_type fields to Continuous Validation Logs ([#​10085](https://togithub.com/googleapis/google-cloud-java/issues/10085)) ([ee237cd](https://togithub.com/googleapis/google-cloud-java/commit/ee237cd3a511aaa7b135d619892bdfe7ac307e75)) - \[cloudprofiler] add client side retry config for export service ([#​10060](https://togithub.com/googleapis/google-cloud-java/issues/10060)) ([1961c40](https://togithub.com/googleapis/google-cloud-java/commit/1961c40a135f0932aedb983ab3c75174f97a71d7)) - \[confidentialcomputing] Add a new field `token_type` to `TokenOptions` message proto ([#​10051](https://togithub.com/googleapis/google-cloud-java/issues/10051)) ([e8c974b](https://togithub.com/googleapis/google-cloud-java/commit/e8c974b8781c12ac67d7e878cd869324086e75c0)) - \[dataplex] add data quality score to DataQualityResult ([#​10108](https://togithub.com/googleapis/google-cloud-java/issues/10108)) ([fbbbc5c](https://togithub.com/googleapis/google-cloud-java/commit/fbbbc5c2aaa8fe3e38c4a507db075a65e3d83627)) - \[dataplex] added DataQualityResult.score, dimension_score, column_score ([#​10064](https://togithub.com/googleapis/google-cloud-java/issues/10064)) ([7a49d63](https://togithub.com/googleapis/google-cloud-java/commit/7a49d63e7318436ad652bf73475efd9018d83eeb)) - \[dialogflow-cx] add agent answer feedback capability ([#​10066](https://togithub.com/googleapis/google-cloud-java/issues/10066)) ([8cca9aa](https://togithub.com/googleapis/google-cloud-java/commit/8cca9aac54a8be5b7cce69c855c0b5d94c33f381)) - \[dialogflow-cx] added Generator API ([#​10089](https://togithub.com/googleapis/google-cloud-java/issues/10089)) ([bd47695](https://togithub.com/googleapis/google-cloud-java/commit/bd4769513ffb031f5c3d48b139d7ffaf8454a0ea)) - \[discoveryengine] add data store and engine services ([#​10054](https://togithub.com/googleapis/google-cloud-java/issues/10054)) ([5a71294](https://togithub.com/googleapis/google-cloud-java/commit/5a71294201f9007512a0c669bbc93f3eda04acba)) - \[file] Added REGIONAL tier support in the v1 API ([7d1f4fe](https://togithub.com/googleapis/google-cloud-java/commit/7d1f4fe6c044fd7328c5fdd78ba16c166e801e00)) - \[file] Added REGIONAL tier support in the v1beta1 API ([#​10058](https://togithub.com/googleapis/google-cloud-java/issues/10058)) ([7d1f4fe](https://togithub.com/googleapis/google-cloud-java/commit/7d1f4fe6c044fd7328c5fdd78ba16c166e801e00)) - \[recaptchaenterprise] added AnnotateAssessmentRequest.account_id ([#​10077](https://togithub.com/googleapis/google-cloud-java/issues/10077)) ([9fe85ef](https://togithub.com/googleapis/google-cloud-java/commit/9fe85efadd651bfae22ff92d904762954ffa18fd)) - \[securesourcemanager] new module for securesourcemanager ([#​10032](https://togithub.com/googleapis/google-cloud-java/issues/10032)) ([64a3b28](https://togithub.com/googleapis/google-cloud-java/commit/64a3b289052a64c37a58503938e2ed3796c10812)) - \[telcoautomation] new module for telcoautomation ([#​10070](https://togithub.com/googleapis/google-cloud-java/issues/10070)) ([6188d44](https://togithub.com/googleapis/google-cloud-java/commit/6188d44761bcfa4dab77a02f51097474e2403e9d)) - add `creation_quota_tokens_charged`, `row_count`, `error_message` to the `AudienceList` resource ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - add BatchDeletePipelineJobs, BatchDeletePipelineJobsRequest and BatchDeletePipelineJobsResponse to PipelineService ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add CountTokensRequest to PredictionService ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add FeatureGroup, FeatureOnlineStore, FeatureOnlineStoreAdminService, FeatureOnlineStoreService, FeatureRegistryService, FeatureView, FeatureViewSync ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add FeatureViewDataFormat, FeatureViewDataKey to FeatureOnlineStoreService ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add NumericRestriction to Index ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add NumericRestriction to Index ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add shared_memory_size_mb to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add shared_memory_size_mb to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add startup_probe, health_probe to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add startup_probe, health_probe to UploadModel ModelContainerSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add StudyTimeConstraint to Study ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add StudyTimeConstraint to Study ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add tpu_topology to MachineResources ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add tpu_topology to MachineSpec ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) - add value_type, version_column_name to Feature ([5352821](https://togithub.com/googleapis/google-cloud-java/commit/5352821b5cc151131728a072adeb3f146edee9fc)) ##### Bug Fixes - \[recaptchaenterprise] added required annotations ([#​10045](https://togithub.com/googleapis/google-cloud-java/issues/10045)) ([27888dd](https://togithub.com/googleapis/google-cloud-java/commit/27888ddb1e49f606e317bede7ef033fff48fef84)) - add `optional` annotation to the `dimension_name` field of the `AudienceDimension` type ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - add `optional` annotation to the `offset`, `limit` fields of the `QueryAudienceListRequest` type ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - add `optional` annotation to the `page_token` field of the `ListAudienceListsRequest` type ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - add `optional` annotation to the `property`, `date_ranges`, `funnel`, `funnel_breakdown`, `funnel_visualization_type`, `segments`, `dimension_filter`, `return_property_quota`, `limit` fields of the `RunFunnelReportRequest` type ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - add `required` annotation to the `name` field of the `QueryAudienceListRequest` type ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - change the resource pattern value to `properties/{property}/audienceLists/{audience_list}` for the resource definition `analyticsdata.googleapis.com/AudienceList` ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - change the resource pattern value to `properties/{property}` for the resource definition `analyticsadmin.googleapis.com/Property` ([a6880a0](https://togithub.com/googleapis/google-cloud-java/commit/a6880a0581983878ca13a287f8bd956a6262735e)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([0d18fcc](https://togithub.com/googleapis/google-cloud-java/commit/0d18fcc847c3e26f9ed8809266d1acf349f92391)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([9d555bc](https://togithub.com/googleapis/google-cloud-java/commit/9d555bc118bcb9e34529df54c909dd0d4c17fa49)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([3756776](https://togithub.com/googleapis/google-cloud-java/commit/375677643b8a7fca86a5d12b4f34b2e9e5f2c3e1)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([8d05c8b](https://togithub.com/googleapis/google-cloud-java/commit/8d05c8b2ca4839923ac2362f11447ee49efa3002)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([7fe1280](https://togithub.com/googleapis/google-cloud-java/commit/7fe128038269013125901735b45a3af9ba0a146f)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([43bfb4b](https://togithub.com/googleapis/google-cloud-java/commit/43bfb4b2cd449f056c1bc3e2b0635043385b3d85)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([7651030](https://togithub.com/googleapis/google-cloud-java/commit/76510309dd1cc68b074ab8d99819cfb29e82aeca)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([9eac6a9](https://togithub.com/googleapis/google-cloud-java/commit/9eac6a96bde6806dd81faba026daa0166d2e7ff3)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10094](https://togithub.com/googleapis/google-cloud-java/issues/10094)) ([7651030](https://togithub.com/googleapis/google-cloud-java/commit/76510309dd1cc68b074ab8d99819cfb29e82aeca)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10095](https://togithub.com/googleapis/google-cloud-java/issues/10095)) ([9eac6a9](https://togithub.com/googleapis/google-cloud-java/commit/9eac6a96bde6806dd81faba026daa0166d2e7ff3)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10096](https://togithub.com/googleapis/google-cloud-java/issues/10096)) ([3756776](https://togithub.com/googleapis/google-cloud-java/commit/375677643b8a7fca86a5d12b4f34b2e9e5f2c3e1)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10097](https://togithub.com/googleapis/google-cloud-java/issues/10097)) ([8d05c8b](https://togithub.com/googleapis/google-cloud-java/commit/8d05c8b2ca4839923ac2362f11447ee49efa3002)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10098](https://togithub.com/googleapis/google-cloud-java/issues/10098)) ([43bfb4b](https://togithub.com/googleapis/google-cloud-java/commit/43bfb4b2cd449f056c1bc3e2b0635043385b3d85)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10099](https://togithub.com/googleapis/google-cloud-java/issues/10099)) ([7fe1280](https://togithub.com/googleapis/google-cloud-java/commit/7fe128038269013125901735b45a3af9ba0a146f)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10100](https://togithub.com/googleapis/google-cloud-java/issues/10100)) ([0d18fcc](https://togithub.com/googleapis/google-cloud-java/commit/0d18fcc847c3e26f9ed8809266d1acf349f92391)) - **deps:** \[Many APIs] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10101](https://togithub.com/googleapis/google-cloud-java/issues/10101)) ([9d555bc](https://togithub.com/googleapis/google-cloud-java/commit/9d555bc118bcb9e34529df54c909dd0d4c17fa49)) - **deps:** \[securesourcemanager] Update the Java code generator (gapic-generator-java) to 2.30.0 ([2a527e1](https://togithub.com/googleapis/google-cloud-java/commit/2a527e112e76737c5a11cdc1050854583eab9252)) - **deps:** \[securesourcemanager] Update the Java code generator (gapic-generator-java) to 2.30.0 ([#​10102](https://togithub.com/googleapis/google-cloud-java/issues/10102)) ([2a527e1](https://togithub.com/googleapis/google-cloud-java/commit/2a527e112e76737c5a11cdc1050854583eab9252)) - **deps:** update dependency com.google.apis:google-api-services-storage to v1-rev20231117-2.0.0 ([#​10105](https://togithub.com/googleapis/google-cloud-java/issues/10105)) ([8fbbdbc](https://togithub.com/googleapis/google-cloud-java/commit/8fbbdbc48c23c841c031a6bc32f83211c1f036bc)) - **deps:** update dependency com.google.cloud:google-cloud-pubsub-bom to v1.125.12 ([#​10084](https://togithub.com/googleapis/google-cloud-java/issues/10084)) ([6b0166b](https://togithub.com/googleapis/google-cloud-java/commit/6b0166b448d756f3c33597e071c92fcb1562e5ca)) - **deps:** update dependency com.google.cloud:google-cloud-shared-dependencies to v3.20.0 ([#​10093](https://togithub.com/googleapis/google-cloud-java/issues/10093)) ([91a4e4e](https://togithub.com/googleapis/google-cloud-java/commit/91a4e4e20252f667b8fc6bda0d9ceaf947348274)) - **deps:** update dependency com.google.cloud:google-cloud-storage to v2.29.1 ([#​10035](https://togithub.com/googleapis/google-cloud-java/issues/10035)) ([eefb1b2](https://togithub.com/googleapis/google-cloud-java/commit/eefb1b2fa83b77d87ae9020cdc9552e385e4ff6b)) - use path wildcards in java-iam owlbot yaml ([#​10050](https://togithub.com/googleapis/google-cloud-java/issues/10050)) ([f89e45a](https://togithub.com/googleapis/google-cloud-java/commit/f89e45a3d72d85e8ec9720f54b8bf36de1a4e332)) ##### Documentation - \[cloudscheduler] correct timezone/offset information for Cloud Scheduler headers ([#​10048](https://togithub.com/googleapis/google-cloud-java/issues/10048)) ([2511217](https://togithub.com/googleapis/google-cloud-java/commit/25112175ee71861a900b3d77a712d2e74bb90543)) - \[contactcenterinsights] Update IngestConversations and BulkAnalyzeConversations comments ([#​10069](https://togithub.com/googleapis/google-cloud-java/issues/10069)) ([8a2c241](https://togithub.com/googleapis/google-cloud-java/commit/8a2c241780711f745cdc393d698e040c9d55eb3e)) - \[container] improve API documentation for Binary Authorization ([#​10063](https://togithub.com/googleapis/google-cloud-java/issues/10063)) ([25aa532](https://togithub.com/googleapis/google-cloud-java/commit/25aa532caf161cceac7795ee8ddd3a03786b97ce)) - \[dataplex] updated comments for `DataQualityResult.dimensions` field ([#​10044](https://togithub.com/googleapis/google-cloud-java/issues/10044)) ([404a852](https://togithub.com/googleapis/google-cloud-java/commit/404a85295344cf2e8b3fe13d9f595279847630fa)) - \[documentai] update comment for ProcessOptions.page_range ([#​10076](https://togithub.com/googleapis/google-cloud-java/issues/10076)) ([84fe051](https://togithub.com/googleapis/google-cloud-java/commit/84fe051733c88f13d0db34080b3191b09c742527)) - \[securitycenter] Modify documentation of SimulateSecurityHealthAnalyticsCustomModuleRequest ([#​10075](https://togithub.com/googleapis/google-cloud-java/issues/10075)) ([8313e78](https://togithub.com/googleapis/google-cloud-java/commit/8313e78b3fa363068af9da4a2f43868bcb17e81d)) - keep the API doc up-to-date with recent changes ([5a71294](https://togithub.com/googleapis/google-cloud-java/commit/5a71294201f9007512a0c669bbc93f3eda04acba))
--- ### 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. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] 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://developer.mend.io/github/googleapis/java-bigtable). --- google-cloud-bigtable-deps-bom/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index c75a12d9b6f8..c3ea5bc5417f 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -66,14 +66,14 @@ com.google.cloud gapic-libraries-bom - 1.24.0 + 1.25.0 pom import com.google.cloud google-cloud-shared-dependencies - 3.19.0 + 3.20.0 pom import From a28ac9eaaa3f4fcc758d69ee888e16a749a63c4b Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:28:15 +0000 Subject: [PATCH 12/12] chore(main): release 2.30.0 (#2008) :robot: I have created a release *beep* *boop* --- ## [2.30.0](https://togithub.com/googleapis/java-bigtable/compare/v2.29.1...v2.30.0) (2023-12-05) ### Features * Client sends routing cookie back to server ([#1888](https://togithub.com/googleapis/java-bigtable/issues/1888)) ([4c73abd](https://togithub.com/googleapis/java-bigtable/commit/4c73abd2f4a07808b591dd9178e87715d2f3008d)) ### Dependencies * Update dependency org.junit.vintage:junit-vintage-engine to v5.10.1 ([#1990](https://togithub.com/googleapis/java-bigtable/issues/1990)) ([7ad70e3](https://togithub.com/googleapis/java-bigtable/commit/7ad70e3abc1af7dfab715386978bf14f02b34e5d)) * Update shared dependencies ([#2016](https://togithub.com/googleapis/java-bigtable/issues/2016)) ([4e49dff](https://togithub.com/googleapis/java-bigtable/commit/4e49dffa72db8dd04e75ca86178d875fab6f566b)) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please). --- CHANGELOG.md | 13 +++++++++++++ google-cloud-bigtable-bom/pom.xml | 18 +++++++++--------- google-cloud-bigtable-deps-bom/pom.xml | 2 +- google-cloud-bigtable-emulator-core/pom.xml | 4 ++-- google-cloud-bigtable-emulator/pom.xml | 10 +++++----- google-cloud-bigtable-stats/pom.xml | 6 +++--- google-cloud-bigtable/pom.xml | 10 +++++----- .../com/google/cloud/bigtable/Version.java | 2 +- grpc-google-cloud-bigtable-admin-v2/pom.xml | 8 ++++---- grpc-google-cloud-bigtable-v2/pom.xml | 8 ++++---- pom.xml | 12 ++++++------ proto-google-cloud-bigtable-admin-v2/pom.xml | 8 ++++---- proto-google-cloud-bigtable-v2/pom.xml | 8 ++++---- samples/snapshot/pom.xml | 2 +- test-proxy/pom.xml | 4 ++-- versions.txt | 14 +++++++------- 16 files changed, 71 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3bef1b670eb..e03e2c932131 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [2.30.0](https://github.com/googleapis/java-bigtable/compare/v2.29.1...v2.30.0) (2023-12-05) + + +### Features + +* Client sends routing cookie back to server ([#1888](https://github.com/googleapis/java-bigtable/issues/1888)) ([4c73abd](https://github.com/googleapis/java-bigtable/commit/4c73abd2f4a07808b591dd9178e87715d2f3008d)) + + +### Dependencies + +* Update dependency org.junit.vintage:junit-vintage-engine to v5.10.1 ([#1990](https://github.com/googleapis/java-bigtable/issues/1990)) ([7ad70e3](https://github.com/googleapis/java-bigtable/commit/7ad70e3abc1af7dfab715386978bf14f02b34e5d)) +* Update shared dependencies ([#2016](https://github.com/googleapis/java-bigtable/issues/2016)) ([4e49dff](https://github.com/googleapis/java-bigtable/commit/4e49dffa72db8dd04e75ca86178d875fab6f566b)) + ## [2.29.1](https://github.com/googleapis/java-bigtable/compare/v2.29.0...v2.29.1) (2023-11-07) diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index bde24e45a134..7512e99da650 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom com.google.cloud @@ -63,42 +63,42 @@ com.google.cloud google-cloud-bigtable - 2.29.2-SNAPSHOT + 2.30.0 com.google.cloud google-cloud-bigtable-emulator - 0.166.2-SNAPSHOT + 0.167.0 com.google.cloud google-cloud-bigtable-emulator-core - 0.166.2-SNAPSHOT + 0.167.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.cloud google-cloud-bigtable-stats - 2.29.2-SNAPSHOT + 2.30.0
diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index c3ea5bc5417f..b0733f362d30 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -13,7 +13,7 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom diff --git a/google-cloud-bigtable-emulator-core/pom.xml b/google-cloud-bigtable-emulator-core/pom.xml index 142a1e8d5f1d..b00a569bc0d4 100644 --- a/google-cloud-bigtable-emulator-core/pom.xml +++ b/google-cloud-bigtable-emulator-core/pom.xml @@ -7,11 +7,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.29.2-SNAPSHOT + 2.30.0 google-cloud-bigtable-emulator-core - 0.166.2-SNAPSHOT + 0.167.0 A Java wrapper for the Cloud Bigtable emulator. diff --git a/google-cloud-bigtable-emulator/pom.xml b/google-cloud-bigtable-emulator/pom.xml index 14f9ba204e8b..63241aa35d0e 100644 --- a/google-cloud-bigtable-emulator/pom.xml +++ b/google-cloud-bigtable-emulator/pom.xml @@ -5,7 +5,7 @@ 4.0.0 google-cloud-bigtable-emulator - 0.166.2-SNAPSHOT + 0.167.0 Google Cloud Java - Bigtable Emulator https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 scm:git:git@github.com:googleapis/java-bigtable.git @@ -81,14 +81,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import @@ -99,7 +99,7 @@ com.google.cloud google-cloud-bigtable-emulator-core - 0.166.2-SNAPSHOT + 0.167.0 diff --git a/google-cloud-bigtable-stats/pom.xml b/google-cloud-bigtable-stats/pom.xml index 9d26c5e49639..b5e46be9d3fd 100644 --- a/google-cloud-bigtable-stats/pom.xml +++ b/google-cloud-bigtable-stats/pom.xml @@ -5,7 +5,7 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 4.0.0 @@ -13,7 +13,7 @@ through Stackdriver. Built-in metrics will be implemented with shaded OpenCensus so it won't interfere with customer's application metrics. --> google-cloud-bigtable-stats - 2.29.2-SNAPSHOT + 2.30.0 Experimental project to shade OpenCensus dependencies. @@ -21,7 +21,7 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index abe258f630f4..57c976d877a1 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-bigtable - 2.29.2-SNAPSHOT + 2.30.0 jar Google Cloud Bigtable https://github.com/googleapis/java-bigtable @@ -12,11 +12,11 @@ com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 - 2.29.2-SNAPSHOT + 2.30.0 google-cloud-bigtable @@ -47,14 +47,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java index b4c4578ab293..60fb95c75cef 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java @@ -20,6 +20,6 @@ @InternalApi("For internal use only") public final class Version { // {x-version-update-start:google-cloud-bigtable:current} - public static String VERSION = "2.29.2-SNAPSHOT"; + public static String VERSION = "2.30.0"; // {x-version-update-end} } diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index bab7a4f0faa8..2c9af872ff9c 100644 --- a/grpc-google-cloud-bigtable-admin-v2/pom.xml +++ b/grpc-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index 662111b76aca..5f0ad3cb46d9 100644 --- a/grpc-google-cloud-bigtable-v2/pom.xml +++ b/grpc-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/pom.xml b/pom.xml index ffb8d0203e5c..d1ceadc6425f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 2.29.2-SNAPSHOT + 2.30.0 Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable @@ -153,27 +153,27 @@ com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 com.google.cloud google-cloud-bigtable - 2.29.2-SNAPSHOT + 2.30.0 diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index f65375310262..60044ab20a7f 100644 --- a/proto-google-cloud-bigtable-admin-v2/pom.xml +++ b/proto-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.29.2-SNAPSHOT + 2.30.0 proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index d1e6028468a6..b59ed7b8353e 100644 --- a/proto-google-cloud-bigtable-v2/pom.xml +++ b/proto-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.29.2-SNAPSHOT + 2.30.0 proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.29.2-SNAPSHOT + 2.30.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.29.2-SNAPSHOT + 2.30.0 pom import diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 9496f6a1e919..7bd6ab705d38 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-bigtable - 2.29.2-SNAPSHOT + 2.30.0 diff --git a/test-proxy/pom.xml b/test-proxy/pom.xml index fcb0ee68e5c8..c3c154927773 100644 --- a/test-proxy/pom.xml +++ b/test-proxy/pom.xml @@ -12,11 +12,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.29.2-SNAPSHOT + 2.30.0 - 2.29.2-SNAPSHOT + 2.30.0 diff --git a/versions.txt b/versions.txt index 41a499a55dd0..d46263f5514a 100644 --- a/versions.txt +++ b/versions.txt @@ -1,10 +1,10 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:2.29.1:2.29.2-SNAPSHOT -grpc-google-cloud-bigtable-admin-v2:2.29.1:2.29.2-SNAPSHOT -grpc-google-cloud-bigtable-v2:2.29.1:2.29.2-SNAPSHOT -proto-google-cloud-bigtable-admin-v2:2.29.1:2.29.2-SNAPSHOT -proto-google-cloud-bigtable-v2:2.29.1:2.29.2-SNAPSHOT -google-cloud-bigtable-emulator:0.166.1:0.166.2-SNAPSHOT -google-cloud-bigtable-emulator-core:0.166.1:0.166.2-SNAPSHOT +google-cloud-bigtable:2.30.0:2.30.0 +grpc-google-cloud-bigtable-admin-v2:2.30.0:2.30.0 +grpc-google-cloud-bigtable-v2:2.30.0:2.30.0 +proto-google-cloud-bigtable-admin-v2:2.30.0:2.30.0 +proto-google-cloud-bigtable-v2:2.30.0:2.30.0 +google-cloud-bigtable-emulator:0.167.0:0.167.0 +google-cloud-bigtable-emulator-core:0.167.0:0.167.0