Skip to content
This repository was archived by the owner on May 8, 2026. It is now read-only.

Commit cca92f8

Browse files
authored
Merge branch 'refactor-consistency-request-2' into escape-hatch
2 parents baf1962 + d145048 commit cca92f8

3 files changed

Lines changed: 52 additions & 21 deletions

File tree

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableInstanceAdminClientV2.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
/**
2222
* Modern Cloud Bigtable Instance Admin Client.
2323
*
24-
* <p>This client extends the auto-generated {@link BaseBigtableInstanceAdminClient} to provide
25-
* manual overrides and additional convenience methods for Critical User Journeys (CUJs) that the
26-
* GAPIC generator cannot handle natively.
24+
* <p>This client extends the {@link BaseBigtableInstanceAdminClient} to provide a simplified and
25+
* enhanced API surface for managing Cloud Bigtable instances and clusters.
2726
*/
2827
public class BigtableInstanceAdminClientV2 extends BaseBigtableInstanceAdminClient {
2928

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientV2.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,16 @@
4545
import io.grpc.MethodDescriptor.MethodType;
4646
import java.io.IOException;
4747
import java.io.InputStream;
48+
import java.time.Duration;
4849
import java.util.concurrent.ExecutionException;
49-
import org.threeten.bp.Duration;
5050

5151
/**
5252
* Modern Cloud Bigtable Table Admin Client.
5353
*
54-
* <p>This client extends the auto-generated {@link BaseBigtableTableAdminClient} to provide manual
55-
* overrides and additional convenience methods for Critical User Journeys (CUJs) that the GAPIC
56-
* generator cannot handle natively (e.g., chained Long Running Operations, Consistency Polling).
54+
* <p>This client extends the {@link BaseBigtableTableAdminClient} to provide enhanced convenience
55+
* methods for table administration. It improves the user experience by handling chained Long
56+
* Running Operations (such as seamlessly restoring and then optimizing a table) and provides
57+
* built-in, automated polling for consistency tokens.
5758
*/
5859
public class BigtableTableAdminClientV2 extends BaseBigtableTableAdminClient {
5960
private final com.google.cloud.bigtable.admin.v2.stub.AwaitConsistencyCallable
@@ -95,11 +96,11 @@ protected BigtableTableAdminClientV2(BigtableTableAdminStub stub) {
9596
RetrySettings.newBuilder()
9697
.setTotalTimeout(
9798
settings.checkConsistencySettings().getRetrySettings().getTotalTimeout())
98-
.setInitialRetryDelay(Duration.ofSeconds(10))
99+
.setInitialRetryDelayDuration(Duration.ofSeconds(10))
99100
.setRetryDelayMultiplier(1.0)
100-
.setMaxRetryDelay(Duration.ofSeconds(10))
101-
.setInitialRpcTimeout(Duration.ZERO)
102-
.setMaxRpcTimeout(Duration.ZERO)
101+
.setMaxRetryDelayDuration(Duration.ofSeconds(10))
102+
.setInitialRpcTimeoutDuration(Duration.ZERO)
103+
.setMaxRpcTimeoutDuration(Duration.ZERO)
103104
.setRpcTimeoutMultiplier(1.0)
104105
.build();
105106

@@ -157,7 +158,7 @@ public Operation parse(InputStream stream) {
157158
OperationCallSettings.<Void, Empty, OptimizeRestoredTableMetadata>newBuilder()
158159
.setInitialCallSettings(
159160
UnaryCallSettings.<Void, OperationSnapshot>newUnaryCallSettingsBuilder()
160-
.setSimpleTimeoutNoRetries(Duration.ZERO)
161+
.setSimpleTimeoutNoRetriesDuration(Duration.ZERO)
161162
.build())
162163
.setMetadataTransformer(
163164
new ApiFunction<OperationSnapshot, OptimizeRestoredTableMetadata>() {
@@ -176,13 +177,13 @@ public Empty apply(OperationSnapshot input) {
176177
.setPollingAlgorithm(
177178
OperationTimedPollAlgorithm.create(
178179
RetrySettings.newBuilder()
179-
.setInitialRetryDelay(Duration.ofMillis(500L))
180+
.setInitialRetryDelayDuration(Duration.ofMillis(500L))
180181
.setRetryDelayMultiplier(1.5)
181-
.setMaxRetryDelay(Duration.ofMillis(5000L))
182-
.setInitialRpcTimeout(Duration.ZERO)
182+
.setMaxRetryDelayDuration(Duration.ofMillis(5000L))
183+
.setInitialRpcTimeoutDuration(Duration.ZERO)
183184
.setRpcTimeoutMultiplier(1.0)
184-
.setMaxRpcTimeout(Duration.ZERO)
185-
.setTotalTimeout(Duration.ofMillis(600000L))
185+
.setMaxRpcTimeoutDuration(Duration.ZERO)
186+
.setTotalTimeoutDuration(Duration.ofMillis(600000L))
186187
.build()))
187188
.build();
188189

@@ -317,9 +318,9 @@ private UnaryCallable<ConsistencyRequest, Void> getAwaitConsistencyCallable() {
317318
return awaitConsistencyCallable;
318319
}
319320
throw new IllegalStateException(
320-
"com.google.cloud.bigtable.admin.v2.stub.AwaitConsistencyCallable not initialized."
321-
+ " BigtableTableAdminClientV2 must be initialized via settings to use this"
322-
+ " functionality.");
321+
"AwaitConsistencyCallable not initialized. BigtableTableAdminClientV2 must be "
322+
+ "initialized via BigtableTableAdminClientV2.create(BaseBigtableTableAdminSettings) "
323+
+ "to use this functionality.");
323324
}
324325

325326
private OperationCallable<Void, Empty, OptimizeRestoredTableMetadata>
@@ -329,6 +330,7 @@ private UnaryCallable<ConsistencyRequest, Void> getAwaitConsistencyCallable() {
329330
}
330331
throw new IllegalStateException(
331332
"OptimizeRestoredTableCallable not initialized. BigtableTableAdminClientV2 must be "
332-
+ "initialized via settings to use this functionality.");
333+
+ "initialized via BigtableTableAdminClientV2.create(BaseBigtableTableAdminSettings) "
334+
+ "to use this functionality.");
333335
}
334336
}

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/admin/v2/BigtableTableAdminClientV2Test.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,34 @@ public void testCreateClientWithSettings() throws Exception {
152152
assertThat(settingsClient.getStub()).isNotInstanceOf(EnhancedBigtableTableAdminStub.class);
153153
}
154154
}
155+
156+
@Test
157+
public void testAwaitConsistency_ThrowsWhenNotInitialized() {
158+
BigtableTableAdminClientV2 uninitializedClient = BigtableTableAdminClientV2.create(mockStub);
159+
160+
try {
161+
uninitializedClient.waitForConsistency(TABLE_NAME, "token");
162+
org.junit.Assert.fail("Expected IllegalStateException");
163+
} catch (IllegalStateException e) {
164+
assertThat(e.getMessage())
165+
.contains("BigtableTableAdminClientV2.create(BaseBigtableTableAdminSettings)");
166+
}
167+
}
168+
169+
@Test
170+
public void testOptimizeRestoredTable_ThrowsWhenNotInitialized() {
171+
BigtableTableAdminClientV2 uninitializedClient = BigtableTableAdminClientV2.create(mockStub);
172+
173+
OptimizeRestoredTableOperationToken mockToken =
174+
Mockito.mock(OptimizeRestoredTableOperationToken.class);
175+
Mockito.when(mockToken.getOperationName()).thenReturn("op-name");
176+
177+
try {
178+
uninitializedClient.awaitOptimizeRestoredTableAsync(mockToken);
179+
org.junit.Assert.fail("Expected IllegalStateException");
180+
} catch (IllegalStateException e) {
181+
assertThat(e.getMessage())
182+
.contains("BigtableTableAdminClientV2.create(BaseBigtableTableAdminSettings)");
183+
}
184+
}
155185
}

0 commit comments

Comments
 (0)