new FlowController( builder .flowControlSettings
new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(1L)
private BatchingCallSettings(Builder<RequestT, ResponseT> builder) { super(builder); this.batchingDescriptor = builder.batchingDescriptor; this.batchingSettings = Preconditions.checkNotNull(builder.batchingSettings); FlowController flowControllerToUse = builder.flowController; if (flowControllerToUse == null) { flowControllerToUse = new FlowController(batchingSettings.getFlowControlSettings()); } this.flowController = flowControllerToUse; }
private BatchingCallSettings(Builder<RequestT, ResponseT> builder) { super(builder); this.batchingDescriptor = builder.batchingDescriptor; this.batchingSettings = Preconditions.checkNotNull(builder.batchingSettings); FlowController flowControllerToUse = builder.flowController; if (flowControllerToUse == null) { flowControllerToUse = new FlowController(batchingSettings.getFlowControlSettings()); } this.flowController = flowControllerToUse; }
private static FlowController getDisabledFlowController() { return new FlowController( FlowControlSettings.newBuilder() .setLimitExceededBehavior(LimitExceededBehavior.Ignore) .build()); }
@Test public void testReserveRelease_rejectedByNumberOfBytes_noElementCountLimit() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.ThrowException) .build()); testRejectedReserveRelease( flowController, 10, 10, FlowController.MaxOutstandingRequestBytesReachedException.class); }
@Test public void testReserveRelease_noLimits_ok() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); flowController.reserve(1, 1); flowController.release(1, 1); }
@Test public void testReserveRelease_rejectedByElementCount_noBytesLimit() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setLimitExceededBehavior(LimitExceededBehavior.ThrowException) .build()); testRejectedReserveRelease( flowController, 10, 10, FlowController.MaxOutstandingElementCountReachedException.class); }
@Test public void testReserveRelease_blockedByElementCount_noBytesLimit() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); testBlockingReserveRelease(flowController, 10, 10); }
@Test public void testReserveRelease_blockedByNumberOfBytes_noElementCountLimit() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); testBlockingReserveRelease(flowController, 10, 10); }
@Test public void testReserveRelease_rejectedByNumberOfBytes() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(100L) .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.ThrowException) .build()); testRejectedReserveRelease( flowController, 10, 10, FlowController.MaxOutstandingRequestBytesReachedException.class); }
@Test public void testReserveRelease_blockedByElementCount() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setMaxOutstandingRequestBytes(100L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); testBlockingReserveRelease(flowController, 10, 10); }
@Test public void testReserveRelease_blockedByNumberOfBytes() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(100L) .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); testBlockingReserveRelease(flowController, 10, 10); }
@Test public void testReserveRelease_rejectedByElementCount() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setMaxOutstandingRequestBytes(100L) .setLimitExceededBehavior(LimitExceededBehavior.ThrowException) .build()); testRejectedReserveRelease( flowController, 10, 10, FlowController.MaxOutstandingElementCountReachedException.class); }
@Test public void testRestoreAfterFail() throws FlowController.FlowControlException { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(2L) .setMaxOutstandingRequestBytes(1L) .setLimitExceededBehavior(LimitExceededBehavior.ThrowException) .build()); flowController.reserve(1, 1); try { flowController.reserve(1, 1); throw new IllegalStateException("flowController should not have any bytes left"); } catch (FlowController.MaxOutstandingRequestBytesReachedException e) { // Ignore. } flowController.reserve(1, 0); }
@Test public void testReserveRelease_ok() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); flowController.reserve(1, 1); flowController.release(1, 1); }
@Test public void testReserveRelease_ignore_ok() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(1L) .setMaxOutstandingRequestBytes(1L) .setLimitExceededBehavior(LimitExceededBehavior.Ignore) .build()); flowController.reserve(1, 1); flowController.release(1, 1); }
@Test public void testUnbatchedCall() throws Exception { BatchingSettings batchingSettings = BatchingSettings.newBuilder().setIsEnabled(false).build(); FlowControlSettings flowControlSettings = FlowControlSettings.newBuilder() .setLimitExceededBehavior(LimitExceededBehavior.Ignore) .build(); FlowController flowController = new FlowController(flowControlSettings); BatcherFactory<LabeledIntList, List<Integer>> batcherFactory = new BatcherFactory<>( new SquarerBatchingDescriptor(), batchingSettings, batchingExecutor, flowController); BatchingCallable<LabeledIntList, List<Integer>> batchingCallable = new BatchingCallable<>( FakeBatchableApi.callLabeledIntSquarer, FakeBatchableApi.SQUARER_BATCHING_DESC, batcherFactory); LabeledIntList request1 = new LabeledIntList("label", 2); ApiFuture<List<Integer>> future1 = batchingCallable.futureCall(request1, FakeCallContext.createDefault()); List<Integer> response1 = future1.get(); Truth.assertThat(response1.size()).isEqualTo(1); Truth.assertThat(response1.get(0)).isEqualTo(2 * 2); } }
@Test public void testInvalidArguments() throws Exception { FlowController flowController = new FlowController( FlowControlSettings.newBuilder() .setMaxOutstandingElementCount(10L) .setMaxOutstandingRequestBytes(10L) .setLimitExceededBehavior(LimitExceededBehavior.Block) .build()); flowController.reserve(0, 0); try { flowController.reserve(-1, 1); fail("Must have thrown an illegal argument error"); } catch (IllegalArgumentException expected) { // Expected } try { flowController.reserve(1, -1); fail("Must have thrown an illegal argument error"); } catch (IllegalArgumentException expected) { // Expected } }
.setLimitExceededBehavior(LimitExceededBehavior.Ignore) .build(); FlowController flowController = new FlowController(flowControlSettings); BatcherFactory<LabeledIntList, List<Integer>> batcherFactory = new BatcherFactory<>(