ServerStreamingCallSettings.<ReadRowsRequest, RowT>newBuilder() .setResumptionStrategy(new ReadRowsResumptionStrategy<>(rowAdapter)) .setRetryableCodes(readRowsSettings.getRetryableCodes()) .setRetrySettings(readRowsSettings.getRetrySettings()) .setIdleTimeout(readRowsSettings.getIdleTimeout())
assertThat(builder.build().readRowsSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().readRowsSettings().getRetrySettings()).isEqualTo(retrySettings);
.setRetryableCodes(settings.readRowsSettings().getRetryableCodes()) .setRetrySettings(settings.readRowsSettings().getRetrySettings()) .setResumptionStrategy(settings.readRowsSettings().getResumptionStrategy())
.readRowsSettings() .setSimpleTimeoutNoRetries(Duration.ofHours(2)) .setRetryableCodes(settings.readRowsSettings().getRetryableCodes()) .setIdleTimeout(Duration.ZERO);
@BetaApi("The surface for streaming is not stable yet and may change in the future.") public static <RequestT, ResponseT> ServerStreamingCallable<RequestT, ResponseT> retrying( ServerStreamingCallable<RequestT, ResponseT> innerCallable, ServerStreamingCallSettings<RequestT, ResponseT> callSettings, ClientContext clientContext) { if (callSettings.getRetryableCodes().isEmpty()) { return innerCallable; } StreamingRetryAlgorithm<Void> retryAlgorithm = new StreamingRetryAlgorithm<>( new ApiResultRetryAlgorithm<Void>(), new ExponentialRetryAlgorithm( callSettings.getRetrySettings(), clientContext.getClock())); ScheduledRetryingExecutor<Void> retryingExecutor = new ScheduledRetryingExecutor<>(retryAlgorithm, clientContext.getExecutor()); return new RetryingServerStreamingCallable<>( innerCallable, retryingExecutor, callSettings.getResumptionStrategy()); }
@BetaApi("The surface for streaming is not stable yet and may change in the future.") public static <RequestT, ResponseT> ServerStreamingCallable<RequestT, ResponseT> retrying( ServerStreamingCallable<RequestT, ResponseT> innerCallable, ServerStreamingCallSettings<RequestT, ResponseT> callSettings, ClientContext clientContext) { if (callSettings.getRetryableCodes().isEmpty()) { return innerCallable; } StreamingRetryAlgorithm<Void> retryAlgorithm = new StreamingRetryAlgorithm<>( new ApiResultRetryAlgorithm<Void>(), new ExponentialRetryAlgorithm( callSettings.getRetrySettings(), clientContext.getClock())); ScheduledRetryingExecutor<Void> retryingExecutor = new ScheduledRetryingExecutor<>(retryAlgorithm, clientContext.getExecutor()); return new RetryingServerStreamingCallable<>( innerCallable, retryingExecutor, callSettings.getResumptionStrategy()); }
@Test public void retryableCodesAreNotLost() { Set<Code> codes = ImmutableSet.of(Code.UNAVAILABLE, Code.RESOURCE_EXHAUSTED); ServerStreamingCallSettings.Builder<Object, Object> builder = ServerStreamingCallSettings.newBuilder(); builder.setRetryableCodes(codes); Truth.assertThat(builder.getRetryableCodes()).containsExactlyElementsIn(codes); Truth.assertThat(builder.build().getRetryableCodes()).containsExactlyElementsIn(codes); Truth.assertThat(builder.build().toBuilder().getRetryableCodes()) .containsExactlyElementsIn(codes); }
callable, streamingCallSettings.getRetryableCodes());
callable, streamingCallSettings.getRetryableCodes());
ServerStreamingCallSettings.<ReadRowsRequest, RowT>newBuilder() .setResumptionStrategy(new ReadRowsResumptionStrategy<>(rowAdapter)) .setRetryableCodes(readRowsSettings.getRetryableCodes()) .setRetrySettings(readRowsSettings.getRetrySettings()) .setIdleTimeout(readRowsSettings.getIdleTimeout())
.readRowsSettings() .setSimpleTimeoutNoRetries(Duration.ofHours(2)) .setRetryableCodes(settings.readRowsSettings().getRetryableCodes()) .setIdleTimeout(Duration.ZERO);