diff --git a/CHANGELOG.md b/CHANGELOG.md index 2377b7460e..f640e9ee45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.24.0](https://www.github.com/googleapis/java-bigtable/compare/v1.23.2...v1.24.0) (2021-04-30) + + +### Features + +* allow restore backup to different instance ([#515](https://www.github.com/googleapis/java-bigtable/issues/515)) ([8a5e60e](https://www.github.com/googleapis/java-bigtable/commit/8a5e60e8ed116d36810cc4059539228768726912)), closes [#789](https://www.github.com/googleapis/java-bigtable/issues/789) + ### [1.23.2](https://www.github.com/googleapis/java-bigtable/compare/v1.23.1...v1.23.2) (2021-04-23) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..8b58ae9c01 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +To report a security issue, please use [g.co/vulnz](https://g.co/vulnz). + +The Google Security Team will respond within 5 working days of your report on g.co/vulnz. + +We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue. diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index 40764a31ac..24394f95ee 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 - 1.23.2 + 1.24.0 pom com.google.cloud @@ -72,32 +72,32 @@ com.google.cloud google-cloud-bigtable - 1.23.2 + 1.24.0 com.google.cloud google-cloud-bigtable-emulator - 0.132.2 + 0.133.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 1.23.2 + 1.24.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 1.23.2 + 1.24.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 1.23.2 + 1.24.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 1.23.2 + 1.24.0 diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index 1ced8f045a..f13908c63f 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -12,7 +12,7 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom diff --git a/google-cloud-bigtable-emulator/pom.xml b/google-cloud-bigtable-emulator/pom.xml index 2d4c9d4974..a9d94b24b5 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.132.2 + 0.133.0 Google Cloud Java - Bigtable Emulator https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 scm:git:git@github.com:googleapis/java-bigtable.git @@ -80,14 +80,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index b2b88d886f..62e2882463 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-bigtable - 1.23.2 + 1.24.0 jar Google Cloud Bigtable https://github.com/googleapis/java-bigtable @@ -12,11 +12,11 @@ com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 - 1.23.2 + 1.24.0 google-cloud-bigtable @@ -39,14 +39,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequest.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequest.java index fa47ba582e..0547ebae01 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequest.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequest.java @@ -20,24 +20,46 @@ import com.google.common.base.Objects; import com.google.common.base.Preconditions; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** Fluent wrapper for {@link com.google.bigtable.admin.v2.RestoreTableRequest} */ public final class RestoreTableRequest { private final com.google.bigtable.admin.v2.RestoreTableRequest.Builder requestBuilder = com.google.bigtable.admin.v2.RestoreTableRequest.newBuilder(); - private final String backupId; - private final String clusterId; + private final String sourceBackupId; + private final String sourceClusterId; + private final String sourceInstanceId; - public static RestoreTableRequest of(String clusterId, String backupId) { - RestoreTableRequest request = new RestoreTableRequest(clusterId, backupId); + /** + * Create a {@link RestoreTableRequest} object. It assumes the source backup locates in the same + * instance as the destination table. To restore a table from a backup in another instance, use + * {@link #of(String, String, String) of} method. + */ + public static RestoreTableRequest of(String sourceClusterId, String sourceBackupId) { + RestoreTableRequest request = new RestoreTableRequest(null, sourceClusterId, sourceBackupId); return request; } - private RestoreTableRequest(String clusterId, String backupId) { - Preconditions.checkNotNull(clusterId); - Preconditions.checkNotNull(backupId); - this.backupId = backupId; - this.clusterId = clusterId; + /** + * Create a {@link RestoreTableRequest} object. The source backup could locate in a the same or a + * different instance. + */ + public static RestoreTableRequest of( + String sourceInstanceId, String sourceClusterId, String sourceBackupId) { + RestoreTableRequest request = + new RestoreTableRequest(sourceInstanceId, sourceClusterId, sourceBackupId); + return request; + } + + private RestoreTableRequest( + @Nullable String sourceInstanceId, + @Nonnull String sourceClusterId, + @Nonnull String sourceBackupId) { + Preconditions.checkNotNull(sourceClusterId); + Preconditions.checkNotNull(sourceBackupId); + this.sourceBackupId = sourceBackupId; + this.sourceInstanceId = sourceInstanceId; + this.sourceClusterId = sourceClusterId; } public RestoreTableRequest setTableId(String tableId) { @@ -56,13 +78,15 @@ public boolean equals(Object o) { } RestoreTableRequest that = (RestoreTableRequest) o; return Objects.equal(requestBuilder.getTableId(), that.requestBuilder.getTableId()) - && Objects.equal(clusterId, that.clusterId) - && Objects.equal(backupId, that.backupId); + && Objects.equal(sourceInstanceId, that.sourceInstanceId) + && Objects.equal(sourceClusterId, that.sourceClusterId) + && Objects.equal(sourceBackupId, that.sourceBackupId); } @Override public int hashCode() { - return Objects.hashCode(requestBuilder.getTableId(), clusterId, backupId); + return Objects.hashCode( + requestBuilder.getTableId(), sourceInstanceId, sourceClusterId, sourceBackupId); } @InternalApi @@ -73,7 +97,12 @@ public com.google.bigtable.admin.v2.RestoreTableRequest toProto( return requestBuilder .setParent(NameUtil.formatInstanceName(projectId, instanceId)) - .setBackup(NameUtil.formatBackupName(projectId, instanceId, clusterId, backupId)) + .setBackup( + NameUtil.formatBackupName( + projectId, + sourceInstanceId == null ? instanceId : sourceInstanceId, + sourceClusterId, + sourceBackupId)) .build(); } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableBackupIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableBackupIT.java index 439a1219f8..94bbfa1ab1 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableBackupIT.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/it/BigtableBackupIT.java @@ -103,26 +103,9 @@ public static void createClient() prefix = String.format("020%d", System.currentTimeMillis()); tableAdmin = testEnvRule.env().getTableAdminClientForInstance(targetInstance); - - testTable = - tableAdmin.createTable( - CreateTableRequest.of(generateId(TEST_TABLE_SUFFIX)).addFamily("cf1")); - - // Populate test data. dataClient = testEnvRule.env().getDataClientForInstance(targetInstance); - byte[] rowBytes = new byte[1024]; - Random random = new Random(); - random.nextBytes(rowBytes); - List> futures = Lists.newArrayList(); - for (int i = 0; i < 10; i++) { - ApiFuture future = - dataClient.mutateRowAsync( - RowMutation.create(testTable.getId(), "test-row-" + i) - .setCell("cf1", ByteString.EMPTY, ByteString.copyFrom(rowBytes))); - futures.add(future); - } - ApiFutures.allAsList(futures).get(3, TimeUnit.MINUTES); + testTable = createAndPopulateTestTable(tableAdmin, dataClient); } @AfterClass @@ -266,7 +249,7 @@ public void deleteBackupTest() throws InterruptedException { @Test public void restoreTableTest() throws InterruptedException, ExecutionException { String backupId = generateId("restore-" + TEST_BACKUP_SUFFIX); - String tableId = generateId("restored-table"); + String restoredTableId = generateId("restored-table"); tableAdmin.createBackup(createBackupRequest(backupId)); // Wait 2 minutes so that the RestoreTable API will trigger an optimize restored @@ -274,24 +257,81 @@ public void restoreTableTest() throws InterruptedException, ExecutionException { Thread.sleep(120 * 1000); try { - RestoreTableRequest req = RestoreTableRequest.of(targetCluster, backupId).setTableId(tableId); + RestoreTableRequest req = + RestoreTableRequest.of(targetCluster, backupId).setTableId(restoredTableId); RestoredTableResult result = tableAdmin.restoreTable(req); assertWithMessage("Incorrect restored table id") .that(result.getTable().getId()) - .isEqualTo(tableId); + .isEqualTo(restoredTableId); if (result.getOptimizeRestoredTableOperationToken() != null) { // The assertion might be missing if the test is running against a HDD cluster or an // optimization is not necessary. tableAdmin.awaitOptimizeRestoredTable(result.getOptimizeRestoredTableOperationToken()); - Table restoredTable = tableAdmin.getTable(tableId); + Table restoredTable = tableAdmin.getTable(restoredTableId); assertWithMessage("Incorrect restored table id") .that(restoredTable.getId()) - .isEqualTo(tableId); + .isEqualTo(restoredTableId); } } finally { tableAdmin.deleteBackup(targetCluster, backupId); - tableAdmin.deleteTable(tableId); + tableAdmin.deleteTable(restoredTableId); + } + } + + @Test + public void crossInstanceRestoreTest() + throws InterruptedException, IOException, ExecutionException, TimeoutException { + String backupId = generateId("cross-" + TEST_BACKUP_SUFFIX); + String restoredTableId = generateId("restored-table-2"); + + // Set up a new instance to test cross-instance restore. The source backup is stored in this + // instance. + String sourceInstance = + AbstractTestEnv.TEST_INSTANCE_PREFIX + "backup-" + Instant.now().getEpochSecond(); + String sourceCluster = AbstractTestEnv.TEST_CLUSTER_PREFIX + Instant.now().getEpochSecond(); + instanceAdmin.createInstance( + CreateInstanceRequest.of(sourceInstance) + .addCluster(sourceCluster, testEnvRule.env().getSecondaryZone(), 3, StorageType.SSD) + .setDisplayName("backups-source-test-instance") + .addLabel("state", "readytodelete") + .setType(Type.PRODUCTION)); + BigtableTableAdminClient sourceTableAdmin = + testEnvRule.env().getTableAdminClientForInstance(sourceInstance); + Table sourceTable = + createAndPopulateTestTable( + sourceTableAdmin, testEnvRule.env().getDataClientForInstance(sourceInstance)); + sourceTableAdmin.createBackup( + CreateBackupRequest.of(sourceCluster, backupId) + .setSourceTableId(sourceTable.getId()) + .setExpireTime(Instant.now().plus(Duration.ofHours(6)))); + + // Wait 2 minutes so that the RestoreTable API will trigger an optimize restored + // table operation. + Thread.sleep(120 * 1000); + + try { + RestoreTableRequest req = + RestoreTableRequest.of(sourceInstance, sourceCluster, backupId) + .setTableId(restoredTableId); + RestoredTableResult result = tableAdmin.restoreTable(req); + assertWithMessage("Incorrect restored table id") + .that(result.getTable().getId()) + .isEqualTo(restoredTableId); + assertWithMessage("Incorrect instance id") + .that(result.getTable().getInstanceId()) + .isEqualTo(targetInstance); + + // The assertion might be missing if the test is running against a HDD cluster or an + // optimization is not necessary. + assertWithMessage("Empty OptimizeRestoredTable token") + .that(result.getOptimizeRestoredTableOperationToken()) + .isNotNull(); + tableAdmin.awaitOptimizeRestoredTable(result.getOptimizeRestoredTableOperationToken()); + tableAdmin.getTable(restoredTableId); + } finally { + sourceTableAdmin.deleteBackup(sourceCluster, backupId); + instanceAdmin.deleteInstance(sourceInstance); } } @@ -327,8 +367,8 @@ public void backupIamTest() throws InterruptedException { } } - private CreateBackupRequest createBackupRequest(String backupName) { - return CreateBackupRequest.of(targetCluster, backupName) + private CreateBackupRequest createBackupRequest(String backupId) { + return CreateBackupRequest.of(targetCluster, backupId) .setSourceTableId(testTable.getId()) .setExpireTime(Instant.now().plus(Duration.ofDays(15))); } @@ -336,4 +376,28 @@ private CreateBackupRequest createBackupRequest(String backupName) { private static String generateId(String name) { return prefix + "-" + name; } + + private static Table createAndPopulateTestTable( + BigtableTableAdminClient tableAdmin, BigtableDataClient dataClient) + throws InterruptedException, ExecutionException, TimeoutException { + Table testTable = + tableAdmin.createTable( + CreateTableRequest.of(generateId(TEST_TABLE_SUFFIX)).addFamily("cf1")); + + // Populate test data. + byte[] rowBytes = new byte[1024]; + Random random = new Random(); + random.nextBytes(rowBytes); + + List> futures = Lists.newArrayList(); + for (int i = 0; i < 10; i++) { + ApiFuture future = + dataClient.mutateRowAsync( + RowMutation.create(testTable.getId(), "test-row-" + i) + .setCell("cf1", ByteString.EMPTY, ByteString.copyFrom(rowBytes))); + futures.add(future); + } + ApiFutures.allAsList(futures).get(3, TimeUnit.MINUTES); + return testTable; + } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequestTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequestTest.java index 3ed165042c..232902f585 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequestTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/models/RestoreTableRequestTest.java @@ -30,6 +30,7 @@ public class RestoreTableRequestTest { private static final String PROJECT_ID = "my-project"; private static final String INSTANCE_ID = "my-instance"; private static final String CLUSTER_ID = "my-cluster"; + private static final String SOURCE_INSTANCE_ID = "source-instance-id"; @Test public void testToProto() { @@ -45,6 +46,21 @@ public void testToProto() { assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); } + @Test + public void testToProtoCrossInstance() { + RestoreTableRequest request = + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID); + + com.google.bigtable.admin.v2.RestoreTableRequest requestProto = + com.google.bigtable.admin.v2.RestoreTableRequest.newBuilder() + .setParent(NameUtil.formatInstanceName(PROJECT_ID, INSTANCE_ID)) + .setBackup( + NameUtil.formatBackupName(PROJECT_ID, SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID)) + .setTableId(TABLE_ID) + .build(); + assertThat(request.toProto(PROJECT_ID, INSTANCE_ID)).isEqualTo(requestProto); + } + @Test public void testEquality() { RestoreTableRequest request = @@ -56,6 +72,22 @@ public void testEquality() { .isNotEqualTo(RestoreTableRequest.of(CLUSTER_ID, BACKUP_ID).setTableId("another-table")); } + @Test + public void testEqualityCrossInstance() { + RestoreTableRequest request = + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID); + + assertThat(request) + .isEqualTo( + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID)); + assertThat(request) + .isNotEqualTo(RestoreTableRequest.of(CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID)); + assertThat(request) + .isNotEqualTo( + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID) + .setTableId("another-table")); + } + @Test public void testHashCode() { RestoreTableRequest request = @@ -66,4 +98,23 @@ public void testHashCode() { .isNotEqualTo( RestoreTableRequest.of(CLUSTER_ID, BACKUP_ID).setTableId("another-table").hashCode()); } + + @Test + public void testHashCodeCrossInstance() { + RestoreTableRequest request = + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID); + assertThat(request.hashCode()) + .isEqualTo( + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID) + .setTableId(TABLE_ID) + .hashCode()); + assertThat(request.hashCode()) + .isNotEqualTo( + RestoreTableRequest.of(CLUSTER_ID, BACKUP_ID).setTableId(TABLE_ID).hashCode()); + assertThat(request.hashCode()) + .isNotEqualTo( + RestoreTableRequest.of(SOURCE_INSTANCE_ID, CLUSTER_ID, BACKUP_ID) + .setTableId("another-table") + .hashCode()); + } } diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index 61d7db2f0c..f98e32a91e 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 - 1.23.2 + 1.24.0 grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index bf78d3f959..64117825d9 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 - 1.23.2 + 1.24.0 grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/pom.xml b/pom.xml index 0e71aa3a55..9ba6059b3f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 1.23.2 + 1.24.0 Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index f4d9db56c2..6e5614579d 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 - 1.23.2 + 1.24.0 proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index ef2f457b31..3ee74ae8ab 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 - 1.23.2 + 1.24.0 proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 1.23.2 + 1.24.0 @@ -18,14 +18,14 @@ com.google.cloud google-cloud-bigtable-deps-bom - 1.23.2 + 1.24.0 pom import com.google.cloud google-cloud-bigtable-bom - 1.23.2 + 1.24.0 pom import diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index b8f4fdecb8..de27513b5a 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 - 1.23.1 + 1.23.2 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 7a2ce8eee9..c31da14890 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-bigtable - 1.23.2 + 1.24.0 diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 453a365746..b16ea48c0c 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 20.1.0 + 20.2.0 pom import diff --git a/versions.txt b/versions.txt index 948d63489f..78e11ad7ee 100644 --- a/versions.txt +++ b/versions.txt @@ -1,9 +1,9 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:1.23.2:1.23.2 -grpc-google-cloud-bigtable-admin-v2:1.23.2:1.23.2 -grpc-google-cloud-bigtable-v2:1.23.2:1.23.2 -proto-google-cloud-bigtable-admin-v2:1.23.2:1.23.2 -proto-google-cloud-bigtable-v2:1.23.2:1.23.2 -google-cloud-bigtable-emulator:0.132.2:0.132.2 +google-cloud-bigtable:1.24.0:1.24.0 +grpc-google-cloud-bigtable-admin-v2:1.24.0:1.24.0 +grpc-google-cloud-bigtable-v2:1.24.0:1.24.0 +proto-google-cloud-bigtable-admin-v2:1.24.0:1.24.0 +proto-google-cloud-bigtable-v2:1.24.0:1.24.0 +google-cloud-bigtable-emulator:0.133.0:0.133.0