diff --git a/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java b/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java index 02a568f615..5635933039 100644 --- a/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java +++ b/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java @@ -22,8 +22,8 @@ import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.ServerStream; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import com.google.cloud.bigtable.data.v2.BigtableDataClient; import com.google.cloud.bigtable.data.v2.BigtableDataSettings; import com.google.cloud.bigtable.data.v2.models.Filters.Filter; @@ -63,7 +63,7 @@ public class HelloWorld { private final String instanceId; private final String tableId; private final BigtableDataClient dataClient; - private final BigtableTableAdminClient adminClient; + private final BigtableTableAdminClientV2 adminClient; public static void main(String[] args) throws Exception { @@ -92,14 +92,11 @@ public HelloWorld(String projectId, String instanceId, String tableId) throws IO dataClient = BigtableDataClient.create(settings); // Creates the settings to configure a bigtable table admin client. - BigtableTableAdminSettings adminSettings = - BigtableTableAdminSettings.newBuilder() - .setProjectId(projectId) - .setInstanceId(instanceId) - .build(); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); // Creates a bigtable table admin client. - adminClient = BigtableTableAdminClient.create(adminSettings); + adminClient = BigtableTableAdminClientV2.create(adminSettings); // [END bigtable_hw_connect] } @@ -123,7 +120,17 @@ public void close() { public void createTable() { // [START bigtable_hw_create_table] // Checks if table exists, creates table if does not exist. - if (!adminClient.exists(tableId)) { + boolean exists = false; + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build()); + exists = true; + } catch (NotFoundException e) { + // ignore + } + if (!exists) { System.out.println("Creating table: " + tableId); String parent = "projects/" + projectId + "/instances/" + instanceId; com.google.bigtable.admin.v2.CreateTableRequest request = @@ -137,7 +144,7 @@ public void createTable() { com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) .build()) .build(); - adminClient.getBaseClient().createTable(request); + adminClient.createTable(request); System.out.printf("Table %s created successfully%n", tableId); } // [END bigtable_hw_create_table] @@ -270,7 +277,7 @@ public void deleteTable() { try { String tableName = "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId; - adminClient.getBaseClient().deleteTable(tableName); + adminClient.deleteTable(tableName); System.out.printf("Table %s deleted successfully%n", tableId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent table: " + e.getMessage()); diff --git a/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java b/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java index 07ae1fe007..fc3befbc3f 100644 --- a/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java +++ b/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java @@ -29,8 +29,8 @@ import com.google.bigtable.admin.v2.ListInstancesRequest; import com.google.bigtable.admin.v2.ListInstancesResponse; import com.google.bigtable.admin.v2.StorageType; -import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminSettings; +import com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClientV2; import java.io.IOException; import java.util.Map; @@ -56,7 +56,7 @@ public class InstanceAdminExample { private final String projectId; private final String clusterId; private final String instanceId; - private final BigtableInstanceAdminClient adminClient; + private final BigtableInstanceAdminClientV2 adminClient; public static void main(String[] args) throws IOException { @@ -78,11 +78,11 @@ public InstanceAdminExample(String projectId, String instanceId, String clusterI this.clusterId = clusterId; // Creates the settings to configure a bigtable instance admin client. - BigtableInstanceAdminSettings instanceAdminSettings = - BigtableInstanceAdminSettings.newBuilder().setProjectId(projectId).build(); + BaseBigtableInstanceAdminSettings instanceAdminSettings = + BaseBigtableInstanceAdminSettings.newBuilder().build(); // Creates a bigtable instance admin client. - adminClient = BigtableInstanceAdminClient.create(instanceAdminSettings); + adminClient = BigtableInstanceAdminClientV2.create(instanceAdminSettings); } public void run() { @@ -104,7 +104,17 @@ void close() { /** Demonstrates how to create a Production instance within a provided project. */ public void createProdInstance() { // Checks if instance exists, creates instance if does not exists. - if (!adminClient.exists(instanceId)) { + boolean exists = false; + try { + adminClient.getInstance( + com.google.bigtable.admin.v2.GetInstanceRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId) + .build()); + exists = true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + // ignore + } + if (!exists) { System.out.println("Instance does not exist, creating a PRODUCTION instance"); // [START bigtable_create_prod_instance] // Creates a Production Instance with the ID "ssd-instance", @@ -131,7 +141,7 @@ public void createProdInstance() { .build(); // Creates a production instance with the given request. try { - Instance instance = adminClient.getBaseClient().createInstanceAsync(request).get(); + Instance instance = adminClient.createInstanceAsync(request).get(); System.out.printf("PRODUCTION type instance %s created successfully%n", instance.getName()); } catch (Exception e) { System.err.println("Failed to create instance: " + e.getMessage()); @@ -148,7 +158,7 @@ public void listInstances() { try { String parent = "projects/" + projectId; ListInstancesRequest request = ListInstancesRequest.newBuilder().setParent(parent).build(); - ListInstancesResponse response = adminClient.getBaseClient().listInstances(request); + ListInstancesResponse response = adminClient.listInstances(request); for (Instance instance : response.getInstancesList()) { System.out.println(instance.getName()); } @@ -166,7 +176,7 @@ public Instance getInstance() { try { String name = "projects/" + projectId + "/instances/" + instanceId; GetInstanceRequest request = GetInstanceRequest.newBuilder().setName(name).build(); - instance = adminClient.getBaseClient().getInstance(request); + instance = adminClient.getInstance(request); System.out.println("Instance ID: " + instance.getName()); System.out.println("Display Name: " + instance.getDisplayName()); System.out.print("Labels: "); @@ -190,7 +200,7 @@ public void listClusters() { try { String parent = "projects/" + projectId + "/instances/" + instanceId; ListClustersRequest request = ListClustersRequest.newBuilder().setParent(parent).build(); - ListClustersResponse response = adminClient.getBaseClient().listClusters(request); + ListClustersResponse response = adminClient.listClusters(request); for (Cluster cluster : response.getClustersList()) { System.out.println(cluster.getName()); } @@ -207,7 +217,7 @@ public void deleteInstance() { try { String name = "projects/" + projectId + "/instances/" + instanceId; DeleteInstanceRequest request = DeleteInstanceRequest.newBuilder().setName(name).build(); - adminClient.getBaseClient().deleteInstance(request); + adminClient.deleteInstance(request); System.out.println("Instance deleted: " + instanceId); } catch (NotFoundException e) { System.err.println("Failed to delete non-existent instance: " + e.getMessage()); @@ -233,7 +243,7 @@ public void addCluster() { .setClusterId(CLUSTER) .setCluster(clusterObj) .build(); - adminClient.getBaseClient().createClusterAsync(request).get(); + adminClient.createClusterAsync(request).get(); System.out.printf("Cluster: %s created successfully%n", CLUSTER); } catch (Exception e) { System.err.println("Failed to add cluster: " + e.getMessage()); @@ -248,7 +258,7 @@ public void deleteCluster() { try { String name = "projects/" + projectId + "/instances/" + instanceId + "/clusters/" + CLUSTER; DeleteClusterRequest request = DeleteClusterRequest.newBuilder().setName(name).build(); - adminClient.getBaseClient().deleteCluster(request); + adminClient.deleteCluster(request); System.out.printf("Cluster: %s deleted successfully%n", CLUSTER); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent cluster: " + e.getMessage()); diff --git a/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java b/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java index 009fef3910..0e6d554611 100644 --- a/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java +++ b/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java @@ -24,8 +24,8 @@ import com.google.bigtable.admin.v2.ListTablesRequest; import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest; import com.google.bigtable.admin.v2.Table; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import com.google.cloud.bigtable.admin.v2.models.GcRuleBuilder; import java.io.IOException; import java.time.Duration; @@ -62,7 +62,7 @@ public class TableAdminExample { private final String projectId; private final String instanceId; private final String tableId; - private final BigtableTableAdminClient adminClient; + private final BigtableTableAdminClientV2 adminClient; public static void main(String[] args) throws IOException { @@ -83,14 +83,11 @@ public TableAdminExample(String projectId, String instanceId, String tableId) th this.tableId = tableId; // Creates the settings to configure a bigtable table admin client. - BigtableTableAdminSettings adminSettings = - BigtableTableAdminSettings.newBuilder() - .setProjectId(projectId) - .setInstanceId(instanceId) - .build(); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); // Creates a bigtable table admin client. - adminClient = BigtableTableAdminClient.create(adminSettings); + adminClient = BigtableTableAdminClientV2.create(adminSettings); } public void run() { @@ -119,7 +116,17 @@ void close() { public void createTable() { // [START bigtable_create_table] // Checks if table exists, creates table if does not exist. - if (!adminClient.exists(tableId)) { + boolean exists = false; + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build()); + exists = true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + // ignore + } + if (!exists) { System.out.println("Table does not exist, creating table: " + tableId); String parent = "projects/" + projectId + "/instances/" + instanceId; CreateTableRequest createTableRequest = @@ -131,7 +138,7 @@ public void createTable() { .putColumnFamilies("cf", ColumnFamily.getDefaultInstance()) .build()) .build(); - Table table = adminClient.getBaseClient().createTable(createTableRequest); + Table table = adminClient.createTable(createTableRequest); System.out.printf("Table: %s created successfully%n", table.getName()); } // [END bigtable_create_table] @@ -145,7 +152,7 @@ public void listAllTables() { try { String parent = "projects/" + projectId + "/instances/" + instanceId; ListTablesRequest request = ListTablesRequest.newBuilder().setParent(parent).build(); - for (Table table : adminClient.getBaseClient().listTables(request).iterateAll()) { + for (Table table : adminClient.listTables(request).iterateAll()) { System.out.println(table.getName()); } } catch (NotFoundException e) { @@ -162,7 +169,7 @@ public void getTableMeta() { try { String tableName = "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId; - Table table = adminClient.getBaseClient().getTable(tableName); + Table table = adminClient.getTable(tableName); System.out.println("Table: " + table.getName()); for (java.util.Map.Entry entry : table.getColumnFamiliesMap().entrySet()) { @@ -198,7 +205,7 @@ public void addFamilyWithMaxAgeRule() { .setId(COLUMN_FAMILY_1) .setCreate(ColumnFamily.newBuilder().setGcRule(maxAgeRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.println("Created column family: " + COLUMN_FAMILY_1); } catch (AlreadyExistsException e) { System.err.println( @@ -229,7 +236,7 @@ public void addFamilyWithMaxVersionsRule() { .setId(COLUMN_FAMILY_2) .setCreate(ColumnFamily.newBuilder().setGcRule(versionRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.println("Created column family: " + COLUMN_FAMILY_2); } catch (AlreadyExistsException e) { System.err.println( @@ -264,7 +271,7 @@ public void addFamilyWithUnionRule() { .setId(COLUMN_FAMILY_3) .setCreate(ColumnFamily.newBuilder().setGcRule(unionRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.println("Created column family: " + COLUMN_FAMILY_3); } catch (AlreadyExistsException e) { System.err.println( @@ -298,7 +305,7 @@ public void addFamilyWithIntersectionRule() { .setId(COLUMN_FAMILY_4) .setCreate(ColumnFamily.newBuilder().setGcRule(intersectionRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.println("Created column family: " + COLUMN_FAMILY_4); } catch (AlreadyExistsException e) { System.err.println( @@ -335,7 +342,7 @@ public void addFamilyWithNestedRule() { .setId(COLUMN_FAMILY_5) .setCreate(ColumnFamily.newBuilder().setGcRule(unionRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.println("Created column family: " + COLUMN_FAMILY_5); } catch (AlreadyExistsException e) { System.err.println( @@ -352,7 +359,7 @@ public void listColumnFamilies() { try { String tableName = "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId; - Table table = adminClient.getBaseClient().getTable(tableName); + Table table = adminClient.getTable(tableName); for (java.util.Map.Entry entry : table.getColumnFamiliesMap().entrySet()) { System.out.printf( @@ -383,7 +390,7 @@ public void modifyColumnFamilyRule() { .setId(COLUMN_FAMILY_1) .setUpdate(ColumnFamily.newBuilder().setGcRule(versionRule))) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.printf("Column family %s GC rule updated%n", COLUMN_FAMILY_1); } catch (NotFoundException e) { System.err.println("Failed to modify a non-existent column family: " + e.getMessage()); @@ -398,7 +405,7 @@ public void printModifiedColumnFamily() { try { String tableName = "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId; - Table table = adminClient.getBaseClient().getTable(tableName); + Table table = adminClient.getTable(tableName); if (table.containsColumnFamilies(COLUMN_FAMILY_1)) { System.out.printf( "Column family: %s%nGC Rule: %s%n", @@ -426,7 +433,7 @@ public void deleteColumnFamily() { .setId(COLUMN_FAMILY_2) .setDrop(true)) .build(); - adminClient.getBaseClient().modifyColumnFamilies(request); + adminClient.modifyColumnFamilies(request); System.out.printf("Column family %s deleted successfully%n", COLUMN_FAMILY_2); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent column family: " + e.getMessage()); @@ -442,7 +449,7 @@ public void deleteTable() { try { String tableName = "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId; - adminClient.getBaseClient().deleteTable(tableName); + adminClient.deleteTable(tableName); System.out.printf("Table: %s deleted successfully%n", tableId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent table: " + e.getMessage()); diff --git a/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java b/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java index ead4d6c3fd..0af0384af4 100644 --- a/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java +++ b/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java @@ -21,9 +21,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import com.google.cloud.bigtable.data.v2.BigtableDataClient; import com.google.cloud.bigtable.data.v2.BigtableDataSettings; import com.google.cloud.bigtable.data.v2.models.TableId; @@ -44,7 +43,7 @@ public class HelloWorldTest extends BigtableBaseTest { private static final String TABLE_PREFIX = "table"; private static String tableId; private static BigtableDataClient dataClient; - private static BigtableTableAdminClient adminClient; + private static BigtableTableAdminClientV2 adminClient; private HelloWorld helloWorld; @BeforeClass @@ -53,12 +52,21 @@ public static void beforeClass() throws IOException { BigtableDataSettings settings = BigtableDataSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId).build(); dataClient = BigtableDataClient.create(settings); - BigtableTableAdminSettings adminSettings = - BigtableTableAdminSettings.newBuilder() - .setProjectId(projectId) - .setInstanceId(instanceId) - .build(); - adminClient = BigtableTableAdminClient.create(adminSettings); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + adminClient = BigtableTableAdminClientV2.create(adminSettings); + } + + private static boolean exists(String tableId) { + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -72,13 +80,24 @@ public static void afterClass() throws Exception { public void setup() throws IOException { tableId = generateTableId(); helloWorld = new HelloWorld(projectId, instanceId, tableId); - adminClient.createTable(CreateTableRequest.of(tableId).addFamily("cf1")); + com.google.bigtable.admin.v2.CreateTableRequest request = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(tableId) + .setTable( + com.google.bigtable.admin.v2.Table.newBuilder() + .putColumnFamilies( + "cf1", com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .build()) + .build(); + adminClient.createTable(request); } @After public void teardown() { - if (adminClient.exists(tableId)) { - adminClient.deleteTable(tableId); + if (exists(tableId)) { + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); } helloWorld.close(); } @@ -89,11 +108,11 @@ public void testCreateAndDeleteTable() throws IOException { String testTable = generateTableId(); HelloWorld testHelloWorld = new HelloWorld(projectId, instanceId, testTable); testHelloWorld.createTable(); - assertTrue(adminClient.exists(testTable)); + assertTrue(exists(testTable)); // Deletes a table. testHelloWorld.deleteTable(); - assertTrue(!adminClient.exists(testTable)); + assertTrue(!exists(testTable)); testHelloWorld.close(); } @@ -127,7 +146,12 @@ private String generateTableId() { private static void garbageCollect() { Pattern timestampPattern = Pattern.compile(TABLE_PREFIX + "-([0-9a-f]+)-([0-9a-f]+)"); - for (String tableId : adminClient.listTables()) { + com.google.bigtable.admin.v2.ListTablesRequest request = + com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .build(); + for (com.google.bigtable.admin.v2.Table table : adminClient.listTables(request).iterateAll()) { + String tableId = table.getName().substring(table.getName().lastIndexOf("/") + 1); Matcher matcher = timestampPattern.matcher(tableId); if (!matcher.matches()) { continue; @@ -138,7 +162,7 @@ private static void garbageCollect() { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } } diff --git a/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java b/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java index acab4fca74..6c44aa890f 100644 --- a/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java +++ b/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java @@ -21,11 +21,12 @@ import static org.junit.Assert.assertTrue; import com.google.api.gax.rpc.NotFoundException; -import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminSettings; -import com.google.cloud.bigtable.admin.v2.models.CreateInstanceRequest; -import com.google.cloud.bigtable.admin.v2.models.Instance.Type; -import com.google.cloud.bigtable.admin.v2.models.StorageType; +import com.google.bigtable.admin.v2.Cluster; +import com.google.bigtable.admin.v2.CreateInstanceRequest; +import com.google.bigtable.admin.v2.Instance; +import com.google.bigtable.admin.v2.StorageType; +import com.google.cloud.bigtable.admin.v2.BaseBigtableInstanceAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableInstanceAdminClientV2; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; @@ -41,16 +42,28 @@ public class InstanceAdminExampleTest extends BigtableBaseTest { private static final String ID_PREFIX = "instanceadmin"; private static final String CLUSTER = "cluster"; - private static BigtableInstanceAdminClient adminClient; + private static BigtableInstanceAdminClientV2 adminClient; private String clusterId; private InstanceAdminExample instanceAdmin; @BeforeClass public static void beforeClass() throws IOException { initializeVariables(); - BigtableInstanceAdminSettings instanceAdminSettings = - BigtableInstanceAdminSettings.newBuilder().setProjectId(projectId).build(); - adminClient = BigtableInstanceAdminClient.create(instanceAdminSettings); + BaseBigtableInstanceAdminSettings instanceAdminSettings = + BaseBigtableInstanceAdminSettings.newBuilder().build(); + adminClient = BigtableInstanceAdminClientV2.create(instanceAdminSettings); + } + + private static boolean exists(String instanceId) { + try { + adminClient.getInstance( + com.google.bigtable.admin.v2.GetInstanceRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -60,21 +73,36 @@ public static void afterClass() { } @Before - public void setup() throws IOException { + public void setup() throws Exception { instanceId = generateId(); clusterId = generateId(); instanceAdmin = new InstanceAdminExample(projectId, instanceId, clusterId); - adminClient.createInstance( - CreateInstanceRequest.of(instanceId) - .addCluster(clusterId, "us-central1-f", 3, StorageType.SSD) - .setType(Type.PRODUCTION) - .addLabel("example", "instance_admin")); + Instance instanceObj = + Instance.newBuilder() + .setDisplayName(instanceId) + .setType(Instance.Type.PRODUCTION) + .putLabels("example", "instance_admin") + .build(); + Cluster clusterObj = + Cluster.newBuilder() + .setLocation("projects/" + projectId + "/locations/us-central1-f") + .setServeNodes(3) + .setDefaultStorageType(StorageType.SSD) + .build(); + CreateInstanceRequest request = + CreateInstanceRequest.newBuilder() + .setParent("projects/" + projectId) + .setInstanceId(instanceId) + .setInstance(instanceObj) + .putClusters(clusterId, clusterObj) + .build(); + adminClient.createInstanceAsync(request).get(); } @After public void after() { - if (adminClient.exists(instanceId)) { - adminClient.deleteInstance(instanceId); + if (exists(instanceId)) { + adminClient.deleteInstance("projects/" + projectId + "/instances/" + instanceId); } if (instanceAdmin != null) { instanceAdmin.close(); @@ -89,11 +117,11 @@ public void testCreateAndDeleteInstance() throws IOException { InstanceAdminExample testInstanceAdmin = new InstanceAdminExample(projectId, testInstance, testCluster); testInstanceAdmin.createProdInstance(); - assertTrue(adminClient.exists(testInstance)); + assertTrue(exists(testInstance)); // Deletes an instance. testInstanceAdmin.deleteInstance(); - assertFalse(adminClient.exists(testInstance)); + assertFalse(exists(testInstance)); } @Test @@ -107,13 +135,15 @@ public void testGetInstance() { public void testAddAndDeleteCluster() { // Adds a cluster. instanceAdmin.addCluster(); - com.google.cloud.bigtable.admin.v2.models.Cluster cluster = - adminClient.getCluster(instanceId, CLUSTER); + Cluster cluster = + adminClient.getCluster( + "projects/" + projectId + "/instances/" + instanceId + "/clusters/" + CLUSTER); assertNotNull(cluster); // Deletes a cluster. instanceAdmin.deleteCluster(); - adminClient.getCluster(instanceId, CLUSTER); + adminClient.getCluster( + "projects/" + projectId + "/instances/" + instanceId + "/clusters/" + CLUSTER); } // TODO: add test for instanceAdmin.listInstances() @@ -131,14 +161,18 @@ private static String generateId() { private static void garbageCollect() { Pattern timestampPattern = Pattern.compile(ID_PREFIX + "-([0-9a-f]+)"); System.out.println(); - for (com.google.cloud.bigtable.admin.v2.models.Instance instance : - adminClient.listInstances()) { - Matcher matcher = timestampPattern.matcher(instance.getId()); + com.google.bigtable.admin.v2.ListInstancesRequest request = + com.google.bigtable.admin.v2.ListInstancesRequest.newBuilder() + .setParent("projects/" + projectId) + .build(); + for (Instance instance : adminClient.listInstances(request).getInstancesList()) { + String id = instance.getName().substring(instance.getName().lastIndexOf("/") + 1); + Matcher matcher = timestampPattern.matcher(id); if (!matcher.matches()) { continue; } - System.out.println("Garbage collecting orphaned table: " + instance); - adminClient.deleteInstance(instance.getId()); + System.out.println("Garbage collecting orphaned table: " + instance.getName()); + adminClient.deleteInstance(instance.getName()); } } } diff --git a/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java b/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java index d4fd4de304..0205eeeb84 100644 --- a/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java +++ b/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java @@ -20,17 +20,14 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; -import com.google.cloud.bigtable.admin.v2.models.ColumnFamily; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import com.google.cloud.bigtable.admin.v2.models.GCRules.DurationRule; import com.google.cloud.bigtable.admin.v2.models.GCRules.GCRule; import com.google.cloud.bigtable.admin.v2.models.GCRules.IntersectionRule; import com.google.cloud.bigtable.admin.v2.models.GCRules.UnionRule; import com.google.cloud.bigtable.admin.v2.models.GCRules.VersionRule; import java.io.IOException; -import java.util.List; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -44,19 +41,28 @@ public class TableAdminExampleTest extends BigtableBaseTest { private static final String TABLE_PREFIX = "table"; - private static BigtableTableAdminClient adminClient; + private static BigtableTableAdminClientV2 adminClient; private String tableId; private TableAdminExample tableAdmin; @BeforeClass public static void beforeClass() throws IOException { initializeVariables(); - BigtableTableAdminSettings adminSettings = - BigtableTableAdminSettings.newBuilder() - .setInstanceId(instanceId) - .setProjectId(projectId) - .build(); - adminClient = BigtableTableAdminClient.create(adminSettings); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + adminClient = BigtableTableAdminClientV2.create(adminSettings); + } + + private static boolean exists(String tableId) { + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -69,13 +75,24 @@ public static void afterClass() { public void setup() throws IOException { tableId = generateResourceId(TABLE_PREFIX); tableAdmin = new TableAdminExample(projectId, instanceId, tableId); - adminClient.createTable(CreateTableRequest.of(tableId).addFamily("cf")); + com.google.bigtable.admin.v2.CreateTableRequest request = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(tableId) + .setTable( + com.google.bigtable.admin.v2.Table.newBuilder() + .putColumnFamilies( + "cf", com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .build()) + .build(); + adminClient.createTable(request); } @After public void after() { - if (adminClient.exists(tableId)) { - adminClient.deleteTable(tableId); + if (exists(tableId)) { + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); } if (tableAdmin != null) { tableAdmin.close(); @@ -88,11 +105,11 @@ public void testCreateAndDeleteTable() throws IOException { String testTable = generateResourceId(TABLE_PREFIX); TableAdminExample testTableAdmin = new TableAdminExample(projectId, instanceId, testTable); testTableAdmin.createTable(); - assertTrue(adminClient.exists(testTable)); + assertTrue(exists(testTable)); // Deletes a table. testTableAdmin.deleteTable(); - assertFalse(adminClient.exists(testTable)); + assertFalse(exists(testTable)); } @Test @@ -121,9 +138,12 @@ public void testCreateMaxVersionsRuleAndDeleteColumnFamily() { // Deletes cf2. tableAdmin.deleteColumnFamily(); boolean found = true; - List columnFamilies = adminClient.getTable(tableId).getColumnFamilies(); - for (ColumnFamily columnFamily : columnFamilies) { - if (columnFamily.equals("cf2")) { + com.google.bigtable.admin.v2.GetTableRequest request = + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build(); + for (String familyName : adminClient.getTable(request).getColumnFamiliesMap().keySet()) { + if (familyName.equals("cf2")) { found = false; break; } @@ -178,9 +198,13 @@ public void testRunDoesNotFail() { private boolean ruleCheck(GCRule condition) { boolean found = false; - List columnFamilies = adminClient.getTable(tableId).getColumnFamilies(); - for (ColumnFamily columnFamily : columnFamilies) { - if (columnFamily.getGCRule().equals(condition)) { + com.google.bigtable.admin.v2.GetTableRequest request = + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build(); + for (com.google.bigtable.admin.v2.ColumnFamily columnFamily : + adminClient.getTable(request).getColumnFamiliesMap().values()) { + if (columnFamily.getGcRule().equals(condition.toProto())) { found = true; break; } @@ -190,18 +214,23 @@ private boolean ruleCheck(GCRule condition) { private static void garbageCollect() { Pattern timestampPattern = Pattern.compile(TABLE_PREFIX + "-([0-9a-f]+)-([0-9a-f]+)"); - for (String tableId : adminClient.listTables()) { + com.google.bigtable.admin.v2.ListTablesRequest request = + com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .build(); + for (com.google.bigtable.admin.v2.Table table : adminClient.listTables(request).iterateAll()) { + String tableId = table.getName().substring(table.getName().lastIndexOf("/") + 1); Matcher matcher = timestampPattern.matcher(tableId); if (!matcher.matches()) { continue; } String timestampStr = matcher.group(1); long timestamp = Long.parseLong(timestampStr, 16); - if (System.currentTimeMillis() - timestamp < TimeUnit.MINUTES.toMillis(10)) { + if (System.currentTimeMillis() - timestamp < TimeUnit.MINUTES.toMillis(15)) { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } }