diff --git a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/AuthorizedViewExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/AuthorizedViewExample.java index 8f3047442bd6..ce11432fc34a 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/AuthorizedViewExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/AuthorizedViewExample.java @@ -21,15 +21,17 @@ import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.PermissionDeniedException; 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.models.AuthorizedView; -import com.google.cloud.bigtable.admin.v2.models.CreateAuthorizedViewRequest; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; -import com.google.cloud.bigtable.admin.v2.models.FamilySubsets; -import com.google.cloud.bigtable.admin.v2.models.SubsetView; -import com.google.cloud.bigtable.admin.v2.models.Table; -import com.google.cloud.bigtable.admin.v2.models.UpdateAuthorizedViewRequest; +import com.google.bigtable.admin.v2.AuthorizedView; +import com.google.bigtable.admin.v2.AuthorizedViewName; +import com.google.bigtable.admin.v2.ColumnFamily; +import com.google.bigtable.admin.v2.CreateAuthorizedViewRequest; +import com.google.bigtable.admin.v2.CreateTableRequest; +import com.google.bigtable.admin.v2.GetTableRequest; +import com.google.bigtable.admin.v2.ListAuthorizedViewsRequest; +import com.google.bigtable.admin.v2.Table; +import com.google.bigtable.admin.v2.UpdateAuthorizedViewRequest; +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.AuthorizedViewId; @@ -50,9 +52,11 @@ public class AuthorizedViewExample { private static final String COLUMN_QUALIFIER_GREETING = "greeting"; private static final String COLUMN_QUALIFIER_NAME = "name"; private static final String ROW_KEY_PREFIX = "rowKey"; + private final String projectId; + private final String instanceId; private final String tableId; private final String authorizedViewId; - private final BigtableTableAdminClient adminClient; + private final BigtableTableAdminClientV2 adminClient; private final BigtableDataClient dataClient; public static void main(String[] args) throws IOException { @@ -72,6 +76,8 @@ public static void main(String[] args) throws IOException { public AuthorizedViewExample( String projectId, String instanceId, String tableId, String authorizedViewId) throws IOException { + this.projectId = projectId; + this.instanceId = instanceId; this.tableId = tableId; this.authorizedViewId = authorizedViewId; @@ -83,14 +89,24 @@ public AuthorizedViewExample( 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); + } + + private boolean exists(String tableId) { + try { + adminClient.getTable( + GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setView(Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } public void close() { @@ -114,12 +130,19 @@ public void run() { public void createTable() { // Checks if table exists, creates table if it does not exist. - if (!adminClient.exists(tableId)) { + if (!exists(tableId)) { System.out.println("Table does not exist, creating table: " + tableId); - CreateTableRequest createTableRequest = - CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY); - Table table = adminClient.createTable(createTableRequest); - System.out.printf("Table: %s created successfully%n", table.getId()); + CreateTableRequest request = + CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(tableId) + .setTable( + Table.newBuilder() + .putColumnFamilies(COLUMN_FAMILY, ColumnFamily.getDefaultInstance()) + .build()) + .build(); + Table table = adminClient.createTable(request); + System.out.printf("Table: %s created successfully%n", table.getName()); } } @@ -127,7 +150,8 @@ public void deleteTable() { // Deletes the entire table. System.out.println("\nDelete table: " + tableId); try { - adminClient.deleteTable(tableId); + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); System.out.printf("Table: %s deleted successfully%n", tableId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent table: " + e.getMessage()); @@ -140,24 +164,42 @@ public void deleteTable() { public void createAuthorizedView() { // Checks if the authorized view exists, creates it if it does not exist. try { - adminClient.getAuthorizedView(tableId, authorizedViewId); + adminClient.getAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + authorizedViewId); } catch (NotFoundException exception) { System.out.printf("%nCreating authorized view %s in table %s%n", authorizedViewId, tableId); // [START bigtable_create_authorized_view] try { + AuthorizedView.SubsetView subsetView = + AuthorizedView.SubsetView.newBuilder() + .addRowPrefixes(com.google.protobuf.ByteString.EMPTY) + .putFamilySubsets( + COLUMN_FAMILY, + AuthorizedView.FamilySubsets.newBuilder() + .addQualifierPrefixes( + com.google.protobuf.ByteString.copyFromUtf8(COLUMN_QUALIFIER_NAME)) + .build()) + .build(); + AuthorizedView authorizedViewObj = + AuthorizedView.newBuilder().setSubsetView(subsetView).build(); CreateAuthorizedViewRequest request = - CreateAuthorizedViewRequest.of(tableId, authorizedViewId) - .setAuthorizedViewType( - SubsetView.create() - .addRowPrefix("") - .setFamilySubsets( - COLUMN_FAMILY, - FamilySubsets.create().addQualifierPrefix(COLUMN_QUALIFIER_NAME))); - AuthorizedView authorizedView = adminClient.createAuthorizedView(request); - System.out.printf("AuthorizedView: %s created successfully%n", authorizedView.getId()); - } catch (NotFoundException e) { - System.err.println( - "Failed to create an authorized view from a non-existent table: " + e.getMessage()); + CreateAuthorizedViewRequest.newBuilder() + .setParent( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setAuthorizedViewId(authorizedViewId) + .setAuthorizedView(authorizedViewObj) + .build(); + AuthorizedView authorizedView = adminClient.createAuthorizedViewAsync(request).get(); + System.out.printf("AuthorizedView: %s created successfully%n", authorizedView.getName()); + } catch (Exception e) { + System.err.println("Failed to create an authorized view: " + e.getMessage()); } // [END bigtable_create_authorized_view] } @@ -169,17 +211,38 @@ public void updateAuthorizedView() { // [START bigtable_update_authorized_view] try { // Update to an authorized view permitting everything. + AuthorizedView.SubsetView subsetView = + AuthorizedView.SubsetView.newBuilder() + .addRowPrefixes(com.google.protobuf.ByteString.EMPTY) + .putFamilySubsets( + COLUMN_FAMILY, + AuthorizedView.FamilySubsets.newBuilder() + .addQualifierPrefixes(com.google.protobuf.ByteString.EMPTY) + .build()) + .build(); + AuthorizedView authorizedViewObj = + AuthorizedView.newBuilder() + .setSubsetView(subsetView) + .setName( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + authorizedViewId) + .build(); UpdateAuthorizedViewRequest request = - UpdateAuthorizedViewRequest.of(tableId, authorizedViewId) - .setAuthorizedViewType( - SubsetView.create() - .addRowPrefix("") - .setFamilySubsets( - COLUMN_FAMILY, FamilySubsets.create().addQualifierPrefix(""))); - AuthorizedView authorizedView = adminClient.updateAuthorizedView(request); - System.out.printf("AuthorizedView: %s updated successfully%n", authorizedView.getId()); - } catch (NotFoundException e) { - System.err.println("Failed to modify a non-existent authorized view: " + e.getMessage()); + UpdateAuthorizedViewRequest.newBuilder() + .setAuthorizedView(authorizedViewObj) + .setUpdateMask( + com.google.protobuf.FieldMask.newBuilder().addPaths("subset_view").build()) + .build(); + AuthorizedView authorizedView = adminClient.updateAuthorizedViewAsync(request).get(); + System.out.printf("AuthorizedView: %s updated successfully%n", authorizedView.getName()); + } catch (Exception e) { + System.err.println("Failed to modify authorized view: " + e.getMessage()); } // [END bigtable_update_authorized_view] } @@ -190,19 +253,29 @@ public AuthorizedView getAuthorizedView() { // [START bigtable_get_authorized_view] AuthorizedView authorizedView = null; try { - authorizedView = adminClient.getAuthorizedView(tableId, authorizedViewId); - SubsetView subsetView = (SubsetView) authorizedView.getAuthorizedViewType(); + authorizedView = + adminClient.getAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + authorizedViewId); + AuthorizedView.SubsetView subsetView = authorizedView.getSubsetView(); - for (ByteString rowPrefix : subsetView.getRowPrefixes()) { + for (ByteString rowPrefix : subsetView.getRowPrefixesList()) { System.out.printf("Row Prefix: %s%n", rowPrefix.toStringUtf8()); } - for (Map.Entry entry : subsetView.getFamilySubsets().entrySet()) { - for (ByteString qualifierPrefix : entry.getValue().getQualifierPrefixes()) { + for (Map.Entry entry : + subsetView.getFamilySubsetsMap().entrySet()) { + for (ByteString qualifierPrefix : entry.getValue().getQualifierPrefixesList()) { System.out.printf( "Column Family: %s, Qualifier Prefix: %s%n", entry.getKey(), qualifierPrefix.toStringUtf8()); } - for (ByteString qualifier : entry.getValue().getQualifiers()) { + for (ByteString qualifier : entry.getValue().getQualifiersList()) { System.out.printf( "Column Family: %s, Qualifier: %s%n", entry.getKey(), qualifier.toStringUtf8()); } @@ -221,9 +294,15 @@ public List listAllAuthorizedViews() { // [START bigtable_list_authorized_views] List authorizedViewIds = new ArrayList<>(); try { - authorizedViewIds = adminClient.listAuthorizedViews(tableId); - for (String authorizedViewId : authorizedViewIds) { - System.out.println(authorizedViewId); + ListAuthorizedViewsRequest request = + ListAuthorizedViewsRequest.newBuilder() + .setParent( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build(); + for (AuthorizedView view : adminClient.listAuthorizedViews(request).iterateAll()) { + String id = AuthorizedViewName.parse(view.getName()).getAuthorizedView(); + System.out.println(id); + authorizedViewIds.add(id); } } catch (NotFoundException e) { System.err.println( @@ -238,7 +317,15 @@ public void deleteAuthorizedView() { System.out.printf("%nDeleting authorized view %s in table %s%n", authorizedViewId, tableId); // [START bigtable_delete_authorized_view] try { - adminClient.deleteAuthorizedView(tableId, authorizedViewId); + adminClient.deleteAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + authorizedViewId); System.out.printf("AuthorizedView: %s deleted successfully%n", authorizedViewId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent authorized view: " + e.getMessage()); diff --git a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java index 02a568f615ed..0612991e4336 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/HelloWorld.java @@ -22,8 +22,12 @@ 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.bigtable.admin.v2.ColumnFamily; +import com.google.bigtable.admin.v2.CreateTableRequest; +import com.google.bigtable.admin.v2.GetTableRequest; +import com.google.bigtable.admin.v2.Table; +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 +67,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 +96,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,21 +124,30 @@ 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( + GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setView(Table.View.NAME_ONLY) + .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 = - com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + CreateTableRequest request = + CreateTableRequest.newBuilder() .setParent(parent) .setTableId(tableId) .setTable( - com.google.bigtable.admin.v2.Table.newBuilder() - .putColumnFamilies( - COLUMN_FAMILY, - com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + Table.newBuilder() + .putColumnFamilies(COLUMN_FAMILY, 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 +280,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/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java index 05a54224792c..b71b885432d5 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/InstanceAdminExample.java +++ b/java-bigtable/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 { @@ -85,11 +85,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(boolean createWithTags) { @@ -121,7 +121,17 @@ void close() { */ public void createProdInstance(boolean createWithTags) { // Checks if instance exists, creates instance if does not exists. - if (!adminClient.exists(instanceId)) { + boolean exists = false; + try { + adminClient.getInstance( + 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", @@ -157,7 +167,7 @@ public void createProdInstance(boolean createWithTags) { .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()); @@ -174,7 +184,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()); } @@ -192,7 +202,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: "); @@ -216,7 +226,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()); } @@ -233,7 +243,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()); @@ -259,7 +269,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()); @@ -274,7 +284,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/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/SchemaBundleExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/SchemaBundleExample.java index 7ac0af3fcb1c..66a5061387ba 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/SchemaBundleExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/SchemaBundleExample.java @@ -17,13 +17,18 @@ package com.example.bigtable; import com.google.api.gax.rpc.NotFoundException; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; -import com.google.cloud.bigtable.admin.v2.models.CreateSchemaBundleRequest; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; -import com.google.cloud.bigtable.admin.v2.models.SchemaBundle; -import com.google.cloud.bigtable.admin.v2.models.Table; -import com.google.cloud.bigtable.admin.v2.models.UpdateSchemaBundleRequest; +import com.google.bigtable.admin.v2.ColumnFamily; +import com.google.bigtable.admin.v2.CreateSchemaBundleRequest; +import com.google.bigtable.admin.v2.CreateTableRequest; +import com.google.bigtable.admin.v2.GetTableRequest; +import com.google.bigtable.admin.v2.ListSchemaBundlesRequest; +import com.google.bigtable.admin.v2.ProtoSchema; +import com.google.bigtable.admin.v2.SchemaBundle; +import com.google.bigtable.admin.v2.SchemaBundleName; +import com.google.bigtable.admin.v2.Table; +import com.google.bigtable.admin.v2.UpdateSchemaBundleRequest; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import com.google.protobuf.ByteString; import com.google.protobuf.DescriptorProtos; import com.google.protobuf.InvalidProtocolBufferException; @@ -52,9 +57,11 @@ public class SchemaBundleExample { private static final String COLUMN_FAMILY = "cf"; private static final String PROTO_FILE_PATH = "com/example/bigtable/descriptors.pb"; + private final String projectId; + private final String instanceId; private final String tableId; private final String schemaBundleId; - private final BigtableTableAdminClient adminClient; + private final BigtableTableAdminClientV2 adminClient; public static void main(String[] args) throws IOException { if (args.length != 2) { @@ -72,18 +79,30 @@ public static void main(String[] args) throws IOException { public SchemaBundleExample( String projectId, String instanceId, String tableId, String schemaBundleId) throws IOException { + this.projectId = projectId; + this.instanceId = instanceId; this.tableId = tableId; this.schemaBundleId = schemaBundleId; // 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); + } + + private boolean exists(String tableId) { + try { + adminClient.getTable( + GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setView(Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } public void close() { @@ -103,12 +122,19 @@ public void run() { public void createTable() { // Checks if table exists, creates table if it does not exist. - if (!adminClient.exists(tableId)) { + if (!exists(tableId)) { System.out.println("Table does not exist, creating table: " + tableId); - CreateTableRequest createTableRequest = - CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY); - Table table = adminClient.createTable(createTableRequest); - System.out.printf("Table: %s created successfully%n", table.getId()); + CreateTableRequest request = + CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(tableId) + .setTable( + Table.newBuilder() + .putColumnFamilies(COLUMN_FAMILY, ColumnFamily.getDefaultInstance()) + .build()) + .build(); + Table table = adminClient.createTable(request); + System.out.printf("Table: %s created successfully%n", table.getName()); } } @@ -116,7 +142,8 @@ public void deleteTable() { // Deletes the entire table. System.out.println("\nDelete table: " + tableId); try { - adminClient.deleteTable(tableId); + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); System.out.printf("Table: %s deleted successfully%n", tableId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent table: " + e.getMessage()); @@ -127,22 +154,38 @@ public void deleteTable() { public void createSchemaBundle() { // Checks if the schema bundle exists, creates it if it does not exist. try { - adminClient.getSchemaBundle(tableId, schemaBundleId); + adminClient.getSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId); } catch (NotFoundException exception) { System.out.printf("%nCreating schema bundle %s in table %s%n", schemaBundleId, tableId); // [START bigtable_create_schema_bundle] - try { - InputStream in = getClass().getClassLoader().getResourceAsStream(PROTO_FILE_PATH); + try (InputStream in = getClass().getClassLoader().getResourceAsStream(PROTO_FILE_PATH)) { + if (in == null) { + throw new java.io.FileNotFoundException("Resource not found: " + PROTO_FILE_PATH); + } + SchemaBundle schemaBundleObj = + SchemaBundle.newBuilder() + .setProtoSchema( + ProtoSchema.newBuilder().setProtoDescriptors(ByteString.readFrom(in)).build()) + .build(); CreateSchemaBundleRequest request = - CreateSchemaBundleRequest.of(tableId, schemaBundleId) - .setProtoSchema(ByteString.readFrom(in)); - SchemaBundle schemaBundle = adminClient.createSchemaBundle(request); - System.out.printf("Schema bundle: %s created successfully%n", schemaBundle.getId()); - } catch (NotFoundException e) { - System.err.println( - "Failed to create a schema bundle from a non-existent table: " + e.getMessage()); - } catch (IOException e) { - throw new RuntimeException(e); + CreateSchemaBundleRequest.newBuilder() + .setParent( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setSchemaBundleId(schemaBundleId) + .setSchemaBundle(schemaBundleObj) + .build(); + SchemaBundle schemaBundle = adminClient.createSchemaBundleAsync(request).get(); + System.out.printf("Schema bundle: %s created successfully%n", schemaBundle.getName()); + } catch (Exception e) { + System.err.println("Failed to create a schema bundle: " + e.getMessage()); } // [END bigtable_create_schema_bundle] } @@ -152,17 +195,34 @@ public void createSchemaBundle() { public void updateSchemaBundle() { System.out.printf("%nUpdating schema bundle %s in table %s%n", schemaBundleId, tableId); // [START bigtable_update_schema_bundle] - try { - InputStream in = getClass().getClassLoader().getResourceAsStream(PROTO_FILE_PATH); + try (InputStream in = getClass().getClassLoader().getResourceAsStream(PROTO_FILE_PATH)) { + if (in == null) { + throw new java.io.FileNotFoundException("Resource not found: " + PROTO_FILE_PATH); + } + SchemaBundle schemaBundleObj = + SchemaBundle.newBuilder() + .setName( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId) + .setProtoSchema( + ProtoSchema.newBuilder().setProtoDescriptors(ByteString.readFrom(in)).build()) + .build(); UpdateSchemaBundleRequest request = - UpdateSchemaBundleRequest.of(tableId, schemaBundleId) - .setProtoSchema(ByteString.readFrom(in)); - SchemaBundle schemaBundle = adminClient.updateSchemaBundle(request); - System.out.printf("Schema bundle: %s updated successfully%n", schemaBundle.getId()); - } catch (NotFoundException e) { - System.err.println("Failed to modify a non-existent schema bundle: " + e.getMessage()); - } catch (IOException e) { - throw new RuntimeException(e); + UpdateSchemaBundleRequest.newBuilder() + .setSchemaBundle(schemaBundleObj) + .setUpdateMask( + com.google.protobuf.FieldMask.newBuilder().addPaths("proto_schema").build()) + .build(); + SchemaBundle schemaBundle = adminClient.updateSchemaBundleAsync(request).get(); + System.out.printf("Schema bundle: %s updated successfully%n", schemaBundle.getName()); + } catch (Exception e) { + System.err.println("Failed to modify schema bundle: " + e.getMessage()); } // [END bigtable_update_schema_bundle] } @@ -173,10 +233,20 @@ public SchemaBundle getSchemaBundle() { // [START bigtable_get_schema_bundle] SchemaBundle schemaBundle = null; try { - schemaBundle = adminClient.getSchemaBundle(tableId, schemaBundleId); + schemaBundle = + adminClient.getSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId); // Deserialize and print the FileDescriptorSet DescriptorProtos.FileDescriptorSet fileDescriptorSet = - DescriptorProtos.FileDescriptorSet.parseFrom(schemaBundle.getProtoSchema()); + DescriptorProtos.FileDescriptorSet.parseFrom( + schemaBundle.getProtoSchema().getProtoDescriptors()); System.out.println("--------- Deserialized FileDescriptorSet ---------"); for (DescriptorProtos.FileDescriptorProto fileDescriptorProto : @@ -205,9 +275,15 @@ public List listAllSchemaBundles() { // [START bigtable_list_schema_bundles] List schemaBundleIds = new ArrayList<>(); try { - schemaBundleIds = adminClient.listSchemaBundles(tableId); - for (String schemaBundleId : schemaBundleIds) { - System.out.println(schemaBundleId); + ListSchemaBundlesRequest request = + ListSchemaBundlesRequest.newBuilder() + .setParent( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build(); + for (SchemaBundle bundle : adminClient.listSchemaBundles(request).iterateAll()) { + String id = SchemaBundleName.parse(bundle.getName()).getSchemaBundle(); + System.out.println(id); + schemaBundleIds.add(id); } } catch (NotFoundException e) { System.err.println( @@ -222,7 +298,15 @@ public void deleteSchemaBundle() { System.out.printf("%nDeleting schema bundle %s in table %s%n", schemaBundleId, tableId); // [START bigtable_delete_schema_bundle] try { - adminClient.deleteSchemaBundle(tableId, schemaBundleId); + adminClient.deleteSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId); System.out.printf("SchemaBundle: %s deleted successfully%n", schemaBundleId); } catch (NotFoundException e) { System.err.println("Failed to delete a non-existent schema bundle: " + e.getMessage()); diff --git a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java index 009fef39105a..2888fdc28b9c 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/TableAdminExample.java @@ -21,11 +21,12 @@ import com.google.bigtable.admin.v2.ColumnFamily; import com.google.bigtable.admin.v2.CreateTableRequest; import com.google.bigtable.admin.v2.GcRule; +import com.google.bigtable.admin.v2.GetTableRequest; 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 +63,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 +84,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 +117,18 @@ 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( + GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setView(Table.View.NAME_ONLY) + .build()); + exists = true; + } catch (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 +140,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 +154,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 +171,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 +207,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 +238,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 +273,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 +307,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 +344,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 +361,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 +392,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 +407,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 +435,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 +451,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/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteColumnFamilyExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteColumnFamilyExample.java index e3648fb0a13a..275a9d9e4b04 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteColumnFamilyExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteColumnFamilyExample.java @@ -17,18 +17,27 @@ package com.example.bigtable.deletes; // [START bigtable_delete_column_family] -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.models.ModifyColumnFamiliesRequest; +import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import java.io.IOException; public class DeleteColumnFamilyExample { public void deleteColumnFamily( String projectId, String instanceId, String tableId, String columnFamily) throws IOException { - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - ModifyColumnFamiliesRequest modifyColumnFamiliesRequest = - ModifyColumnFamiliesRequest.of(tableId).dropFamily(columnFamily); - tableAdminClient.modifyFamilies(modifyColumnFamiliesRequest); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 tableAdminClient = + BigtableTableAdminClientV2.create(adminSettings)) { + ModifyColumnFamiliesRequest request = + ModifyColumnFamiliesRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .addModifications( + ModifyColumnFamiliesRequest.Modification.newBuilder() + .setId(columnFamily) + .setDrop(true)) + .build(); + tableAdminClient.modifyColumnFamilies(request); } } } diff --git a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteTableExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteTableExample.java index bdded5fbefe8..e54aa5f3a925 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteTableExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DeleteTableExample.java @@ -17,14 +17,18 @@ package com.example.bigtable.deletes; // [START bigtable_delete_table] -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import java.io.IOException; public class DeleteTableExample { public void deleteTable(String projectId, String instanceId, String tableId) throws IOException { - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - tableAdminClient.deleteTable(tableId); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 tableAdminClient = + BigtableTableAdminClientV2.create(adminSettings)) { + tableAdminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); } } } diff --git a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DropRowRangeExample.java b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DropRowRangeExample.java index 0575fb38ec99..ef5cf5d89014 100644 --- a/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DropRowRangeExample.java +++ b/java-bigtable/samples/snippets/src/main/java/com/example/bigtable/deletes/DropRowRangeExample.java @@ -17,14 +17,23 @@ package com.example.bigtable.deletes; // [START bigtable_drop_row_range] -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; +import com.google.bigtable.admin.v2.DropRowRangeRequest; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import java.io.IOException; public class DropRowRangeExample { public void dropRowRange(String projectId, String instanceId, String tableId) throws IOException { - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - tableAdminClient.dropRowRange(tableId, "phone#4c410523"); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 tableAdminClient = + BigtableTableAdminClientV2.create(adminSettings)) { + DropRowRangeRequest request = + DropRowRangeRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setRowKeyPrefix(com.google.protobuf.ByteString.copyFromUtf8("phone#4c410523")) + .build(); + tableAdminClient.dropRowRange(request); } } } diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/AuthorizedViewExampleTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/AuthorizedViewExampleTest.java index 5990d66107af..6b488ac4499e 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/AuthorizedViewExampleTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/AuthorizedViewExampleTest.java @@ -23,13 +23,8 @@ import static org.junit.Assert.assertThrows; import com.google.api.gax.rpc.NotFoundException; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings; -import com.google.cloud.bigtable.admin.v2.models.AuthorizedView; -import com.google.cloud.bigtable.admin.v2.models.CreateAuthorizedViewRequest; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; -import com.google.cloud.bigtable.admin.v2.models.FamilySubsets; -import com.google.cloud.bigtable.admin.v2.models.SubsetView; +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.AuthorizedViewId; @@ -56,7 +51,7 @@ public class AuthorizedViewExampleTest extends BigtableBaseTest { private String tableId; private String authorizedViewId; private static BigtableDataClient dataClient; - private static BigtableTableAdminClient adminClient; + private static BigtableTableAdminClientV2 adminClient; private AuthorizedViewExample authorizedViewExample; @BeforeClass @@ -65,12 +60,22 @@ 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) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -81,26 +86,50 @@ public static void afterClass() { } @Before - public void setup() throws IOException { + public void setup() throws Exception { tableId = generateResourceId(TABLE_PREFIX); authorizedViewId = generateResourceId(AUTHORIZED_VIEW_PREFIX); authorizedViewExample = new AuthorizedViewExample(projectId, instanceId, tableId, authorizedViewId); - adminClient.createTable(CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY)); - adminClient.createAuthorizedView( - CreateAuthorizedViewRequest.of(tableId, authorizedViewId) - .setAuthorizedViewType( - SubsetView.create() - .addRowPrefix("") - .setFamilySubsets( - COLUMN_FAMILY, FamilySubsets.create().addQualifierPrefix("")))); + com.google.bigtable.admin.v2.CreateTableRequest createTableRequest = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(tableId) + .setTable( + com.google.bigtable.admin.v2.Table.newBuilder() + .putColumnFamilies( + COLUMN_FAMILY, + com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .build()) + .build(); + adminClient.createTable(createTableRequest); + + com.google.bigtable.admin.v2.AuthorizedView.SubsetView subsetView = + com.google.bigtable.admin.v2.AuthorizedView.SubsetView.newBuilder() + .addRowPrefixes(com.google.protobuf.ByteString.EMPTY) + .putFamilySubsets( + COLUMN_FAMILY, + com.google.bigtable.admin.v2.AuthorizedView.FamilySubsets.newBuilder() + .addQualifierPrefixes(com.google.protobuf.ByteString.EMPTY) + .build()) + .build(); + com.google.bigtable.admin.v2.AuthorizedView authorizedViewObj = + com.google.bigtable.admin.v2.AuthorizedView.newBuilder().setSubsetView(subsetView).build(); + com.google.bigtable.admin.v2.CreateAuthorizedViewRequest createAuthorizedViewRequest = + com.google.bigtable.admin.v2.CreateAuthorizedViewRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setAuthorizedViewId(authorizedViewId) + .setAuthorizedView(authorizedViewObj) + .build(); + adminClient.createAuthorizedViewAsync(createAuthorizedViewRequest).get(); } @After public void after() { - if (adminClient.exists(tableId)) { + if (exists(tableId)) { // Deleting a table also deletes all the authorized views inside it. - adminClient.deleteTable(tableId); + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId); } authorizedViewExample.close(); } @@ -117,29 +146,58 @@ public void testAuthorizedViewCreateUpdateDelete() throws IOException { AuthorizedViewExample testAuthorizedViewExample = new AuthorizedViewExample(projectId, instanceId, tableId, testAuthorizedViewId); testAuthorizedViewExample.createAuthorizedView(); - AuthorizedView authorizedView = adminClient.getAuthorizedView(tableId, testAuthorizedViewId); - assertEquals(authorizedView.getId(), testAuthorizedViewId); + com.google.bigtable.admin.v2.AuthorizedView authorizedView = + adminClient.getAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + testAuthorizedViewId); + String id = authorizedView.getName().substring(authorizedView.getName().lastIndexOf("/") + 1); + assertEquals(id, testAuthorizedViewId); // Updates the authorized view. testAuthorizedViewExample.updateAuthorizedView(); - AuthorizedView updatedAuthorizedView = - adminClient.getAuthorizedView(tableId, testAuthorizedViewId); + com.google.bigtable.admin.v2.AuthorizedView updatedAuthorizedView = + adminClient.getAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + testAuthorizedViewId); assertNotEquals(authorizedView, updatedAuthorizedView); // Deletes the authorized view. testAuthorizedViewExample.deleteAuthorizedView(); assertThrows( NotFoundException.class, - () -> adminClient.getAuthorizedView(tableId, testAuthorizedViewId)); + () -> + adminClient.getAuthorizedView( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/authorizedViews/" + + testAuthorizedViewId)); testAuthorizedViewExample.close(); } @Test public void testGetAuthorizedView() { - AuthorizedView authorizedView = authorizedViewExample.getAuthorizedView(); + com.google.bigtable.admin.v2.AuthorizedView authorizedView = + authorizedViewExample.getAuthorizedView(); assertNotNull(authorizedView); - assertEquals(authorizedView.getId(), authorizedViewId); + String id = authorizedView.getName().substring(authorizedView.getName().lastIndexOf("/") + 1); + assertEquals(id, authorizedViewId); } @Test @@ -193,7 +251,12 @@ public void testReadsFromAuthorizedView() { 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; @@ -204,7 +267,7 @@ private static void garbageCollect() { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } } diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java index ead4d6c3fde7..fb436f1da6e9 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/HelloWorldTest.java +++ b/java-bigtable/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,22 @@ 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) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -72,13 +81,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 +109,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 +147,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 +163,7 @@ private static void garbageCollect() { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } } diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java index 9539a27bf7c5..3dfd76be8b70 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/InstanceAdminExampleTest.java @@ -18,14 +18,16 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; 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 +43,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 +74,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 +118,11 @@ public void testCreateAndDeleteInstance() throws IOException { InstanceAdminExample testInstanceAdmin = new InstanceAdminExample(projectId, testInstance, testCluster); testInstanceAdmin.createProdInstance(false); - assertTrue(adminClient.exists(testInstance)); + assertTrue(exists(testInstance)); // Deletes an instance. testInstanceAdmin.deleteInstance(); - assertFalse(adminClient.exists(testInstance)); + assertFalse(exists(testInstance)); } @Test @@ -103,17 +132,22 @@ public void testGetInstance() { assertNotNull(instance); } - @Test(expected = NotFoundException.class) + @Test 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); + assertThrows( + NotFoundException.class, + () -> + adminClient.getCluster( + "projects/" + projectId + "/instances/" + instanceId + "/clusters/" + CLUSTER)); } // TODO: add test for instanceAdmin.listInstances() @@ -131,14 +165,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/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/MobileTimeSeriesBaseTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/MobileTimeSeriesBaseTest.java index f1a9ae5c01bf..385382ae54e2 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/MobileTimeSeriesBaseTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/MobileTimeSeriesBaseTest.java @@ -16,9 +16,8 @@ package com.example.bigtable; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; -import com.google.cloud.bigtable.admin.v2.models.Type; +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.models.BulkMutation; import com.google.cloud.bigtable.data.v2.models.Mutation; @@ -40,14 +39,48 @@ public class MobileTimeSeriesBaseTest extends BigtableBaseTest { CURRENT_TIME.minus(1, ChronoUnit.HOURS).toEpochMilli() * 1000; public static void createTable() throws IOException { - try (BigtableTableAdminClient adminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - CreateTableRequest createTableRequest = - CreateTableRequest.of(TABLE_ID) - .addFamily(COLUMN_FAMILY_NAME_STATS) - .addFamily(COLUMN_FAMILY_NAME_PLAN) - .addFamily(COLUMN_FAMILY_NAME_VIEW_COUNT, Type.int64Sum()); - adminClient.createTable(createTableRequest); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 adminClient = + BigtableTableAdminClientV2.create(adminSettings)) { + com.google.bigtable.admin.v2.Type int64Type = + com.google.bigtable.admin.v2.Type.newBuilder() + .setInt64Type( + com.google.bigtable.admin.v2.Type.Int64.newBuilder() + .setEncoding( + com.google.bigtable.admin.v2.Type.Int64.Encoding.newBuilder() + .setBigEndianBytes( + com.google.bigtable.admin.v2.Type.Int64.Encoding.BigEndianBytes + .getDefaultInstance()))) + .build(); + com.google.bigtable.admin.v2.Type int64SumType = + com.google.bigtable.admin.v2.Type.newBuilder() + .setAggregateType( + com.google.bigtable.admin.v2.Type.Aggregate.newBuilder() + .setInputType(int64Type) + .setSum(com.google.bigtable.admin.v2.Type.Aggregate.Sum.getDefaultInstance())) + .build(); + + com.google.bigtable.admin.v2.CreateTableRequest request = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(TABLE_ID) + .setTable( + com.google.bigtable.admin.v2.Table.newBuilder() + .putColumnFamilies( + COLUMN_FAMILY_NAME_STATS, + com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .putColumnFamilies( + COLUMN_FAMILY_NAME_PLAN, + com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .putColumnFamilies( + COLUMN_FAMILY_NAME_VIEW_COUNT, + com.google.bigtable.admin.v2.ColumnFamily.newBuilder() + .setValueType(int64SumType) + .build()) + .build()) + .build(); + adminClient.createTable(request); } catch (IOException e) { System.out.println("Error during createTable: \n" + e.toString()); throw (e); @@ -172,10 +205,24 @@ public static void writePlanData() throws IOException { } public static void cleanupTable() throws IOException { - try (BigtableTableAdminClient adminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - if (adminClient.exists(TABLE_ID)) { - adminClient.deleteTable(TABLE_ID); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 adminClient = + BigtableTableAdminClientV2.create(adminSettings)) { + boolean exists = true; + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + TABLE_ID) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + } catch (com.google.api.gax.rpc.NotFoundException e) { + exists = false; + } + if (exists) { + adminClient.deleteTable( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + TABLE_ID); } } catch (Exception e) { System.out.println("Error during afterClass: \n" + e.toString()); diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/QuickstartTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/QuickstartTest.java index b8271de50e89..616d9bbba501 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/QuickstartTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/QuickstartTest.java @@ -18,8 +18,8 @@ import static org.junit.Assert.assertThat; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -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.models.Row; import com.google.cloud.bigtable.data.v2.models.RowMutation; @@ -39,11 +39,35 @@ public static void beforeClass() throws IOException { initializeVariables(); // set up required table and row data if not present - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + try (BigtableTableAdminClientV2 tableAdminClient = + BigtableTableAdminClientV2.create(adminSettings)) { String columnFamily = "cf1"; - if (!tableAdminClient.exists(TABLE_ID)) { - tableAdminClient.createTable(CreateTableRequest.of(TABLE_ID).addFamily(columnFamily)); + boolean exists = true; + try { + tableAdminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName( + "projects/" + projectId + "/instances/" + instanceId + "/tables/" + TABLE_ID) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + } catch (com.google.api.gax.rpc.NotFoundException e) { + exists = false; + } + if (!exists) { + com.google.bigtable.admin.v2.CreateTableRequest request = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent("projects/" + projectId + "/instances/" + instanceId) + .setTableId(TABLE_ID) + .setTable( + com.google.bigtable.admin.v2.Table.newBuilder() + .putColumnFamilies( + columnFamily, + com.google.bigtable.admin.v2.ColumnFamily.getDefaultInstance()) + .build()) + .build(); + tableAdminClient.createTable(request); } try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) { String rowKey = "r1"; diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/SchemaBundleExampleTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/SchemaBundleExampleTest.java index c76d1288eb1b..ed9dc8647d40 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/SchemaBundleExampleTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/SchemaBundleExampleTest.java @@ -22,10 +22,8 @@ import static org.junit.Assert.assertThrows; import com.google.api.gax.rpc.NotFoundException; -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.models.SchemaBundle; +import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminSettings; +import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClientV2; import java.io.IOException; import java.util.List; import java.util.concurrent.TimeUnit; @@ -44,18 +42,28 @@ public class SchemaBundleExampleTest extends BigtableBaseTest { private static final String COLUMN_FAMILY = "cf"; private String tableId; private String schemaBundleId; - private static BigtableTableAdminClient adminClient; + private static BigtableTableAdminClientV2 adminClient; private SchemaBundleExample schemaBundleExample; @BeforeClass public static void beforeClass() throws IOException { initializeVariables(); - 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) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -69,13 +77,25 @@ public void setup() throws IOException { tableId = generateResourceId(TABLE_PREFIX); schemaBundleId = generateResourceId(SCHEMA_BUNDLE_PREFIX); schemaBundleExample = new SchemaBundleExample(projectId, instanceId, tableId, schemaBundleId); - adminClient.createTable(CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY)); + 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( + COLUMN_FAMILY, + 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); } schemaBundleExample.close(); } @@ -89,26 +109,56 @@ public void testRunDoesNotFail() { public void testSchemaBundleCreateUpdateDelete() throws IOException { // Creates a schema bundle. schemaBundleExample.createSchemaBundle(); - SchemaBundle schemaBundle = adminClient.getSchemaBundle(tableId, schemaBundleId); - assertEquals(schemaBundle.getId(), schemaBundleId); + com.google.bigtable.admin.v2.SchemaBundle schemaBundle = + adminClient.getSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId); + String id = schemaBundle.getName().substring(schemaBundle.getName().lastIndexOf("/") + 1); + assertEquals(id, schemaBundleId); // Updates the schema bundle. schemaBundleExample.updateSchemaBundle(); - SchemaBundle updatedSchemaBundle = adminClient.getSchemaBundle(tableId, schemaBundleId); + com.google.bigtable.admin.v2.SchemaBundle updatedSchemaBundle = + adminClient.getSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId); assertNotEquals(schemaBundle, updatedSchemaBundle); // Deletes the schema bundle. schemaBundleExample.deleteSchemaBundle(); assertThrows( - NotFoundException.class, () -> adminClient.getSchemaBundle(tableId, schemaBundleId)); + NotFoundException.class, + () -> + adminClient.getSchemaBundle( + "projects/" + + projectId + + "/instances/" + + instanceId + + "/tables/" + + tableId + + "/schemaBundles/" + + schemaBundleId)); } @Test public void testGetSchemaBundle() { schemaBundleExample.createSchemaBundle(); - SchemaBundle schemaBundle = schemaBundleExample.getSchemaBundle(); + com.google.bigtable.admin.v2.SchemaBundle schemaBundle = schemaBundleExample.getSchemaBundle(); assertNotNull(schemaBundle); - assertEquals(schemaBundle.getId(), schemaBundleId); + String id = schemaBundle.getName().substring(schemaBundle.getName().lastIndexOf("/") + 1); + assertEquals(id, schemaBundleId); } @Test @@ -121,7 +171,12 @@ public void testListSchemaBundles() { 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; @@ -132,7 +187,7 @@ private static void garbageCollect() { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } } diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java index d4fd4de3049f..674296c21ec1 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/TableAdminExampleTest.java +++ b/java-bigtable/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,29 @@ 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) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } } @AfterClass @@ -69,13 +76,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 +106,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 @@ -120,14 +138,11 @@ public void testCreateMaxVersionsRuleAndDeleteColumnFamily() { // Deletes cf2. tableAdmin.deleteColumnFamily(); - boolean found = true; - List columnFamilies = adminClient.getTable(tableId).getColumnFamilies(); - for (ColumnFamily columnFamily : columnFamilies) { - if (columnFamily.equals("cf2")) { - found = false; - break; - } - } + com.google.bigtable.admin.v2.GetTableRequest request = + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .build(); + boolean found = !adminClient.getTable(request).getColumnFamiliesMap().containsKey("cf2"); assertTrue(found); } @@ -178,9 +193,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,7 +209,12 @@ 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; @@ -201,7 +225,7 @@ private static void garbageCollect() { continue; } System.out.println("\nGarbage collecting orphaned table: " + tableId); - adminClient.deleteTable(tableId); + adminClient.deleteTable(table.getName()); } } } diff --git a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/deletes/DeletesTest.java b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/deletes/DeletesTest.java index 308607c891af..b19ef506bc0b 100644 --- a/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/deletes/DeletesTest.java +++ b/java-bigtable/samples/snippets/src/test/java/com/example/bigtable/deletes/DeletesTest.java @@ -18,14 +18,13 @@ import com.example.bigtable.MobileTimeSeriesBaseTest; import com.google.api.gax.rpc.ServerStream; -import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient; -import com.google.cloud.bigtable.admin.v2.models.ColumnFamily; +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.models.Query; import com.google.cloud.bigtable.data.v2.models.Row; import com.google.cloud.bigtable.data.v2.models.RowCell; import com.google.cloud.bigtable.data.v2.models.TableId; -import com.google.common.truth.Correspondence; import com.google.common.truth.Truth; import java.io.IOException; import java.util.List; @@ -41,9 +40,21 @@ */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class DeletesTest extends MobileTimeSeriesBaseTest { - private static final Correspondence COLUMN_FAMILY_ID_CORRESPONDENCE = - Correspondence.transforming(ColumnFamily::getId, "ColumnFamily id"); public static BigtableDataClient bigtableDataClient; + private static BigtableTableAdminClientV2 adminClient; + + private static boolean exists(String tableId) { + try { + adminClient.getTable( + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) + .build()); + return true; + } catch (com.google.api.gax.rpc.NotFoundException e) { + return false; + } + } @BeforeClass public static void beforeClass() throws IOException { @@ -52,11 +63,32 @@ public static void beforeClass() throws IOException { writeStatsData(); writePlanData(); bigtableDataClient = BigtableDataClient.create(projectId, instanceId); + BaseBigtableTableAdminSettings adminSettings = + BaseBigtableTableAdminSettings.newBuilder().build(); + adminClient = BigtableTableAdminClientV2.create(adminSettings); } @AfterClass - public static void afterClass() throws IOException { - cleanupTable(); + public static void afterClass() { + try { + cleanupTable(); + } catch (Exception e) { + System.err.println("Failed to cleanup table: " + e.getMessage()); + } + try { + if (bigtableDataClient != null) { + bigtableDataClient.close(); + } + } catch (Exception e) { + System.err.println("Failed to close bigtableDataClient: " + e.getMessage()); + } + try { + if (adminClient != null) { + adminClient.close(); + } + } catch (Exception e) { + System.err.println("Failed to close adminClient: " + e.getMessage()); + } } @Test @@ -166,32 +198,28 @@ public void test6_testDeleteFromColumnFamily() throws IOException { @Test public void test7_testDeleteColumnFamily() throws IOException { - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - Truth.assertThat(tableAdminClient.getTable(TABLE_ID).getColumnFamilies()) - .comparingElementsUsing(COLUMN_FAMILY_ID_CORRESPONDENCE) - .contains(COLUMN_FAMILY_NAME_STATS); - - DeleteColumnFamilyExample deleteColumnFamilyExample = new DeleteColumnFamilyExample(); - deleteColumnFamilyExample.deleteColumnFamily( - projectId, instanceId, TABLE_ID, COLUMN_FAMILY_NAME_STATS); - - Truth.assertThat(tableAdminClient.getTable(TABLE_ID).getColumnFamilies()) - .comparingElementsUsing(COLUMN_FAMILY_ID_CORRESPONDENCE) - .doesNotContain(COLUMN_FAMILY_NAME_STATS); - } + com.google.bigtable.admin.v2.GetTableRequest request = + com.google.bigtable.admin.v2.GetTableRequest.newBuilder() + .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + TABLE_ID) + .build(); + Truth.assertThat(adminClient.getTable(request).getColumnFamiliesMap().keySet()) + .contains(COLUMN_FAMILY_NAME_STATS); + + DeleteColumnFamilyExample deleteColumnFamilyExample = new DeleteColumnFamilyExample(); + deleteColumnFamilyExample.deleteColumnFamily( + projectId, instanceId, TABLE_ID, COLUMN_FAMILY_NAME_STATS); + + Truth.assertThat(adminClient.getTable(request).getColumnFamiliesMap().keySet()) + .doesNotContain(COLUMN_FAMILY_NAME_STATS); } @Test public void test8_testDeleteTable() throws IOException { - try (BigtableTableAdminClient tableAdminClient = - BigtableTableAdminClient.create(projectId, instanceId)) { - Truth.assertThat(tableAdminClient.exists(TABLE_ID)).isTrue(); + Truth.assertThat(exists(TABLE_ID)).isTrue(); - DeleteTableExample deleteTableExample = new DeleteTableExample(); - deleteTableExample.deleteTable(projectId, instanceId, TABLE_ID); + DeleteTableExample deleteTableExample = new DeleteTableExample(); + deleteTableExample.deleteTable(projectId, instanceId, TABLE_ID); - Truth.assertThat(tableAdminClient.exists(TABLE_ID)).isFalse(); - } + Truth.assertThat(exists(TABLE_ID)).isFalse(); } }