use of software.amazon.awssdk.services.kinesis.model.SubscribeToShardRequest in project flink by apache.
the class FanOutShardSubscriber method openSubscriptionToShard.
/**
* Calls {@link KinesisProxyV2#subscribeToShard} and waits to acquire a subscription. In the
* event a non-recoverable error occurs this method will rethrow the exception. Once the
* subscription is acquired the client signals to the producer that we are ready to receive
* records.
*
* @param startingPosition the position in which to start consuming from
* @throws FanOutSubscriberException when an exception is propagated from the networking stack
*/
private FanOutShardSubscription openSubscriptionToShard(final StartingPosition startingPosition) throws FanOutSubscriberException, InterruptedException {
SubscribeToShardRequest request = SubscribeToShardRequest.builder().consumerARN(consumerArn).shardId(shardId).startingPosition(startingPosition).build();
AtomicReference<Throwable> exception = new AtomicReference<>();
CountDownLatch waitForSubscriptionLatch = new CountDownLatch(1);
FanOutShardSubscription subscription = new FanOutShardSubscription(waitForSubscriptionLatch);
SubscribeToShardResponseHandler responseHandler = SubscribeToShardResponseHandler.builder().onError(e -> {
// (errors are ignored here once the subscription is open)
if (waitForSubscriptionLatch.getCount() > 0) {
exception.set(e);
waitForSubscriptionLatch.countDown();
}
}).subscriber(() -> subscription).build();
kinesis.subscribeToShard(request, responseHandler);
boolean subscriptionEstablished = waitForSubscriptionLatch.await(subscribeToShardTimeout.toMillis(), TimeUnit.MILLISECONDS);
if (!subscriptionEstablished) {
final String errorMessage = "Timed out acquiring subscription - " + shardId + " (" + consumerArn + ")";
LOG.error(errorMessage);
subscription.cancelSubscription();
handleError(new RecoverableFanOutSubscriberException(new TimeoutException(errorMessage)));
}
Throwable throwable = exception.get();
if (throwable != null) {
handleError(throwable);
}
LOG.debug("Acquired subscription - {} ({})", shardId, consumerArn);
// Request the first record to kick off consumption
// Following requests are made by the FanOutShardSubscription on the netty thread
subscription.requestRecord();
return subscription;
}
Aggregations