private EnhancedBigtableStubSettings(Builder builder) { super(builder); // Since point reads & streaming reads share the same base callable that converts grpc errors // into ApiExceptions, they must have the same retry codes. Preconditions.checkState( builder .readRowSettings .getRetryableCodes() .equals(builder.readRowsSettings.getRetryableCodes()), "Single ReadRow retry codes must match ReadRows retry codes"); projectId = builder.projectId; instanceId = builder.instanceId; appProfileId = builder.appProfileId; // Per method settings. readRowsSettings = builder.readRowsSettings.build(); readRowSettings = builder.readRowSettings.build(); sampleRowKeysSettings = builder.sampleRowKeysSettings.build(); mutateRowSettings = builder.mutateRowSettings.build(); bulkMutateRowsSettings = builder.bulkMutateRowsSettings.build(); checkAndMutateRowSettings = builder.checkAndMutateRowSettings.build(); readModifyWriteRowSettings = builder.readModifyWriteRowSettings.build(); }
@Test public void checkAndMutateRowSettingsAreSane() { UnaryCallSettings.Builder<ConditionalRowMutation, Boolean> builder = EnhancedBigtableStubSettings.newBuilder().checkAndMutateRowSettings(); // CheckAndMutateRow is not retryable in the case of toggle mutations. So it's disabled by // default. assertThat(builder.getRetrySettings().getMaxAttempts()).isAtMost(1); assertThat(builder.getRetryableCodes()).isEmpty(); }
@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); }
@Test public void testApplyToAllUnaryMethods() throws Exception { List<UnaryCallSettings.Builder<?, ?>> builders = new ArrayList<>(); builders.add(UnaryCallSettings.newUnaryCallSettingsBuilder()); builders.add(UnaryCallSettings.newUnaryCallSettingsBuilder()); // using an array to have a mutable integer final int[] count = {0}; ClientSettings.Builder.applyToAllUnaryMethods( builders, new ApiFunction<UnaryCallSettings.Builder<?, ?>, Void>() { @Override public Void apply(UnaryCallSettings.Builder<?, ?> input) { if (count[0] == 0) { input.setRetryableCodes(StatusCode.Code.UNAVAILABLE); } else { input.setRetryableCodes(StatusCode.Code.DEADLINE_EXCEEDED); } count[0] += 1; return null; } }); Truth.assertThat(builders.get(0).getRetryableCodes()) .containsExactly(StatusCode.Code.UNAVAILABLE); Truth.assertThat(builders.get(1).getRetryableCodes()) .containsExactly(StatusCode.Code.DEADLINE_EXCEEDED); } }
private EnhancedBigtableStubSettings(Builder builder) { super(builder); // Since point reads & streaming reads share the same base callable that converts grpc errors // into ApiExceptions, they must have the same retry codes. Preconditions.checkState( builder .readRowSettings .getRetryableCodes() .equals(builder.readRowsSettings.getRetryableCodes()), "Single ReadRow retry codes must match ReadRows retry codes"); projectId = builder.projectId; instanceId = builder.instanceId; appProfileId = builder.appProfileId; // Per method settings. readRowsSettings = builder.readRowsSettings.build(); readRowSettings = builder.readRowSettings.build(); sampleRowKeysSettings = builder.sampleRowKeysSettings.build(); mutateRowSettings = builder.mutateRowSettings.build(); bulkMutateRowsSettings = builder.bulkMutateRowsSettings.build(); checkAndMutateRowSettings = builder.checkAndMutateRowSettings.build(); readModifyWriteRowSettings = builder.readModifyWriteRowSettings.build(); }
@Test public void testSetSimpleTimeoutNoRetries() { UnaryCallSettings.Builder builder = new UnaryCallSettings.Builder(); builder.setSimpleTimeoutNoRetries(Duration.ofSeconds(13)); Truth.assertThat(builder.getRetryableCodes().size()).isEqualTo(0); Truth.assertThat(builder.getRetrySettings().getMaxAttempts()).isEqualTo(1); Truth.assertThat(builder.getRetrySettings().getTotalTimeout()) .isEqualTo(Duration.ofSeconds(13)); } }
/** * Copies settings from unary RPC to another. This is necessary when modifying request and * response types while trying to retain retry settings. */ private static void copyRetrySettings( UnaryCallSettings.Builder<?, ?> source, UnaryCallSettings.Builder<?, ?> dest) { dest.setRetryableCodes(source.getRetryableCodes()); dest.setRetrySettings(source.getRetrySettings()); } // </editor-fold>
.build(); assertThat(builder.sampleRowKeysSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.sampleRowKeysSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().sampleRowKeysSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().toBuilder().sampleRowKeysSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().toBuilder().sampleRowKeysSettings().getRetrySettings())
assertThat(builder.readRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.readRowSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().readRowSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().toBuilder().readRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().toBuilder().readRowSettings().getRetrySettings())
.build(); assertThat(builder.mutateRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.mutateRowSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().mutateRowSettings().getRetrySettings()).isEqualTo(retrySettings); assertThat(builder.build().toBuilder().mutateRowSettings().getRetryableCodes()) .containsAllOf(Code.ABORTED, Code.DEADLINE_EXCEEDED); assertThat(builder.build().toBuilder().mutateRowSettings().getRetrySettings())
@Test public void testFinalizeStreamSettings() { UnaryCallSettings.Builder<FinalizeStreamRequest, Empty> builder = EnhancedBigQueryStorageStubSettings.newBuilder().finalizeStreamSettings(); verifyRetrySettings(builder.getRetryableCodes(), builder.getRetrySettings()); }
@Test public void sampleRowKeysHasSaneDefaultsTest() { UnaryCallSettings.Builder<String, List<KeyOffset>> builder = EnhancedBigtableStubSettings.newBuilder().sampleRowKeysSettings(); verifyRetrySettingAreSane(builder.getRetryableCodes(), builder.getRetrySettings()); }
@Test public void testSplitReadStreamSettings() { UnaryCallSettings.Builder<SplitReadStreamRequest, SplitReadStreamResponse> builder = EnhancedBigQueryStorageStubSettings.newBuilder().splitReadStreamSettings(); verifyRetrySettings(builder.getRetryableCodes(), builder.getRetrySettings()); }
@Test public void testBatchCreateReadSessionStreamsSettings() { UnaryCallSettings.Builder< BatchCreateReadSessionStreamsRequest, BatchCreateReadSessionStreamsResponse> builder = EnhancedBigQueryStorageStubSettings.newBuilder() .batchCreateReadSessionStreamsSettings(); verifyRetrySettings(builder.getRetryableCodes(), builder.getRetrySettings()); }
/** * Copies settings from unary RPC to another. This is necessary when modifying request and * response types while trying to retain retry settings. */ private static void copyRetrySettings( UnaryCallSettings.Builder<?, ?> source, UnaryCallSettings.Builder<?, ?> dest) { dest.setRetryableCodes(source.getRetryableCodes()); dest.setRetrySettings(source.getRetrySettings()); } // </editor-fold>
@Test public void mutateRowHasSaneDefaultsTest() { UnaryCallSettings.Builder<RowMutation, Void> builder = EnhancedBigtableStubSettings.newBuilder().mutateRowSettings(); verifyRetrySettingAreSane(builder.getRetryableCodes(), builder.getRetrySettings()); }
@Test public void readRowHasSaneDefaultsTest() { UnaryCallSettings.Builder<Query, Row> builder = EnhancedBigtableStubSettings.newBuilder().readRowSettings(); verifyRetrySettingAreSane(builder.getRetryableCodes(), builder.getRetrySettings()); }
@Test public void testCreateReadSessionSettings() { UnaryCallSettings.Builder<CreateReadSessionRequest, ReadSession> builder = EnhancedBigQueryStorageStubSettings.newBuilder().createReadSessionSettings(); verifyRetrySettings(builder.getRetryableCodes(), builder.getRetrySettings()); }