/** * Creates a callable chain to handle point ReadRows RPCs. The chain will: * * <ul> * <li>Convert a {@link Query} into a {@link com.google.bigtable.v2.ReadRowsRequest} and * dispatch the RPC. * <li>Upon receiving the response stream, it will merge the {@link * com.google.bigtable.v2.ReadRowsResponse.CellChunk}s in logical rows. The actual row * implementation can be configured in by the {@code rowAdapter} parameter. * <li>Retry/resume on failure. * <li>Filter out marker rows. * </ul> */ public <RowT> UnaryCallable<Query, RowT> createReadRowCallable(RowAdapter<RowT> rowAdapter) { return createReadRowsCallable( ServerStreamingCallSettings.<Query, Row>newBuilder() .setRetryableCodes(settings.readRowSettings().getRetryableCodes()) .setRetrySettings(settings.readRowSettings().getRetrySettings()) .setIdleTimeout(settings.readRowSettings().getRetrySettings().getTotalTimeout()) .build(), rowAdapter) .first(); }
.createReadSessionSettings() .setRetryableCodes(settings.createReadSessionSettings().getRetryableCodes()) .setRetrySettings(settings.createReadSessionSettings().getRetrySettings()); .batchCreateReadSessionStreamsSettings() .setRetryableCodes(settings.batchCreateReadSessionStreamsSettings().getRetryableCodes()) .setRetrySettings(settings.batchCreateReadSessionStreamsSettings().getRetrySettings()); .finalizeStreamSettings() .setRetryableCodes(settings.finalizeStreamSettings().getRetryableCodes()) .setRetrySettings(settings.finalizeStreamSettings().getRetrySettings()); .splitReadStreamSettings() .setRetryableCodes(settings.splitReadStreamSettings().getRetryableCodes()) .setRetrySettings(settings.splitReadStreamSettings().getRetrySettings());
private AwaitReplicationCallable createAwaitReplicationCallable() { // TODO(igorbernstein2): expose polling settings RetrySettings pollingSettings = RetrySettings.newBuilder() // use overall timeout from checkConsistencyCallable // NOTE: The overall timeout might exceed this value due to underlying retries .setTotalTimeout( settings.checkConsistencySettings().getRetrySettings().getTotalTimeout()) // Use constant polling with jitter .setInitialRetryDelay(Duration.ofSeconds(10)) .setRetryDelayMultiplier(1.0) .setMaxRetryDelay(Duration.ofSeconds(10)) .setJittered(true) // These rpc timeouts are ignored, instead the rpc timeouts defined for // generateConsistencyToken and checkConsistency callables will be used. .setInitialRpcTimeout(Duration.ZERO) .setMaxRpcTimeout(Duration.ZERO) .setRpcTimeoutMultiplier(1.0) .build(); return AwaitReplicationCallable.create( generateConsistencyTokenCallable(), checkConsistencyCallable(), clientContext, pollingSettings); }
.sampleRowKeysSettings() .setSimpleTimeoutNoRetries( settings.sampleRowKeysSettings().getRetrySettings().getTotalTimeout()) .setRetryableCodes(settings.sampleRowKeysSettings().getRetryableCodes()); .mutateRowSettings() .setRetryableCodes(settings.mutateRowSettings().getRetryableCodes()) .setRetrySettings(settings.mutateRowSettings().getRetrySettings()); .checkAndMutateRowSettings() .setRetryableCodes(settings.checkAndMutateRowSettings().getRetryableCodes()) .setRetrySettings(settings.checkAndMutateRowSettings().getRetrySettings()); .readModifyWriteRowSettings() .setRetryableCodes(settings.readModifyWriteRowSettings().getRetryableCodes()) .setRetrySettings(settings.readModifyWriteRowSettings().getRetrySettings());
@Test public void checkAndMutateRowSettingsAreNotLostTest() { String dummyProjectId = "my-project"; String dummyInstanceId = "my-instance"; EnhancedBigtableStubSettings.Builder builder = EnhancedBigtableStubSettings.newBuilder() .setProjectId(dummyProjectId) .setInstanceId(dummyInstanceId); RetrySettings retrySettings = RetrySettings.newBuilder().build(); builder .checkAndMutateRowSettings() .setRetryableCodes(Code.ABORTED, Code.DEADLINE_EXCEEDED) .setRetrySettings(retrySettings) .build(); assertThat(builder.checkAndMutateRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.checkAndMutateRowSettings().getRetrySettings()).isSameAs(retrySettings); assertThat(builder.build().checkAndMutateRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().checkAndMutateRowSettings().getRetrySettings()) .isSameAs(retrySettings); assertThat(builder.build().toBuilder().checkAndMutateRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().toBuilder().checkAndMutateRowSettings().getRetrySettings()) .isSameAs(retrySettings); }
assertThat(builder.build().mutateRowSettings().getRetrySettings()).isEqualTo(retrySettings);
assertThat(builder.build().sampleRowKeysSettings().getRetrySettings()).isEqualTo(retrySettings);
assertThat(builder.build().readRowSettings().getRetrySettings()).isEqualTo(retrySettings);
private RequestConfig getRequestConfig() { RequestConfig.Builder configBuilder = RequestConfig.custom(); if (photosLibrarySettings.uploadMediaItemSettings().getRetrySettings().getTotalTimeout() != UNLIMITED_TIMEOUT) { configBuilder.setConnectionRequestTimeout( Math.toIntExact( photosLibrarySettings .uploadMediaItemSettings() .getRetrySettings() .getTotalTimeout() .get(MILLIS))); } return configBuilder.build(); }
protected Builder(UnaryCallSettings<RequestT, ResponseT> unaryCallSettings) { setRetryableCodes(unaryCallSettings.retryableCodes); setRetrySettings(unaryCallSettings.getRetrySettings()); }
protected Builder(UnaryCallSettings<RequestT, ResponseT> unaryCallSettings) { setRetryableCodes(unaryCallSettings.retryableCodes); setRetrySettings(unaryCallSettings.getRetrySettings()); }
private void checkForTimeout(long initialMillis) throws TimeoutException { if (photosLibrarySettings.uploadMediaItemSettings().getRetrySettings().getTotalTimeout() != UNLIMITED_TIMEOUT) { long duration = clientContext.getClock().millisTime() - initialMillis; if (duration > photosLibrarySettings .uploadMediaItemSettings() .getRetrySettings() .getTotalTimeout() .get(MILLIS)) { throw new TimeoutException(ExceptionStrings.UPLOAD_TIMED_OUT); } } }
photosLibrarySettings.uploadMediaItemSettings().getRetrySettings();
/** * Creates a callable chain to handle point ReadRows RPCs. The chain will: * * <ul> * <li>Convert a {@link Query} into a {@link com.google.bigtable.v2.ReadRowsRequest} and * dispatch the RPC. * <li>Upon receiving the response stream, it will merge the {@link * com.google.bigtable.v2.ReadRowsResponse.CellChunk}s in logical rows. The actual row * implementation can be configured in by the {@code rowAdapter} parameter. * <li>Retry/resume on failure. * <li>Filter out marker rows. * </ul> */ public <RowT> UnaryCallable<Query, RowT> createReadRowCallable(RowAdapter<RowT> rowAdapter) { return createReadRowsCallable( ServerStreamingCallSettings.<Query, Row>newBuilder() .setRetryableCodes(settings.readRowSettings().getRetryableCodes()) .setRetrySettings(settings.readRowSettings().getRetrySettings()) .setIdleTimeout(settings.readRowSettings().getRetrySettings().getTotalTimeout()) .build(), rowAdapter) .first(); }
public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> retrying( UnaryCallable<RequestT, ResponseT> innerCallable, UnaryCallSettings<?, ?> callSettings, ClientContext clientContext) { if (callSettings.getRetryableCodes().isEmpty()) { return innerCallable; } RetryAlgorithm<ResponseT> retryAlgorithm = new RetryAlgorithm<>( new ApiResultRetryAlgorithm<ResponseT>(), new ExponentialRetryAlgorithm( callSettings.getRetrySettings(), clientContext.getClock())); ScheduledRetryingExecutor<ResponseT> retryingExecutor = new ScheduledRetryingExecutor<>(retryAlgorithm, clientContext.getExecutor()); return new RetryingCallable<>( clientContext.getDefaultCallContext(), innerCallable, retryingExecutor); }
public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> retrying( UnaryCallable<RequestT, ResponseT> innerCallable, UnaryCallSettings<?, ?> callSettings, ClientContext clientContext) { if (callSettings.getRetryableCodes().isEmpty()) { return innerCallable; } RetryAlgorithm<ResponseT> retryAlgorithm = new RetryAlgorithm<>( new ApiResultRetryAlgorithm<ResponseT>(), new ExponentialRetryAlgorithm( callSettings.getRetrySettings(), clientContext.getClock())); ScheduledRetryingExecutor<ResponseT> retryingExecutor = new ScheduledRetryingExecutor<>(retryAlgorithm, clientContext.getExecutor()); return new RetryingCallable<>( clientContext.getDefaultCallContext(), innerCallable, retryingExecutor); }
private AwaitReplicationCallable createAwaitReplicationCallable() { // TODO(igorbernstein2): expose polling settings RetrySettings pollingSettings = RetrySettings.newBuilder() // use overall timeout from checkConsistencyCallable // NOTE: The overall timeout might exceed this value due to underlying retries .setTotalTimeout( settings.checkConsistencySettings().getRetrySettings().getTotalTimeout()) // Use constant polling with jitter .setInitialRetryDelay(Duration.ofSeconds(10)) .setRetryDelayMultiplier(1.0) .setMaxRetryDelay(Duration.ofSeconds(10)) .setJittered(true) // These rpc timeouts are ignored, instead the rpc timeouts defined for // generateConsistencyToken and checkConsistency callables will be used. .setInitialRpcTimeout(Duration.ZERO) .setMaxRpcTimeout(Duration.ZERO) .setRpcTimeoutMultiplier(1.0) .build(); return AwaitReplicationCallable.create( generateConsistencyTokenCallable(), checkConsistencyCallable(), clientContext, pollingSettings); }
.sampleRowKeysSettings() .setSimpleTimeoutNoRetries( settings.sampleRowKeysSettings().getRetrySettings().getTotalTimeout()) .setRetryableCodes(settings.sampleRowKeysSettings().getRetryableCodes()); .mutateRowSettings() .setRetryableCodes(settings.mutateRowSettings().getRetryableCodes()) .setRetrySettings(settings.mutateRowSettings().getRetrySettings()); .checkAndMutateRowSettings() .setRetryableCodes(settings.checkAndMutateRowSettings().getRetryableCodes()) .setRetrySettings(settings.checkAndMutateRowSettings().getRetrySettings()); .readModifyWriteRowSettings() .setRetryableCodes(settings.readModifyWriteRowSettings().getRetryableCodes()) .setRetrySettings(settings.readModifyWriteRowSettings().getRetrySettings());