From 60e60c20ea623db2445f8845d02ce81fe8225fc3 Mon Sep 17 00:00:00 2001 From: elisheva Date: Thu, 4 Oct 2018 13:55:02 -0400 Subject: [PATCH 1/8] Exist method added --- .../admin/v2/BigtableTableAdminClient.java | 25 ++++++++ .../v2/BigtableTableAdminClientTest.java | 60 +++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java index eba6a51c4f01..f44cafb9268d 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java @@ -324,6 +324,31 @@ public ApiFuture deleteTableAsync(String tableId) { return transformToVoid(this.stub.deleteTableCallable().futureCall(request)); } + /** + * Checks if the table exists + * + *

Sample code: + * + *

{@code
+   * if(client.exists("my-table")) {
+   *   "Table exists";
+   * }
+   * }
+ */ + public boolean exists(String tableId) { + List tableNames = this.listTables(); + for (TableName tableName : tableNames) { + String table = tableName.toString(); + String separator = "/"; + int index = table.lastIndexOf(separator); + String name = table.substring(index + separator.length()); + if (name.equals(tableId)) { + return true; + } + } + return false; + } + /** * Gets the table metadata by tableId. * diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java index 33b6a8b410d3..d02956925207 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java @@ -40,6 +40,7 @@ import com.google.protobuf.Empty; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -303,4 +304,63 @@ public ApiFuture answer(InvocationOnMock invocationOnMock) throws Throwabl // Verify assertThat(wasCalled.get()).isTrue(); } + + @Test + public void testExistsTrue() { + // Setup + com.google.bigtable.admin.v2.CreateTableRequest expectedRequest = + com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() + .setParent(INSTANCE_NAME.toString()).setTableId(TABLE_NAME.getTable()) + .setTable(com.google.bigtable.admin.v2.Table.getDefaultInstance()).build(); + + com.google.bigtable.admin.v2.Table expectedResponse = + com.google.bigtable.admin.v2.Table.newBuilder().setName(TABLE_NAME.toString()).build(); + + Mockito.when(mockCreateTableCallable.futureCall(expectedRequest)) + .thenReturn(ApiFutures.immediateFuture(expectedResponse)); + + com.google.bigtable.admin.v2.ListTablesRequest listTablesRequest = + com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() + .setParent(INSTANCE_NAME.toString()).build(); + + List expectedProtos = Lists.newArrayList(); + expectedProtos.add( + com.google.bigtable.admin.v2.Table.newBuilder().setName(TABLE_NAME.toString()).build()); + + ListTablesPage page0 = Mockito.mock(ListTablesPage.class); + Mockito.when(page0.getValues()).thenReturn(expectedProtos); + ListTablesPagedResponse response0 = Mockito.mock(ListTablesPagedResponse.class); + Mockito.when(response0.getPage()).thenReturn(page0); + + Mockito.when(mockListTableCallable.futureCall(listTablesRequest)).thenReturn(ApiFutures.immediateFuture(response0)); + + // Execute + boolean found = adminClient.exists(TABLE_NAME.getTable()); + + // Verify + Assert.assertTrue(found); + } + + @Test + public void testExistsFalse() { + // Setup + com.google.bigtable.admin.v2.ListTablesRequest listTablesRequest = + com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() + .setParent(INSTANCE_NAME.toString()).build(); + + List expectedProtos = Lists.newArrayList(); + + ListTablesPage page0 = Mockito.mock(ListTablesPage.class); + Mockito.when(page0.getValues()).thenReturn(expectedProtos); + ListTablesPagedResponse response0 = Mockito.mock(ListTablesPagedResponse.class); + Mockito.when(response0.getPage()).thenReturn(page0); + + Mockito.when(mockListTableCallable.futureCall(listTablesRequest)).thenReturn(ApiFutures.immediateFuture(response0)); + + // Execute + boolean found = adminClient.exists(TABLE_NAME.getTable()); + + // Verify + Assert.assertFalse(found); + } } From 257e586dc03c56fa1e0b89fe3bf7d267dd4f1173 Mon Sep 17 00:00:00 2001 From: elisheva Date: Thu, 11 Oct 2018 12:25:48 -0400 Subject: [PATCH 2/8] exists_method_corrections --- .../admin/v2/BigtableTableAdminClient.java | 31 ++++++++++++------- .../v2/BigtableTableAdminClientTest.java | 29 ++++++----------- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java index f44cafb9268d..47b711334789 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java @@ -325,7 +325,7 @@ public ApiFuture deleteTableAsync(String tableId) { } /** - * Checks if the table exists + * Checks if the table specified by the tableId exists * *

Sample code: * @@ -336,17 +336,20 @@ public ApiFuture deleteTableAsync(String tableId) { * } */ public boolean exists(String tableId) { - List tableNames = this.listTables(); - for (TableName tableName : tableNames) { - String table = tableName.toString(); - String separator = "/"; - int index = table.lastIndexOf(separator); - String name = table.substring(index + separator.length()); - if (name.equals(tableId)) { - return true; + return awaitFuture(existsAsync(tableId)).booleanValue(); + } + + public ApiFuture existsAsync(final String tableId) { + return ApiFutures.transform(listTablesAsync(), new ApiFunction, Boolean>() { + @Override public Boolean apply(List tableNames) { + for(TableName tableName : tableNames) { + if(tableName.getTable().equalsIgnoreCase(tableId)) { + return true; + } + } + return false; } - } - return false; + }, MoreExecutors.directExecutor()); } /** @@ -454,7 +457,11 @@ public List listTables() { // TODO(igorbernstein2): consider changing this method to use relative table ids. @SuppressWarnings("WeakerAccess") public ApiFuture> listTablesAsync() { - ListTablesRequest request = ListTablesRequest.newBuilder().setParent(instanceName.toString()) + return listTablesAsync(com.google.bigtable.admin.v2.Table.View.NAME_ONLY); + } + + public ApiFuture> listTablesAsync(com.google.bigtable.admin.v2.Table.View view) { + ListTablesRequest request = ListTablesRequest.newBuilder().setParent(instanceName.toString()).setView(view) .build(); // TODO(igorbernstein2): try to upstream pagination spooling or figure out a way to expose the diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java index d02956925207..c145c3c223e8 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java @@ -40,7 +40,6 @@ import com.google.protobuf.Empty; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -208,6 +207,7 @@ public void testListTables() { com.google.bigtable.admin.v2.ListTablesRequest expectedRequest = com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() .setParent(INSTANCE_NAME.toString()) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) .build(); // 3 Tables spread across 2 pages @@ -308,20 +308,9 @@ public ApiFuture answer(InvocationOnMock invocationOnMock) throws Throwabl @Test public void testExistsTrue() { // Setup - com.google.bigtable.admin.v2.CreateTableRequest expectedRequest = - com.google.bigtable.admin.v2.CreateTableRequest.newBuilder() - .setParent(INSTANCE_NAME.toString()).setTableId(TABLE_NAME.getTable()) - .setTable(com.google.bigtable.admin.v2.Table.getDefaultInstance()).build(); - - com.google.bigtable.admin.v2.Table expectedResponse = - com.google.bigtable.admin.v2.Table.newBuilder().setName(TABLE_NAME.toString()).build(); - - Mockito.when(mockCreateTableCallable.futureCall(expectedRequest)) - .thenReturn(ApiFutures.immediateFuture(expectedResponse)); - - com.google.bigtable.admin.v2.ListTablesRequest listTablesRequest = - com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() - .setParent(INSTANCE_NAME.toString()).build(); + ListTablesRequest listTablesRequest = + ListTablesRequest.newBuilder().setParent(INSTANCE_NAME.toString()) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY).build(); List expectedProtos = Lists.newArrayList(); expectedProtos.add( @@ -338,15 +327,15 @@ public void testExistsTrue() { boolean found = adminClient.exists(TABLE_NAME.getTable()); // Verify - Assert.assertTrue(found); + assertThat(found).isTrue(); } @Test public void testExistsFalse() { // Setup - com.google.bigtable.admin.v2.ListTablesRequest listTablesRequest = - com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() - .setParent(INSTANCE_NAME.toString()).build(); + ListTablesRequest listTablesRequest = + ListTablesRequest.newBuilder().setParent(INSTANCE_NAME.toString()) + .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY).build(); List expectedProtos = Lists.newArrayList(); @@ -361,6 +350,6 @@ public void testExistsFalse() { boolean found = adminClient.exists(TABLE_NAME.getTable()); // Verify - Assert.assertFalse(found); + assertThat(found).isFalse(); } } From 71e561a3e46440a3756ac5b5fa2f5d6dd0fd5ab8 Mon Sep 17 00:00:00 2001 From: elisheva Date: Wed, 17 Oct 2018 16:15:09 -0400 Subject: [PATCH 3/8] exists_method_updated --- .../admin/v2/BigtableTableAdminClient.java | 32 ++++++++----- .../v2/BigtableTableAdminClientTest.java | 47 ++++++------------- 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java index 47b711334789..a7dedbf592d6 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java @@ -19,6 +19,7 @@ import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; +import com.google.api.gax.rpc.NotFoundException; import com.google.bigtable.admin.v2.DeleteTableRequest; import com.google.bigtable.admin.v2.DropRowRangeRequest; import com.google.bigtable.admin.v2.GetTableRequest; @@ -339,14 +340,18 @@ public boolean exists(String tableId) { return awaitFuture(existsAsync(tableId)).booleanValue(); } - public ApiFuture existsAsync(final String tableId) { - return ApiFutures.transform(listTablesAsync(), new ApiFunction, Boolean>() { - @Override public Boolean apply(List tableNames) { - for(TableName tableName : tableNames) { - if(tableName.getTable().equalsIgnoreCase(tableId)) { - return true; - } - } + public ApiFuture existsAsync(String tableId) { + + ApiFuture protoFuture = getTableAsync(tableId, com.google.bigtable.admin.v2.Table.View.NAME_ONLY); + + ApiFuture existsFuture = ApiFutures.transform(protoFuture, new ApiFunction() { + @Override public Boolean apply(Table ignored) { + return true; + } + }, MoreExecutors.directExecutor()); + + return ApiFutures.catching(existsFuture, NotFoundException.class, new ApiFunction() { + @Override public Boolean apply(NotFoundException ignored) { return false; } }, MoreExecutors.directExecutor()); @@ -402,8 +407,13 @@ public Table getTable(String tableId) { */ @SuppressWarnings("WeakerAccess") public ApiFuture
getTableAsync(String tableId) { + return getTableAsync(tableId, com.google.bigtable.admin.v2.Table.View.SCHEMA_VIEW); + } + + private ApiFuture
getTableAsync(String tableId, com.google.bigtable.admin.v2.Table.View view) { GetTableRequest request = GetTableRequest.newBuilder() .setName(getTableName(tableId)) + .setView(view) .build(); return transformToTableResponse( @@ -457,11 +467,7 @@ public List listTables() { // TODO(igorbernstein2): consider changing this method to use relative table ids. @SuppressWarnings("WeakerAccess") public ApiFuture> listTablesAsync() { - return listTablesAsync(com.google.bigtable.admin.v2.Table.View.NAME_ONLY); - } - - public ApiFuture> listTablesAsync(com.google.bigtable.admin.v2.Table.View view) { - ListTablesRequest request = ListTablesRequest.newBuilder().setParent(instanceName.toString()).setView(view) + ListTablesRequest request = ListTablesRequest.newBuilder().setParent(instanceName.toString()) .build(); // TODO(igorbernstein2): try to upstream pagination spooling or figure out a way to expose the diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java index c145c3c223e8..7b528ba5d2fb 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java @@ -19,14 +19,10 @@ import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.UnaryCallable; -import com.google.bigtable.admin.v2.ColumnFamily; -import com.google.bigtable.admin.v2.DeleteTableRequest; -import com.google.bigtable.admin.v2.DropRowRangeRequest; -import com.google.bigtable.admin.v2.GcRule; -import com.google.bigtable.admin.v2.GetTableRequest; -import com.google.bigtable.admin.v2.InstanceName; -import com.google.bigtable.admin.v2.ListTablesRequest; +import com.google.bigtable.admin.v2.*; import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification; import com.google.bigtable.admin.v2.TableName; import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPage; @@ -40,9 +36,12 @@ import com.google.protobuf.Empty; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; + +import io.grpc.Status; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; @@ -184,6 +183,7 @@ public void testGetTable() { // Setup GetTableRequest expectedRequest = GetTableRequest.newBuilder() .setName(TABLE_NAME.toString()) + .setView(com.google.bigtable.admin.v2.Table.View.SCHEMA_VIEW) .build(); com.google.bigtable.admin.v2.Table expectedResponse = com.google.bigtable.admin.v2.Table @@ -207,7 +207,6 @@ public void testListTables() { com.google.bigtable.admin.v2.ListTablesRequest expectedRequest = com.google.bigtable.admin.v2.ListTablesRequest.newBuilder() .setParent(INSTANCE_NAME.toString()) - .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY) .build(); // 3 Tables spread across 2 pages @@ -308,20 +307,12 @@ public ApiFuture answer(InvocationOnMock invocationOnMock) throws Throwabl @Test public void testExistsTrue() { // Setup - ListTablesRequest listTablesRequest = - ListTablesRequest.newBuilder().setParent(INSTANCE_NAME.toString()) - .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY).build(); - - List expectedProtos = Lists.newArrayList(); - expectedProtos.add( - com.google.bigtable.admin.v2.Table.newBuilder().setName(TABLE_NAME.toString()).build()); - - ListTablesPage page0 = Mockito.mock(ListTablesPage.class); - Mockito.when(page0.getValues()).thenReturn(expectedProtos); - ListTablesPagedResponse response0 = Mockito.mock(ListTablesPagedResponse.class); - Mockito.when(response0.getPage()).thenReturn(page0); + com.google.bigtable.admin.v2.Table expectedResponse = + com.google.bigtable.admin.v2.Table.newBuilder() + .setName(TABLE_NAME.toString()) + .build(); - Mockito.when(mockListTableCallable.futureCall(listTablesRequest)).thenReturn(ApiFutures.immediateFuture(response0)); + Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))).thenReturn(ApiFutures.immediateFuture(expectedResponse)); // Execute boolean found = adminClient.exists(TABLE_NAME.getTable()); @@ -333,18 +324,8 @@ public void testExistsTrue() { @Test public void testExistsFalse() { // Setup - ListTablesRequest listTablesRequest = - ListTablesRequest.newBuilder().setParent(INSTANCE_NAME.toString()) - .setView(com.google.bigtable.admin.v2.Table.View.NAME_ONLY).build(); - - List expectedProtos = Lists.newArrayList(); - - ListTablesPage page0 = Mockito.mock(ListTablesPage.class); - Mockito.when(page0.getValues()).thenReturn(expectedProtos); - ListTablesPagedResponse response0 = Mockito.mock(ListTablesPagedResponse.class); - Mockito.when(response0.getPage()).thenReturn(page0); - - Mockito.when(mockListTableCallable.futureCall(listTablesRequest)).thenReturn(ApiFutures.immediateFuture(response0)); + NotFoundException exception = new NotFoundException("fake error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false); + Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))).thenReturn(ApiFutures.immediateFailedFuture(exception)); // Execute boolean found = adminClient.exists(TABLE_NAME.getTable()); From d5552a39f415f3ed02511bd20a8af1492fa3078a Mon Sep 17 00:00:00 2001 From: elisheva Date: Thu, 18 Oct 2018 11:29:59 -0400 Subject: [PATCH 4/8] style_fixes --- .../admin/v2/BigtableTableAdminClient.java | 25 ++++++++++++++++++- .../v2/BigtableTableAdminClientTest.java | 17 +++++++------ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java index a7dedbf592d6..db3c1d71bea6 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java @@ -332,7 +332,7 @@ public ApiFuture deleteTableAsync(String tableId) { * *
{@code
    * if(client.exists("my-table")) {
-   *   "Table exists";
+   *   System.out.println("Table exists");
    * }
    * }
*/ @@ -340,6 +340,29 @@ public boolean exists(String tableId) { return awaitFuture(existsAsync(tableId)).booleanValue(); } + /** + * Asynchronously checks if the table specified by the tableId exists + * + *

Sample code: + * + *

{@code
+   * ApiFuture found = client.existsAsync("my-table");
+   *
+   * ApiFutures.addCallback(
+   *  found,
+   *  new ApiFutureCallback() {
+   *    public void onSuccess(Boolean found) {
+   *      System.out.println("Table exists");
+   *    }
+   *
+   *    public void onFailure(Throwable t) {
+   *      t.printStackTrace();
+   *    }
+   *  },
+   *  MoreExecutors.directExecutor()
+   * );
+   * }
+ */ public ApiFuture existsAsync(String tableId) { ApiFuture
protoFuture = getTableAsync(tableId, com.google.bigtable.admin.v2.Table.View.NAME_ONLY); diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java index 7b528ba5d2fb..32abe0a2f874 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java @@ -24,7 +24,6 @@ import com.google.api.gax.rpc.UnaryCallable; import com.google.bigtable.admin.v2.*; import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification; -import com.google.bigtable.admin.v2.TableName; import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPage; import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPagedResponse; import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; @@ -308,11 +307,12 @@ public ApiFuture answer(InvocationOnMock invocationOnMock) throws Throwabl public void testExistsTrue() { // Setup com.google.bigtable.admin.v2.Table expectedResponse = - com.google.bigtable.admin.v2.Table.newBuilder() - .setName(TABLE_NAME.toString()) - .build(); + com.google.bigtable.admin.v2.Table.newBuilder() + .setName(TABLE_NAME.toString()) + .build(); - Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))).thenReturn(ApiFutures.immediateFuture(expectedResponse)); + Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))) + .thenReturn(ApiFutures.immediateFuture(expectedResponse)); // Execute boolean found = adminClient.exists(TABLE_NAME.getTable()); @@ -324,8 +324,11 @@ public void testExistsTrue() { @Test public void testExistsFalse() { // Setup - NotFoundException exception = new NotFoundException("fake error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false); - Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))).thenReturn(ApiFutures.immediateFailedFuture(exception)); + NotFoundException exception = + new NotFoundException("fake error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false); + + Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))) + .thenReturn(ApiFutures.immediateFailedFuture(exception)); // Execute boolean found = adminClient.exists(TABLE_NAME.getTable()); From e399d955d5eb2a145a6ef5146842a321b7807fee Mon Sep 17 00:00:00 2001 From: elisheva Date: Thu, 18 Oct 2018 12:59:04 -0400 Subject: [PATCH 5/8] fixed_imports --- .../admin/v2/BigtableTableAdminClientTest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java index 32abe0a2f874..9736e2c3aa85 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java @@ -22,8 +22,16 @@ import com.google.api.gax.grpc.GrpcStatusCode; import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.UnaryCallable; -import com.google.bigtable.admin.v2.*; +import com.google.bigtable.admin.v2.ColumnFamily; +import com.google.bigtable.admin.v2.DeleteTableRequest; +import com.google.bigtable.admin.v2.DropRowRangeRequest; +import com.google.bigtable.admin.v2.GcRule; +import com.google.bigtable.admin.v2.GetTableRequest; +import com.google.bigtable.admin.v2.InstanceName; +import com.google.bigtable.admin.v2.ListTablesRequest; import com.google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification; +import com.google.bigtable.admin.v2.Table.View; +import com.google.bigtable.admin.v2.TableName; import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPage; import com.google.cloud.bigtable.admin.v2.BaseBigtableTableAdminClient.ListTablesPagedResponse; import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest; @@ -182,7 +190,7 @@ public void testGetTable() { // Setup GetTableRequest expectedRequest = GetTableRequest.newBuilder() .setName(TABLE_NAME.toString()) - .setView(com.google.bigtable.admin.v2.Table.View.SCHEMA_VIEW) + .setView(View.SCHEMA_VIEW) .build(); com.google.bigtable.admin.v2.Table expectedResponse = com.google.bigtable.admin.v2.Table From 8516f90f354610c533688d05e8d4a135ed7aab70 Mon Sep 17 00:00:00 2001 From: elisheva Date: Mon, 22 Oct 2018 10:21:15 -0400 Subject: [PATCH 6/8] sample code --- .../cloud/bigtable/admin/v2/BigtableTableAdminClient.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java index db3c1d71bea6..a7489c58ef10 100644 --- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java +++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java @@ -352,7 +352,11 @@ public boolean exists(String tableId) { * found, * new ApiFutureCallback() { * public void onSuccess(Boolean found) { - * System.out.println("Table exists"); + * if (found) { + * System.out.println("Table exists"); + * } else { + * System.out.println("Table not found"); + * } * } * * public void onFailure(Throwable t) { @@ -467,7 +471,7 @@ public List listTables() { *

Sample code: * *

{@code
-   * ApiFuture> listFuture = client.listTables();
+   * ApiFuture> listFuture = client.listTablesAsync();
    *
    * ApiFutures.addCallback(
    *   listFuture,

From a407ecb6f451f902b31c5973f38d97336263da93 Mon Sep 17 00:00:00 2001
From: elisheva-qlogic 
Date: Tue, 23 Oct 2018 13:57:01 -0400
Subject: [PATCH 7/8] fix

---
 .../cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java
index 9736e2c3aa85..23f6f400bfce 100644
--- a/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java
+++ b/google-cloud-clients/google-cloud-bigtable-admin/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientTest.java
@@ -336,7 +336,7 @@ public void testExistsFalse() {
         new NotFoundException("fake error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false);
 
     Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class)))
-        .thenReturn(ApiFutures.immediateFailedFuture(exception));
+            .thenReturn(ApiFutures.immediateFailedFuture(exception));
 
     // Execute
     boolean found = adminClient.exists(TABLE_NAME.getTable());

From e668e0895341978c3d117f429a37395d17cb0190 Mon Sep 17 00:00:00 2001
From: Igor Bernstein 
Date: Tue, 23 Oct 2018 16:56:38 -0400
Subject: [PATCH 8/8] Fix merge conflict

---
 .../cloud/bigtable/admin/v2/BigtableTableAdminClient.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java
index 7689fc3b97b6..ac63ac5acb60 100644
--- a/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java
+++ b/google-cloud-clients/google-cloud-bigtable-admin/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClient.java
@@ -336,7 +336,7 @@ public ApiFuture deleteTableAsync(String tableId) {
    * }
*/ public boolean exists(String tableId) { - return awaitFuture(existsAsync(tableId)).booleanValue(); + return ApiExceptions.callAndTranslateApiException(existsAsync(tableId)); } /**