Skip to content

Commit 8d75580

Browse files
committed
add request deadline for ping and warm
1 parent adeedda commit 8d75580

File tree

6 files changed

+50
-17
lines changed

6 files changed

+50
-17
lines changed

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableChannelPrimer.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222
import com.google.api.gax.grpc.GrpcTransportChannel;
2323
import com.google.api.gax.rpc.FixedTransportChannelProvider;
2424
import com.google.auth.Credentials;
25-
import com.google.bigtable.v2.InstanceName;
2625
import com.google.bigtable.v2.PingAndWarmRequest;
26+
import com.google.cloud.bigtable.data.v2.internal.NameUtil;
2727
import com.google.common.base.Preconditions;
28-
import com.google.protobuf.ByteString;
2928
import io.grpc.ManagedChannel;
3029
import java.io.IOException;
3130
import java.util.concurrent.ExecutionException;
3231
import java.util.logging.Logger;
33-
import org.threeten.bp.Duration;
3432

3533
/**
3634
* A channel warmer that ensures that a Bigtable channel is ready to be used before being added to
@@ -43,9 +41,6 @@
4341
class BigtableChannelPrimer implements ChannelPrimer {
4442
private static Logger LOG = Logger.getLogger(BigtableChannelPrimer.class.toString());
4543

46-
static ByteString PRIMING_ROW_KEY = ByteString.copyFromUtf8("nonexistent-priming-row");
47-
private static Duration PRIME_REQUEST_TIMEOUT = Duration.ofSeconds(30);
48-
4944
private final EnhancedBigtableStubSettings settingsTemplate;
5045

5146
static BigtableChannelPrimer create(
@@ -94,7 +89,7 @@ private void sendPrimeRequests(ManagedChannel managedChannel) throws IOException
9489
PingAndWarmRequest request =
9590
PingAndWarmRequest.newBuilder()
9691
.setName(
97-
InstanceName.format(
92+
NameUtil.formatInstanceName(
9893
primingSettings.getProjectId(), primingSettings.getInstanceId()))
9994
.setAppProfileId(primingSettings.getAppProfileId())
10095
.build();

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -816,8 +816,8 @@ private UnaryCallable<PingAndWarmRequest, PingAndWarmResponse> createPingAndWarm
816816
@Override
817817
public Map<String, String> extract(PingAndWarmRequest request) {
818818
return ImmutableMap.of(
819-
"name", request.getName(),
820-
"app_profile_id", request.getAppProfileId());
819+
"name", request.getName(),
820+
"app_profile_id", request.getAppProfileId());
821821
}
822822
})
823823
.build(),

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.google.api.gax.rpc.TransportChannelProvider;
3434
import com.google.api.gax.rpc.UnaryCallSettings;
3535
import com.google.auth.Credentials;
36+
import com.google.bigtable.v2.PingAndWarmRequest;
3637
import com.google.cloud.bigtable.Version;
3738
import com.google.cloud.bigtable.data.v2.models.ConditionalRowMutation;
3839
import com.google.cloud.bigtable.data.v2.models.KeyOffset;
@@ -94,6 +95,8 @@ public class EnhancedBigtableStubSettings extends StubSettings<EnhancedBigtableS
9495
private static final Set<Code> IDEMPOTENT_RETRY_CODES =
9596
ImmutableSet.of(Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE);
9697

98+
private static Duration PRIME_REQUEST_TIMEOUT = Duration.ofSeconds(30);
99+
97100
// Copy of default retrying settings in the yaml
98101
private static final RetrySettings IDEMPOTENT_RETRY_SETTINGS =
99102
RetrySettings.newBuilder()
@@ -173,6 +176,7 @@ public class EnhancedBigtableStubSettings extends StubSettings<EnhancedBigtableS
173176
private final BigtableBulkReadRowsCallSettings bulkReadRowsSettings;
174177
private final UnaryCallSettings<ConditionalRowMutation, Boolean> checkAndMutateRowSettings;
175178
private final UnaryCallSettings<ReadModifyWriteRow, Row> readModifyWriteRowSettings;
179+
private final UnaryCallSettings<PingAndWarmRequest, Void> pingAndWarmSettings;
176180

177181
private EnhancedBigtableStubSettings(Builder builder) {
178182
super(builder);
@@ -208,6 +212,7 @@ private EnhancedBigtableStubSettings(Builder builder) {
208212
bulkReadRowsSettings = builder.bulkReadRowsSettings.build();
209213
checkAndMutateRowSettings = builder.checkAndMutateRowSettings.build();
210214
readModifyWriteRowSettings = builder.readModifyWriteRowSettings.build();
215+
pingAndWarmSettings = builder.pingAndWarmSettings.build();
211216
}
212217

213218
/** Create a new builder. */
@@ -494,6 +499,15 @@ public UnaryCallSettings<ReadModifyWriteRow, Row> readModifyWriteRowSettings() {
494499
return readModifyWriteRowSettings;
495500
}
496501

