diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml index c1be8aca55..545f190487 100644 --- a/.github/workflows/hermetic_library_generation.yaml +++ b/.github/workflows/hermetic_library_generation.yaml @@ -37,7 +37,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} - - uses: googleapis/sdk-platform-java/.github/scripts@v2.51.1 + - uses: googleapis/sdk-platform-java/.github/scripts@v2.53.0 if: env.SHOULD_RUN == 'true' with: base_ref: ${{ github.base_ref }} diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml index 7934b0f0ce..7b65a594d5 100644 --- a/.github/workflows/unmanaged_dependency_check.yaml +++ b/.github/workflows/unmanaged_dependency_check.yaml @@ -14,6 +14,6 @@ jobs: shell: bash run: .kokoro/build.sh - name: Unmanaged dependency check - uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.42.0 + uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.43.0 with: bom-path: google-cloud-bigtable-bom/pom.xml diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg index a9a25217f1..c07693a21f 100644 --- a/.kokoro/presubmit/graalvm-native-17.cfg +++ b/.kokoro/presubmit/graalvm-native-17.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.42.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.43.0" } env_vars: { diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg index 07eb909b02..ba00bbfebd 100644 --- a/.kokoro/presubmit/graalvm-native.cfg +++ b/.kokoro/presubmit/graalvm-native.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.42.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.43.0" } env_vars: { diff --git a/CHANGELOG.md b/CHANGELOG.md index c8d72c58e7..5af512f8ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [2.52.0](https://github.com/googleapis/java-bigtable/compare/v2.51.2...v2.52.0) (2025-02-14) + + +### Features + +* Automated backups are supported in the admin client ([#2472](https://github.com/googleapis/java-bigtable/issues/2472)) ([48633e6](https://github.com/googleapis/java-bigtable/commit/48633e6160593c84f42a02f348ec18c3d1521ef0)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.53.0 ([47ca299](https://github.com/googleapis/java-bigtable/commit/47ca29931699cae87d640185ad31e4b61c0bb212)) +* Extend timeouts for check consistency ([47ca299](https://github.com/googleapis/java-bigtable/commit/47ca29931699cae87d640185ad31e4b61c0bb212)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.52.0 ([#2490](https://github.com/googleapis/java-bigtable/issues/2490)) ([ca25d4e](https://github.com/googleapis/java-bigtable/commit/ca25d4eb6c7333d1a77d2c99b1bb95c2a2f710c1)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#2481](https://github.com/googleapis/java-bigtable/issues/2481)) ([deb1f79](https://github.com/googleapis/java-bigtable/commit/deb1f79c6efa223f6c2f780724ec9386f44f018a)) + ## [2.51.2](https://github.com/googleapis/java-bigtable/compare/v2.51.1...v2.51.2) (2025-02-03) diff --git a/README.md b/README.md index b216beddb3..ed4709da40 100644 --- a/README.md +++ b/README.md @@ -56,13 +56,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.51.2' +implementation 'com.google.cloud:google-cloud-bigtable:2.52.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "2.51.2" +libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "2.52.0" ``` ## Authentication @@ -543,7 +543,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.51.2 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-bigtable/2.52.0 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles diff --git a/generation_config.yaml b/generation_config.yaml index d150ade6ee..693cd2cb2d 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,5 +1,5 @@ -gapic_generator_version: 2.51.0 -googleapis_commitish: f4eff5440fd07389f820d22d2a55690c6390dc6d +gapic_generator_version: 2.53.0 +googleapis_commitish: 8c6501214a223ef031eeb81e558abddf34cc046c libraries_bom_version: 26.51.0 template_excludes: - .gitignore diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index fd8b38e94f..6518273172 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom com.google.cloud sdk-platform-java-config - 3.42.0 + 3.43.0 @@ -63,37 +63,37 @@ com.google.cloud google-cloud-bigtable - 2.51.2 + 2.52.0 com.google.cloud google-cloud-bigtable-emulator - 0.188.2 + 0.189.0 com.google.cloud google-cloud-bigtable-emulator-core - 0.188.2 + 0.189.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index e5509700f3..165a43c591 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -7,13 +7,13 @@ com.google.cloud sdk-platform-java-config - 3.42.0 + 3.43.0 com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom @@ -67,7 +67,7 @@ com.google.cloud gapic-libraries-bom - 1.51.0 + 1.52.0 pom import diff --git a/google-cloud-bigtable-emulator-core/pom.xml b/google-cloud-bigtable-emulator-core/pom.xml index 0426e57db1..008736f4cc 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.51.2 + 2.52.0 google-cloud-bigtable-emulator-core - 0.188.2 + 0.189.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 0ceb162ccf..995b52cf17 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.188.2 + 0.189.0 Google Cloud Java - Bigtable Emulator https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 scm:git:git@github.com:googleapis/java-bigtable.git @@ -81,14 +81,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import @@ -99,7 +99,7 @@ com.google.cloud google-cloud-bigtable-emulator-core - 0.188.2 + 0.189.0 diff --git a/google-cloud-bigtable-emulator/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-bigtable-emulator/native-image.properties b/google-cloud-bigtable-emulator/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-bigtable-emulator/native-image.properties new file mode 100644 index 0000000000..0c5258dc2c --- /dev/null +++ b/google-cloud-bigtable-emulator/src/test/resources/META-INF/native-image/com.google.cloud/google-cloud-bigtable-emulator/native-image.properties @@ -0,0 +1,3 @@ +Args=--initialize-at-build-time=org.junit.runners.model.FrameworkField \ +--initialize-at-build-time=org.junit.runner.RunWith \ +--initialize-at-build-time=java.lang.annotation.Annotation diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 5dd45e0e9f..cb06a34761 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-bigtable - 2.51.2 + 2.52.0 jar Google Cloud Bigtable https://github.com/googleapis/java-bigtable @@ -12,11 +12,11 @@ com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 - 2.51.2 + 2.52.0 google-cloud-bigtable @@ -52,14 +52,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.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 4d015e7ebe..9700779ea0 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.51.2"; + public static String VERSION = "2.52.0"; // {x-version-update-end} } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/AppProfile.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/AppProfile.java index 2507ef4dd3..2d41c74847 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/AppProfile.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/AppProfile.java @@ -274,7 +274,7 @@ public static MultiClusterRoutingPolicy of(Set clusterIds) { public static MultiClusterRoutingPolicy withRowAffinity() { return new MultiClusterRoutingPolicy( MultiClusterRoutingUseAny.newBuilder() - .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()) + .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()) .build()); } @@ -294,7 +294,7 @@ public static MultiClusterRoutingPolicy withRowAffinity(Set clusterIds) return new MultiClusterRoutingPolicy( MultiClusterRoutingUseAny.newBuilder() .addAllClusterIds(clusterIds) - .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()) + .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()) .build()); } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequest.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequest.java index c7a0580fde..88e6b99c22 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequest.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequest.java @@ -100,14 +100,14 @@ public CreateTableRequest addFamily( return this; } - /** Adds split at the specified key to the configuration */ + /** Adds split at the specified key to the configuration. */ public CreateTableRequest addSplit(ByteString key) { Preconditions.checkNotNull(key); requestBuilder.addInitialSplitsBuilder().setKey(key); return this; } - /** Add change stream retention period between 1 day and 7 days */ + /** Add change stream retention period between 1 day and 7 days. */ public CreateTableRequest addChangeStreamRetention(Duration retention) { Preconditions.checkNotNull(retention); requestBuilder @@ -129,6 +129,26 @@ public CreateTableRequest setDeletionProtection(boolean deletionProtection) { return this; } + /** Set an automated backup policy for the table. */ + public CreateTableRequest setAutomatedBackup(Duration retentionPeriod, Duration frequency) { + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy policy = + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder() + .setSeconds(retentionPeriod.getSeconds()) + .setNanos(retentionPeriod.getNano()) + .build()) + .setFrequency( + com.google.protobuf.Duration.newBuilder() + .setSeconds(frequency.getSeconds()) + .setNanos(frequency.getNano()) + .build()) + .build(); + + requestBuilder.getTableBuilder().setAutomatedBackupPolicy(policy); + return this; + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/Table.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/Table.java index 979e01cb8c..8fbdbf0172 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/Table.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/Table.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.google.cloud.bigtable.admin.v2.models; import com.google.api.core.InternalApi; @@ -58,7 +59,7 @@ public enum ReplicationState { /** * The table is fully created and ready for use after a restore, and is being optimized for - * performance. When optimizations are complete, the table will transition to `READY` state. + * performance. When optimizations are complete, the table will transition to`READY` state. */ READY_OPTIMIZING( com.google.bigtable.admin.v2.Table.ClusterState.ReplicationState.READY_OPTIMIZING), @@ -99,6 +100,39 @@ public com.google.bigtable.admin.v2.Table.ClusterState.ReplicationState toProto( } } + public static class AutomatedBackupPolicy { + private final com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy proto; + + /** + * Wraps the protobuf. This method is considered an internal implementation detail and not meant + * to be used by applications. + */ + @InternalApi + public static AutomatedBackupPolicy fromProto( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy proto) { + return new AutomatedBackupPolicy(proto); + } + + AutomatedBackupPolicy(@Nonnull com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy proto) { + this.proto = proto; + } + + /** + * Creates the request protobuf. This method is considered an internal implementation detail and + * not meant to be used by applications. + */ + @InternalApi + public com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy toProto() { + return proto; + } + + /** Returns policy config contents as a string. */ + public String viewConfig() { + AutomatedBackupPolicy config = fromProto(proto); + return config.proto.getAllFields().toString(); + } + } + private final String id; private final String instanceId; private final Map replicationStatesByClusterId; @@ -106,6 +140,7 @@ public com.google.bigtable.admin.v2.Table.ClusterState.ReplicationState toProto( private final Duration changeStreamRetention; private final boolean deletionProtection; + private static AutomatedBackupPolicy automatedBackupPolicy; @InternalApi public static Table fromProto(@Nonnull com.google.bigtable.admin.v2.Table proto) { @@ -132,12 +167,19 @@ public static Table fromProto(@Nonnull com.google.bigtable.admin.v2.Table proto) proto.getChangeStreamConfig().getRetentionPeriod().getNanos()); } + if (proto.hasAutomatedBackupPolicy()) { + automatedBackupPolicy = AutomatedBackupPolicy.fromProto(proto.getAutomatedBackupPolicy()); + } else { + automatedBackupPolicy = null; + } + return new Table( TableName.parse(proto.getName()), replicationStates.build(), columnFamilies.build(), changeStreamConfig, - proto.getDeletionProtection()); + proto.getDeletionProtection(), + automatedBackupPolicy); } private Table( @@ -145,13 +187,15 @@ private Table( Map replicationStatesByClusterId, List columnFamilies, Duration changeStreamRetention, - boolean deletionProtection) { + boolean deletionProtection, + AutomatedBackupPolicy automatedBackupPolicy) { this.instanceId = tableName.getInstance(); this.id = tableName.getTable(); this.replicationStatesByClusterId = replicationStatesByClusterId; this.columnFamilies = columnFamilies; this.changeStreamRetention = changeStreamRetention; this.deletionProtection = deletionProtection; + Table.automatedBackupPolicy = automatedBackupPolicy; } /** Gets the table's id. */ @@ -181,6 +225,16 @@ public boolean isDeletionProtected() { return deletionProtection; } + /** Returns whether this table has automated backups enabled. */ + public boolean isAutomatedBackupEnabled() { + return automatedBackupPolicy == null ? false : true; + } + + /** Returns the automated backup policy config. */ + public AutomatedBackupPolicy getAutomatedBackupPolicy() { + return automatedBackupPolicy; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -195,7 +249,8 @@ public boolean equals(Object o) { && Objects.equal(replicationStatesByClusterId, table.replicationStatesByClusterId) && Objects.equal(columnFamilies, table.columnFamilies) && Objects.equal(changeStreamRetention, table.changeStreamRetention) - && Objects.equal(deletionProtection, table.deletionProtection); + && Objects.equal(deletionProtection, table.deletionProtection) + && Objects.equal(automatedBackupPolicy, Table.automatedBackupPolicy); } @Override @@ -206,6 +261,7 @@ public int hashCode() { replicationStatesByClusterId, columnFamilies, changeStreamRetention, - deletionProtection); + deletionProtection, + automatedBackupPolicy); } } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequest.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequest.java index 4e78051864..4d65d14e16 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequest.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequest.java @@ -39,6 +39,10 @@ public class UpdateTableRequest { private final com.google.bigtable.admin.v2.UpdateTableRequest.Builder requestBuilder = com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder(); + private final com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.Builder + automatedPolicyBuilder = + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder(); + public static UpdateTableRequest of(String tableId) { return new UpdateTableRequest(tableId); } @@ -69,7 +73,7 @@ public UpdateTableRequest addChangeStreamRetention(Duration retention) { return this; } - /** Disable change stream for table */ + /** Disable change stream for table. */ public UpdateTableRequest disableChangeStreamRetention() { return addChangeStreamRetention(Duration.ZERO); } @@ -81,6 +85,66 @@ public UpdateTableRequest setDeletionProtection(boolean deletionProtection) { return this; } + /** Disables table automated backup policy. */ + public UpdateTableRequest disableAutomatedBackup() { + requestBuilder.getTableBuilder().setAutomatedBackupPolicy(automatedPolicyBuilder.build()); + requestBuilder.getUpdateMaskBuilder().addPaths("automated_backup_policy"); + return this; + } + + /** Set an automated backup policy for the table. */ + public UpdateTableRequest setAutomatedBackup(Duration retentionPeriod, Duration frequency) { + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy policy = + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder() + .setSeconds(retentionPeriod.getSeconds()) + .setNanos(retentionPeriod.getNano()) + .build()) + .setFrequency( + com.google.protobuf.Duration.newBuilder() + .setSeconds(frequency.getSeconds()) + .setNanos(frequency.getNano()) + .build()) + .build(); + + requestBuilder.getTableBuilder().setAutomatedBackupPolicy(policy); + requestBuilder.getUpdateMaskBuilder().addPaths("automated_backup_policy"); + return this; + } + + /** Updates table automated backup policy retention period. */ + public UpdateTableRequest setAutomatedBackupRetentionPeriod(Duration retention) { + requestBuilder + .getTableBuilder() + .setAutomatedBackupPolicy( + automatedPolicyBuilder + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder() + .setSeconds(retention.getSeconds()) + .setNanos(retention.getNano()) + .build()) + .build()); + requestBuilder.getUpdateMaskBuilder().addPaths("automated_backup_policy.retention_period"); + return this; + } + + /** Updates table automated backup policy frequency. */ + public UpdateTableRequest setAutomatedBackupFrequency(Duration frequency) { + requestBuilder + .getTableBuilder() + .setAutomatedBackupPolicy( + automatedPolicyBuilder + .setFrequency( + com.google.protobuf.Duration.newBuilder() + .setSeconds(frequency.getSeconds()) + .setNanos(frequency.getNano()) + .build()) + .build()); + requestBuilder.getUpdateMaskBuilder().addPaths("automated_backup_policy.frequency"); + return this; + } + @InternalApi public com.google.bigtable.admin.v2.UpdateTableRequest toProto( String projectId, String instanceId) { diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStubSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStubSettings.java index bb8e8e093f..3951f17823 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStubSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStubSettings.java @@ -654,14 +654,14 @@ public static class Builder ImmutableMap.Builder> definitions = ImmutableMap.builder(); definitions.put( - "no_retry_4_codes", ImmutableSet.copyOf(Lists.newArrayList())); + "no_retry_5_codes", ImmutableSet.copyOf(Lists.newArrayList())); definitions.put( - "retry_policy_5_codes", + "retry_policy_6_codes", ImmutableSet.copyOf( Lists.newArrayList( StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); definitions.put( - "no_retry_6_codes", ImmutableSet.copyOf(Lists.newArrayList())); + "no_retry_7_codes", ImmutableSet.copyOf(Lists.newArrayList())); definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.newArrayList())); RETRYABLE_CODE_DEFINITIONS = definitions.build(); } @@ -678,7 +678,7 @@ public static class Builder .setMaxRpcTimeoutDuration(Duration.ofMillis(300000L)) .setTotalTimeoutDuration(Duration.ofMillis(300000L)) .build(); - definitions.put("no_retry_4_params", settings); + definitions.put("no_retry_5_params", settings); settings = RetrySettings.newBuilder() .setInitialRetryDelayDuration(Duration.ofMillis(1000L)) @@ -689,7 +689,7 @@ public static class Builder .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) .setTotalTimeoutDuration(Duration.ofMillis(60000L)) .build(); - definitions.put("retry_policy_5_params", settings); + definitions.put("retry_policy_6_params", settings); settings = RetrySettings.newBuilder() .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) @@ -697,7 +697,7 @@ public static class Builder .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) .setTotalTimeoutDuration(Duration.ofMillis(60000L)) .build(); - definitions.put("no_retry_6_params", settings); + definitions.put("no_retry_7_params", settings); settings = RetrySettings.newBuilder().setRpcTimeoutMultiplier(1.0).build(); definitions.put("no_retry_params", settings); RETRY_PARAM_DEFINITIONS = definitions.build(); @@ -837,53 +837,53 @@ private static Builder createDefault() { private static Builder initDefaults(Builder builder) { builder .createInstanceSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_4_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_4_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_5_params")); builder .getInstanceSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .listInstancesSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .updateInstanceSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .partialUpdateInstanceSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .deleteInstanceSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .createClusterSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .getClusterSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .listClustersSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .updateClusterSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .partialUpdateClusterSettings() @@ -892,61 +892,61 @@ private static Builder initDefaults(Builder builder) { builder .deleteClusterSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .createAppProfileSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .getAppProfileSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .listAppProfilesSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .updateAppProfileSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .deleteAppProfileSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .getIamPolicySettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .setIamPolicySettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")); builder .testIamPermissionsSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .listHotTabletsSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")); builder .createInstanceOperationSettings() .setInitialCallSettings( UnaryCallSettings .newUnaryCallSettingsBuilder() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_4_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_4_params")) + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_5_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_5_params")) .build()) .setResponseTransformer( ProtoOperationTransformers.ResponseTransformer.create(Instance.class)) @@ -969,8 +969,8 @@ private static Builder initDefaults(Builder builder) { .setInitialCallSettings( UnaryCallSettings .newUnaryCallSettingsBuilder() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")) + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")) .build()) .setResponseTransformer( ProtoOperationTransformers.ResponseTransformer.create(Instance.class)) @@ -993,8 +993,8 @@ private static Builder initDefaults(Builder builder) { .setInitialCallSettings( UnaryCallSettings .newUnaryCallSettingsBuilder() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_6_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_6_params")) + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_7_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_7_params")) .build()) .setResponseTransformer( ProtoOperationTransformers.ResponseTransformer.create(Cluster.class)) @@ -1016,8 +1016,8 @@ private static Builder initDefaults(Builder builder) { .updateClusterOperationSettings() .setInitialCallSettings( UnaryCallSettings.newUnaryCallSettingsBuilder() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")) + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")) .build()) .setResponseTransformer( ProtoOperationTransformers.ResponseTransformer.create(Cluster.class)) @@ -1065,8 +1065,8 @@ private static Builder initDefaults(Builder builder) { .setInitialCallSettings( UnaryCallSettings .newUnaryCallSettingsBuilder() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_5_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_5_params")) + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_6_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_6_params")) .build()) .setResponseTransformer( ProtoOperationTransformers.ResponseTransformer.create(AppProfile.class)) diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java index f1ce011e50..8bf9713b73 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java @@ -908,7 +908,12 @@ public static class Builder Lists.newArrayList( StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); definitions.put( - "no_retry_3_codes", ImmutableSet.copyOf(Lists.newArrayList())); + "no_retry_4_codes", ImmutableSet.copyOf(Lists.newArrayList())); + definitions.put( + "retry_policy_3_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); definitions.put( "no_retry_1_codes", ImmutableSet.copyOf(Lists.newArrayList())); RETRYABLE_CODE_DEFINITIONS = definitions.build(); @@ -947,7 +952,18 @@ public static class Builder .setMaxRpcTimeoutDuration(Duration.ofMillis(3600000L)) .setTotalTimeoutDuration(Duration.ofMillis(3600000L)) .build(); - definitions.put("no_retry_3_params", settings); + definitions.put("no_retry_4_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(1000L)) + .setRetryDelayMultiplier(2.0) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(3600000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(3600000L)) + .setTotalTimeoutDuration(Duration.ofMillis(3600000L)) + .build(); + definitions.put("retry_policy_3_params", settings); settings = RetrySettings.newBuilder() .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) @@ -1202,8 +1218,8 @@ private static Builder initDefaults(Builder builder) { builder .dropRowRangeSettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_3_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_3_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_4_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_4_params")); builder .generateConsistencyTokenSettings() @@ -1212,8 +1228,8 @@ private static Builder initDefaults(Builder builder) { builder .checkConsistencySettings() - .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_2_codes")) - .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_2_params")); + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_3_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_3_params")); builder .snapshotTableSettings() diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableStreamResumptionStrategy.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableStreamResumptionStrategy.java new file mode 100644 index 0000000000..d10a10a24f --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableStreamResumptionStrategy.java @@ -0,0 +1,27 @@ +/* + * Copyright 2025 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 com.google.api.core.InternalApi; +import com.google.api.gax.retrying.StreamResumptionStrategy; + +@InternalApi +/** Expand StreamResumptionStrategy to also process the error. */ +public abstract class BigtableStreamResumptionStrategy + implements StreamResumptionStrategy { + + public abstract Throwable processError(Throwable throwable); +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/readrows/ReadRowsResumptionStrategy.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/readrows/ReadRowsResumptionStrategy.java index 2db46c0c29..68af76c34e 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/readrows/ReadRowsResumptionStrategy.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/readrows/ReadRowsResumptionStrategy.java @@ -22,20 +22,21 @@ import com.google.bigtable.v2.RowSet; import com.google.cloud.bigtable.data.v2.internal.RowSetUtil; import com.google.cloud.bigtable.data.v2.models.RowAdapter; +import com.google.cloud.bigtable.data.v2.stub.BigtableStreamResumptionStrategy; import com.google.common.base.Preconditions; import com.google.protobuf.ByteString; /** - * An implementation of a {@link StreamResumptionStrategy} for merged rows. This class tracks the - * last complete row seen and upon retry can build a request to resume the stream from where it left - * off. + * An implementation of a {@link BigtableStreamResumptionStrategy} for merged rows. This class + * tracks the last complete row seen and upon retry can build a request to resume the stream from + * where it left off. * * This class is considered an internal implementation detail and not meant to be used by * applications. */ @InternalApi public class ReadRowsResumptionStrategy - implements StreamResumptionStrategy { + extends BigtableStreamResumptionStrategy { private final RowAdapter rowAdapter; private ByteString lastKey = ByteString.EMPTY; // Number of rows processed excluding Marker row. @@ -69,6 +70,12 @@ public RowT processResponse(RowT response) { return response; } + @Override + public Throwable processError(Throwable throwable) { + // Noop + return throwable; + } + /** * {@inheritDoc} * diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java index 793cf2e91c..7ec29f8b77 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java @@ -25,6 +25,7 @@ import com.google.api.gax.rpc.ServerStreamingCallable; import com.google.api.gax.rpc.StateCheckingResponseObserver; import com.google.api.gax.rpc.StreamController; +import com.google.cloud.bigtable.data.v2.stub.BigtableStreamResumptionStrategy; import com.google.common.base.Preconditions; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; @@ -345,6 +346,10 @@ private void onAttemptError(Throwable throwable) { localCancellationCause = cancellationCause; } + if (resumptionStrategy instanceof BigtableStreamResumptionStrategy) { + throwable = ((BigtableStreamResumptionStrategy) resumptionStrategy).processError(throwable); + } + if (localCancellationCause != null) { // Take special care to preserve the cancellation's stack trace. innerAttemptFuture.setException(localCancellationCause); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java index 388631d93a..7c5eb8f927 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java @@ -1053,7 +1053,8 @@ public void testCreateAppProfileAddRowAffinity() { .newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1064,7 +1065,8 @@ public void testCreateAppProfileAddRowAffinity() { com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) @@ -1100,7 +1102,8 @@ public void testCreateAppProfileAddRowAffinityAddMultipleClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1113,7 +1116,8 @@ public void testCreateAppProfileAddRowAffinityAddMultipleClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) @@ -1150,7 +1154,8 @@ public void testCreateAppProfileAddRowAffinityAddSetOfClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1163,7 +1168,8 @@ public void testCreateAppProfileAddRowAffinityAddSetOfClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java index d6e6e410e8..c0ad53b674 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java @@ -303,7 +303,8 @@ public void testFromProtoWithRowAffinityNoClusterGroup() { com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()) + .RowAffinity.newBuilder() + .build()) .build()) .setEtag("my-etag") .build()); @@ -329,7 +330,8 @@ public void testFromProtoWithRowAffinityClusterGroup() { .addAllClusterIds(ImmutableList.of("cluster-id-1", "cluster-id-2")) .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()) + .RowAffinity.newBuilder() + .build()) .build()) .setEtag("my-etag") .build()); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java index 7e9cc81541..32f882b30f 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java @@ -111,7 +111,7 @@ public void testRowAffinity() { assertThat(wrapper.toProto("my-project").getAppProfile().getMultiClusterRoutingUseAny()) .isEqualTo( MultiClusterRoutingUseAny.newBuilder() - .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()) + .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()) .build()); } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java index 35dae7aeeb..cbc85c9d32 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java @@ -49,7 +49,8 @@ public void testToProto() { .addSplit(splitKey) .addSplit(secondSplitKey) .addChangeStreamRetention(Duration.ofHours(24)) - .setDeletionProtection(true); + .setDeletionProtection(true) + .setAutomatedBackup(Duration.ofHours(24), Duration.ofHours(24)); com.google.bigtable.admin.v2.CreateTableRequest requestProto = com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() @@ -72,6 +73,17 @@ public void testToProto() { .setRetentionPeriod( com.google.protobuf.Duration.newBuilder().setSeconds(86400)) .build()) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder() + .setSeconds(86400) + .setNanos(0)) + .setFrequency( + com.google.protobuf.Duration.newBuilder() + .setSeconds(86400) + .setNanos(0)) + .build()) .setDeletionProtection(true)) .setParent(NameUtil.formatInstanceName(PROJECT_ID, INSTANCE_ID)) .addInitialSplits( @@ -136,6 +148,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family", GCRULES.maxAge(100, TimeUnit.HOURS)) + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(100)) .addSplit(splitKey); assertThat(request) @@ -143,6 +156,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family", GCRULES.maxAge(Duration.ofHours(100))) + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(100)) .addSplit(splitKey)); assertThat(request) @@ -150,6 +164,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family") + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(10)) .addSplit(splitKey)); } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java index 20f9c8e514..2a364a9c9b 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java @@ -16,6 +16,7 @@ package com.google.cloud.bigtable.admin.v2.models; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import com.google.bigtable.admin.v2.ColumnFamily; import com.google.bigtable.admin.v2.GcRule; @@ -67,6 +68,13 @@ public void testFromProto() { .setSeconds(1) .setNanos(99))) .build()) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(1).setNanos(99)) + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(1).setNanos(99)) + .build()) .setDeletionProtection(true) .build(); @@ -79,6 +87,18 @@ public void testFromProto() { "cluster1", Table.ReplicationState.READY, "cluster2", Table.ReplicationState.INITIALIZING); assertThat(result.getColumnFamilies()).hasSize(3); + assertThat(result.isAutomatedBackupEnabled()).isTrue(); + assertEquals( + result.getAutomatedBackupPolicy().viewConfig(), + "{google.bigtable.admin.v2.Table.AutomatedBackupPolicy.retention_period=seconds: 1\n" + + // + "nanos: 99\n" + + // + ", google.bigtable.admin.v2.Table.AutomatedBackupPolicy.frequency=seconds: 1\n" + + // + "nanos: 99\n" + + // + "}"); assertThat(result.isDeletionProtected()).isTrue(); for (Entry entry : proto.getColumnFamiliesMap().entrySet()) { diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java index 603943c533..d8c673d00a 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java @@ -172,7 +172,7 @@ public void testUpdateRowAffinity() { .setMultiClusterRoutingUseAny( MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( - MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()))) + MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()))) .setUpdateMask(FieldMask.newBuilder().addPaths("multi_cluster_routing_use_any")) .build()); } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java index 24fe80187c..059999210d 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java @@ -113,4 +113,90 @@ public void testDisableDeletionProtection() { assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); } + + @Test + public void testDisableAutomatedBackup() { + UpdateTableRequest request = UpdateTableRequest.of(TABLE_ID).disableAutomatedBackup(); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .build())) + .setUpdateMask(FieldMask.newBuilder().addPaths("automated_backup_policy").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackup() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID) + .setAutomatedBackup(Duration.ofHours(24), Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask(FieldMask.newBuilder().addPaths("automated_backup_policy").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackupRetentionPeriod() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID).setAutomatedBackupRetentionPeriod(Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask( + FieldMask.newBuilder().addPaths("automated_backup_policy.retention_period").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackupFrequency() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID).setAutomatedBackupFrequency(Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask( + FieldMask.newBuilder().addPaths("automated_backup_policy.frequency").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } } diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index 8ffba4e922..a7af10a335 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.51.2 + 2.52.0 grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index 5f448cdc38..eb95a38d80 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.51.2 + 2.52.0 grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/pom.xml b/pom.xml index 0360cd2529..27d11773ad 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 2.51.2 + 2.52.0 Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud sdk-platform-java-config - 3.42.0 + 3.43.0 @@ -153,27 +153,27 @@ com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.cloud google-cloud-bigtable - 2.51.2 + 2.52.0 diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index a072c55382..8800619982 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.51.2 + 2.52.0 proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index bf40ff1956..04f3706f1b 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.51.2 + 2.52.0 proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 7eda5989f0..9feaf0ea25 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-bigtable - 2.51.2 + 2.52.0 diff --git a/test-proxy/pom.xml b/test-proxy/pom.xml index 3558019b66..2ea28b5ed2 100644 --- a/test-proxy/pom.xml +++ b/test-proxy/pom.xml @@ -12,11 +12,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.51.2 + 2.52.0 - 2.51.2 + 2.52.0 diff --git a/versions.txt b/versions.txt index 96bc988538..03ec37199f 100644 --- a/versions.txt +++ b/versions.txt @@ -1,10 +1,10 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:2.51.2:2.51.2 -grpc-google-cloud-bigtable-admin-v2:2.51.2:2.51.2 -grpc-google-cloud-bigtable-v2:2.51.2:2.51.2 -proto-google-cloud-bigtable-admin-v2:2.51.2:2.51.2 -proto-google-cloud-bigtable-v2:2.51.2:2.51.2 -google-cloud-bigtable-emulator:0.188.2:0.188.2 -google-cloud-bigtable-emulator-core:0.188.2:0.188.2 +google-cloud-bigtable:2.52.0:2.52.0 +grpc-google-cloud-bigtable-admin-v2:2.52.0:2.52.0 +grpc-google-cloud-bigtable-v2:2.52.0:2.52.0 +proto-google-cloud-bigtable-admin-v2:2.52.0:2.52.0 +proto-google-cloud-bigtable-v2:2.52.0:2.52.0 +google-cloud-bigtable-emulator:0.189.0:0.189.0 +google-cloud-bigtable-emulator-core:0.189.0:0.189.0
This class is considered an internal implementation detail and not meant to be used by * applications. */ @InternalApi public class ReadRowsResumptionStrategy - implements StreamResumptionStrategy { + extends BigtableStreamResumptionStrategy { private final RowAdapter rowAdapter; private ByteString lastKey = ByteString.EMPTY; // Number of rows processed excluding Marker row. @@ -69,6 +70,12 @@ public RowT processResponse(RowT response) { return response; } + @Override + public Throwable processError(Throwable throwable) { + // Noop + return throwable; + } + /** * {@inheritDoc} * diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java index 793cf2e91c..7ec29f8b77 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/gaxx/retrying/ServerStreamingAttemptCallable.java @@ -25,6 +25,7 @@ import com.google.api.gax.rpc.ServerStreamingCallable; import com.google.api.gax.rpc.StateCheckingResponseObserver; import com.google.api.gax.rpc.StreamController; +import com.google.cloud.bigtable.data.v2.stub.BigtableStreamResumptionStrategy; import com.google.common.base.Preconditions; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; @@ -345,6 +346,10 @@ private void onAttemptError(Throwable throwable) { localCancellationCause = cancellationCause; } + if (resumptionStrategy instanceof BigtableStreamResumptionStrategy) { + throwable = ((BigtableStreamResumptionStrategy) resumptionStrategy).processError(throwable); + } + if (localCancellationCause != null) { // Take special care to preserve the cancellation's stack trace. innerAttemptFuture.setException(localCancellationCause); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java index 388631d93a..7c5eb8f927 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientTests.java @@ -1053,7 +1053,8 @@ public void testCreateAppProfileAddRowAffinity() { .newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1064,7 +1065,8 @@ public void testCreateAppProfileAddRowAffinity() { com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) @@ -1100,7 +1102,8 @@ public void testCreateAppProfileAddRowAffinityAddMultipleClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1113,7 +1116,8 @@ public void testCreateAppProfileAddRowAffinityAddMultipleClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) @@ -1150,7 +1154,8 @@ public void testCreateAppProfileAddRowAffinityAddSetOfClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()))) + .RowAffinity.newBuilder() + .build()))) .build(); com.google.bigtable.admin.v2.AppProfile expectedResponse = @@ -1163,7 +1168,8 @@ public void testCreateAppProfileAddRowAffinityAddSetOfClusterIds() { .addClusterIds("cluster-id-2") .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance())) + .RowAffinity.newBuilder() + .build())) .build(); Mockito.when(mockCreateAppProfileCallable.futureCall(expectedRequest)) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java index d6e6e410e8..c0ad53b674 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/AppProfileTest.java @@ -303,7 +303,8 @@ public void testFromProtoWithRowAffinityNoClusterGroup() { com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()) + .RowAffinity.newBuilder() + .build()) .build()) .setEtag("my-etag") .build()); @@ -329,7 +330,8 @@ public void testFromProtoWithRowAffinityClusterGroup() { .addAllClusterIds(ImmutableList.of("cluster-id-1", "cluster-id-2")) .setRowAffinity( com.google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny - .RowAffinity.getDefaultInstance()) + .RowAffinity.newBuilder() + .build()) .build()) .setEtag("my-etag") .build()); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java index 7e9cc81541..32f882b30f 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateAppProfileRequestTest.java @@ -111,7 +111,7 @@ public void testRowAffinity() { assertThat(wrapper.toProto("my-project").getAppProfile().getMultiClusterRoutingUseAny()) .isEqualTo( MultiClusterRoutingUseAny.newBuilder() - .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()) + .setRowAffinity(MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()) .build()); } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java index 35dae7aeeb..cbc85c9d32 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/CreateTableRequestTest.java @@ -49,7 +49,8 @@ public void testToProto() { .addSplit(splitKey) .addSplit(secondSplitKey) .addChangeStreamRetention(Duration.ofHours(24)) - .setDeletionProtection(true); + .setDeletionProtection(true) + .setAutomatedBackup(Duration.ofHours(24), Duration.ofHours(24)); com.google.bigtable.admin.v2.CreateTableRequest requestProto = com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() @@ -72,6 +73,17 @@ public void testToProto() { .setRetentionPeriod( com.google.protobuf.Duration.newBuilder().setSeconds(86400)) .build()) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder() + .setSeconds(86400) + .setNanos(0)) + .setFrequency( + com.google.protobuf.Duration.newBuilder() + .setSeconds(86400) + .setNanos(0)) + .build()) .setDeletionProtection(true)) .setParent(NameUtil.formatInstanceName(PROJECT_ID, INSTANCE_ID)) .addInitialSplits( @@ -136,6 +148,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family", GCRULES.maxAge(100, TimeUnit.HOURS)) + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(100)) .addSplit(splitKey); assertThat(request) @@ -143,6 +156,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family", GCRULES.maxAge(Duration.ofHours(100))) + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(100)) .addSplit(splitKey)); assertThat(request) @@ -150,6 +164,7 @@ public void testEquality() { CreateTableRequest.of(TABLE_ID) .addFamily("family-id") .addFamily("another-family") + .setAutomatedBackup(Duration.ofHours(100), Duration.ofHours(10)) .addSplit(splitKey)); } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java index 20f9c8e514..2a364a9c9b 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/TableTest.java @@ -16,6 +16,7 @@ package com.google.cloud.bigtable.admin.v2.models; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import com.google.bigtable.admin.v2.ColumnFamily; import com.google.bigtable.admin.v2.GcRule; @@ -67,6 +68,13 @@ public void testFromProto() { .setSeconds(1) .setNanos(99))) .build()) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(1).setNanos(99)) + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(1).setNanos(99)) + .build()) .setDeletionProtection(true) .build(); @@ -79,6 +87,18 @@ public void testFromProto() { "cluster1", Table.ReplicationState.READY, "cluster2", Table.ReplicationState.INITIALIZING); assertThat(result.getColumnFamilies()).hasSize(3); + assertThat(result.isAutomatedBackupEnabled()).isTrue(); + assertEquals( + result.getAutomatedBackupPolicy().viewConfig(), + "{google.bigtable.admin.v2.Table.AutomatedBackupPolicy.retention_period=seconds: 1\n" + + // + "nanos: 99\n" + + // + ", google.bigtable.admin.v2.Table.AutomatedBackupPolicy.frequency=seconds: 1\n" + + // + "nanos: 99\n" + + // + "}"); assertThat(result.isDeletionProtected()).isTrue(); for (Entry entry : proto.getColumnFamiliesMap().entrySet()) { diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java index 603943c533..d8c673d00a 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateAppProfileRequestTest.java @@ -172,7 +172,7 @@ public void testUpdateRowAffinity() { .setMultiClusterRoutingUseAny( MultiClusterRoutingUseAny.newBuilder() .setRowAffinity( - MultiClusterRoutingUseAny.RowAffinity.getDefaultInstance()))) + MultiClusterRoutingUseAny.RowAffinity.newBuilder().build()))) .setUpdateMask(FieldMask.newBuilder().addPaths("multi_cluster_routing_use_any")) .build()); } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java index 24fe80187c..059999210d 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/UpdateTableRequestTest.java @@ -113,4 +113,90 @@ public void testDisableDeletionProtection() { assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); } + + @Test + public void testDisableAutomatedBackup() { + UpdateTableRequest request = UpdateTableRequest.of(TABLE_ID).disableAutomatedBackup(); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .build())) + .setUpdateMask(FieldMask.newBuilder().addPaths("automated_backup_policy").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackup() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID) + .setAutomatedBackup(Duration.ofHours(24), Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask(FieldMask.newBuilder().addPaths("automated_backup_policy").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackupRetentionPeriod() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID).setAutomatedBackupRetentionPeriod(Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setRetentionPeriod( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask( + FieldMask.newBuilder().addPaths("automated_backup_policy.retention_period").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + + @Test + public void testSetAutomatedBackupFrequency() { + UpdateTableRequest request = + UpdateTableRequest.of(TABLE_ID).setAutomatedBackupFrequency(Duration.ofHours(24)); + + com.google.bigtable.admin.v2.UpdateTableRequest requestProto = + com.google.bigtable.admin.v2.UpdateTableRequest.newBuilder() + .setTable( + Table.newBuilder() + .setName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) + .setAutomatedBackupPolicy( + com.google.bigtable.admin.v2.Table.AutomatedBackupPolicy.newBuilder() + .setFrequency( + com.google.protobuf.Duration.newBuilder().setSeconds(86400)) + .build())) + .setUpdateMask( + FieldMask.newBuilder().addPaths("automated_backup_policy.frequency").build()) + .build(); + + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } } diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index 8ffba4e922..a7af10a335 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.51.2 + 2.52.0 grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index 5f448cdc38..eb95a38d80 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.51.2 + 2.52.0 grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/pom.xml b/pom.xml index 0360cd2529..27d11773ad 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 2.51.2 + 2.52.0 Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud sdk-platform-java-config - 3.42.0 + 3.43.0 @@ -153,27 +153,27 @@ com.google.api.grpc proto-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 2.51.2 + 2.52.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 2.51.2 + 2.52.0 com.google.cloud google-cloud-bigtable - 2.51.2 + 2.52.0 diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index a072c55382..8800619982 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.51.2 + 2.52.0 proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index bf40ff1956..04f3706f1b 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.51.2 + 2.52.0 proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 2.51.2 + 2.52.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 2.51.2 + 2.52.0 pom import com.google.cloud google-cloud-bigtable-bom - 2.51.2 + 2.52.0 pom import diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 7eda5989f0..9feaf0ea25 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-bigtable - 2.51.2 + 2.52.0 diff --git a/test-proxy/pom.xml b/test-proxy/pom.xml index 3558019b66..2ea28b5ed2 100644 --- a/test-proxy/pom.xml +++ b/test-proxy/pom.xml @@ -12,11 +12,11 @@ google-cloud-bigtable-parent com.google.cloud - 2.51.2 + 2.52.0 - 2.51.2 + 2.52.0 diff --git a/versions.txt b/versions.txt index 96bc988538..03ec37199f 100644 --- a/versions.txt +++ b/versions.txt @@ -1,10 +1,10 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:2.51.2:2.51.2 -grpc-google-cloud-bigtable-admin-v2:2.51.2:2.51.2 -grpc-google-cloud-bigtable-v2:2.51.2:2.51.2 -proto-google-cloud-bigtable-admin-v2:2.51.2:2.51.2 -proto-google-cloud-bigtable-v2:2.51.2:2.51.2 -google-cloud-bigtable-emulator:0.188.2:0.188.2 -google-cloud-bigtable-emulator-core:0.188.2:0.188.2 +google-cloud-bigtable:2.52.0:2.52.0 +grpc-google-cloud-bigtable-admin-v2:2.52.0:2.52.0 +grpc-google-cloud-bigtable-v2:2.52.0:2.52.0 +proto-google-cloud-bigtable-admin-v2:2.52.0:2.52.0 +proto-google-cloud-bigtable-v2:2.52.0:2.52.0 +google-cloud-bigtable-emulator:0.189.0:0.189.0 +google-cloud-bigtable-emulator-core:0.189.0:0.189.0