@Override public Subscriber createSubscriber(String subscriptionName, MessageReceiver receiver) { Subscriber.Builder subscriberBuilder = Subscriber.newBuilder( ProjectSubscriptionName.of(this.projectId, subscriptionName), receiver); if (this.channelProvider != null) { subscriberBuilder.setChannelProvider(this.channelProvider); } if (this.executorProvider != null) { subscriberBuilder.setExecutorProvider(this.executorProvider); } if (this.credentialsProvider != null) { subscriberBuilder.setCredentialsProvider(this.credentialsProvider); } if (this.headerProvider != null) { subscriberBuilder.setHeaderProvider(this.headerProvider); } if (this.systemExecutorProvider != null) { subscriberBuilder.setSystemExecutorProvider(this.systemExecutorProvider); } if (this.flowControlSettings != null) { subscriberBuilder.setFlowControlSettings(this.flowControlSettings); } if (this.maxAckExtensionPeriod != null) { subscriberBuilder.setMaxAckExtensionPeriod(this.maxAckExtensionPeriod); } if (this.parallelPullCount != null) { subscriberBuilder.setParallelPullCount(this.parallelPullCount); } return subscriberBuilder.build(); }
@Override public Subscriber createSubscriber(String subscriptionName, MessageReceiver receiver) { Subscriber.Builder subscriberBuilder = Subscriber.newBuilder( ProjectSubscriptionName.of(this.projectId, subscriptionName), receiver); if (this.channelProvider != null) { subscriberBuilder.setChannelProvider(this.channelProvider); } if (this.executorProvider != null) { subscriberBuilder.setExecutorProvider(this.executorProvider); } if (this.credentialsProvider != null) { subscriberBuilder.setCredentialsProvider(this.credentialsProvider); } if (this.headerProvider != null) { subscriberBuilder.setHeaderProvider(this.headerProvider); } if (this.systemExecutorProvider != null) { subscriberBuilder.setSystemExecutorProvider(this.systemExecutorProvider); } if (this.flowControlSettings != null) { subscriberBuilder.setFlowControlSettings(this.flowControlSettings); } if (this.maxAckExtensionPeriod != null) { subscriberBuilder.setMaxAckExtensionPeriod(this.maxAckExtensionPeriod); } if (this.parallelPullCount != null) { subscriberBuilder.setParallelPullCount(this.parallelPullCount); } return subscriberBuilder.build(); }
@Test(expected = IllegalStateException.class) public void testFailedChannel_fatalError_subscriberFails() throws Exception { Subscriber subscriber = startSubscriber( getTestSubscriberBuilder(testReceiver) .setSystemExecutorProvider( InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(10).build())); // Fatal error fakeSubscriberServiceImpl.sendError(new StatusException(Status.INVALID_ARGUMENT)); try { subscriber.awaitTerminated(); } finally { // The subscriber must finish with an state error because its FAILED status. assertEquals(Subscriber.State.FAILED, subscriber.state()); Throwable t = subscriber.failureCause(); assertTrue(t instanceof ApiException); ApiException ex = (ApiException) (t); assertTrue(ex.getStatusCode() instanceof GrpcStatusCode); GrpcStatusCode grpcCode = (GrpcStatusCode) ex.getStatusCode(); assertEquals(StatusCode.Code.INVALID_ARGUMENT, grpcCode.getCode()); } }
@Test public void testFailedChannel_recoverableError_channelReopened() throws Exception { int expectedChannelCount = 1; Subscriber subscriber = startSubscriber( getTestSubscriberBuilder(testReceiver) .setSystemExecutorProvider( InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build())); // Recoverable error fakeSubscriberServiceImpl.sendError(new StatusException(Status.INTERNAL)); assertEquals(1, fakeSubscriberServiceImpl.waitForClosedStreams(1)); assertEquals( expectedChannelCount, fakeSubscriberServiceImpl.waitForOpenedStreams(expectedChannelCount)); subscriber.stopAsync().awaitTerminated(); }
private Builder getTestSubscriberBuilder(MessageReceiver receiver) { return Subscriber.newBuilder(TEST_SUBSCRIPTION, receiver) .setExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) .setSystemExecutorProvider(FixedExecutorProvider.create(fakeExecutor)) .setChannelProvider( FixedTransportChannelProvider.create(GrpcTransportChannel.create(testChannel))) .setCredentialsProvider(NoCredentialsProvider.create()) .setClock(fakeExecutor.getClock()) .setParallelPullCount(1); } }