502+
/**
503+
* Returns the object with the settings used for calls to PingAndWarm.
504+
*
505+
* <p>By default the retries are disabled for PingAndWarm and deadline is set to 30 seconds.
506+
*/
507+
UnaryCallSettings<PingAndWarmRequest, Void> pingAndWarmSettings() {
508+
return pingAndWarmSettings;
509+
}
510+
497511
/** Returns a builder containing all the values of this settings class. */
498512
public Builder toBuilder() {
499513
return new Builder(this);
@@ -518,6 +532,7 @@ public static class Builder extends StubSettings.Builder<EnhancedBigtableStubSet
518532
private final UnaryCallSettings.Builder<ConditionalRowMutation, Boolean>
519533
checkAndMutateRowSettings;
520534
private final UnaryCallSettings.Builder<ReadModifyWriteRow, Row> readModifyWriteRowSettings;
535+
private final UnaryCallSettings.Builder<PingAndWarmRequest, Void> pingAndWarmSettings;
521536

522537
/**
523538
* Initializes a new Builder with sane defaults for all settings.
@@ -629,6 +644,15 @@ private Builder() {
629644

630645
readModifyWriteRowSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
631646
copyRetrySettings(baseDefaults.readModifyWriteRowSettings(), readModifyWriteRowSettings);
647+
648+
pingAndWarmSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
649+
pingAndWarmSettings.setRetrySettings(
650+
RetrySettings.newBuilder()
651+
.setMaxAttempts(1)
652+
.setInitialRpcTimeout(PRIME_REQUEST_TIMEOUT)
653+
.setMaxRpcTimeout(PRIME_REQUEST_TIMEOUT)
654+
.setTotalTimeout(PRIME_REQUEST_TIMEOUT)
655+
.build());
632656
}
633657

634658
private Builder(EnhancedBigtableStubSettings settings) {
@@ -649,6 +673,7 @@ private Builder(EnhancedBigtableStubSettings settings) {
649673
bulkReadRowsSettings = settings.bulkReadRowsSettings.toBuilder();
650674
checkAndMutateRowSettings = settings.checkAndMutateRowSettings.toBuilder();
651675
readModifyWriteRowSettings = settings.readModifyWriteRowSettings.toBuilder();
676+
pingAndWarmSettings = settings.pingAndWarmSettings.toBuilder();
652677
}
653678
// <editor-fold desc="Private Helpers">
654679

@@ -817,6 +842,11 @@ public UnaryCallSettings.Builder<ReadModifyWriteRow, Row> readModifyWriteRowSett
817842
return readModifyWriteRowSettings;
818843
}
819844

845+
/** Returns the builder with the settings used for calls to PingAndWarm. */
846+
public UnaryCallSettings.Builder<PingAndWarmRequest, Void> pingAndWarmSettings() {
847+
return pingAndWarmSettings;
848+
}
849+
820850
@SuppressWarnings("unchecked")
821851
public EnhancedBigtableStubSettings build() {
822852
Preconditions.checkState(projectId != null, "Project id must be set");
@@ -864,6 +894,7 @@ public String toString() {
864894
.add("bulkReadRowsSettings", bulkReadRowsSettings)
865895
.add("checkAndMutateRowSettings", checkAndMutateRowSettings)
866896
.add("readModifyWriteRowSettings", readModifyWriteRowSettings)
897+
.add("pingAndWarmSettings", pingAndWarmSettings)
867898
.add("parent", super.toString())
868899
.toString();
869900
}

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactoryTest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -345,13 +345,9 @@ public void mutateRow(
345345
@Override
346346
public void pingAndWarm(
347347
PingAndWarmRequest request, StreamObserver<PingAndWarmResponse> responseObserver) {
348-
try {
349-
pingAndWarmRequests.add(request);
350-
responseObserver.onNext(pingAndWarmCallback.apply(request));
351-
responseObserver.onCompleted();
352-
} catch (RuntimeException e) {
353-
responseObserver.onError(e);
354-
}
348+
pingAndWarmRequests.add(request);
349+
responseObserver.onNext(pingAndWarmCallback.apply(request));
350+
responseObserver.onCompleted();
355351
}
356352
}
357353

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/BigtableChannelPrimerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import com.google.auth.oauth2.AccessToken;
2222
import com.google.auth.oauth2.OAuth2Credentials;
2323
import com.google.bigtable.v2.BigtableGrpc.BigtableImplBase;
24-
import com.google.cloud.bigtable.data.v2.FakeServiceBuilder;
2524
import com.google.bigtable.v2.PingAndWarmRequest;
2625
import com.google.bigtable.v2.PingAndWarmResponse;
26+
import com.google.cloud.bigtable.data.v2.FakeServiceBuilder;
2727
import io.grpc.ManagedChannel;
2828
import io.grpc.ManagedChannelBuilder;
2929
import io.grpc.Metadata;

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.api.gax.rpc.UnaryCallSettings;
2929
import com.google.api.gax.rpc.WatchdogProvider;
3030
import com.google.auth.Credentials;
31+
import com.google.bigtable.v2.PingAndWarmRequest;
3132
import com.google.cloud.bigtable.data.v2.models.ConditionalRowMutation;
3233
import com.google.cloud.bigtable.data.v2.models.KeyOffset;
3334
import com.google.cloud.bigtable.data.v2.models.Query;
@@ -645,6 +646,15 @@ public void checkAndMutateRowSettingsAreSane() {
645646
assertThat(builder.getRetryableCodes()).isEmpty();
646647
}
647648

649+
@Test
650+
public void pingAndWarmRetriesAreDisabled() {
651+
UnaryCallSettings.Builder<PingAndWarmRequest, Void> builder =
652+
EnhancedBigtableStubSettings.newBuilder().pingAndWarmSettings();
653+
654+
assertThat(builder.getRetrySettings().getMaxAttempts()).isAtMost(1);
655+
assertThat(builder.getRetrySettings().getInitialRpcTimeout()).isAtMost(Duration.ofSeconds(30));
656+
}
657+
648658
private void verifyRetrySettingAreSane(Set<Code> retryCodes, RetrySettings retrySettings) {
649659
assertThat(retryCodes).containsAtLeast(Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE);
650660

@@ -701,6 +711,7 @@ public void isRefreshingChannelFalseValueTest() {
701711
"bulkReadRowsSettings",
702712
"checkAndMutateRowSettings",
703713
"readModifyWriteRowSettings",
714+
"pingAndWarmSettings",
704715
};
705716

706717
@Test

0 commit comments

Comments
 (0)