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