public ProgressEvent handleRequest()

in deliverystream/src/main/java/com/amazonaws/kinesisfirehose/deliverystream/ReadHandler.java [22:60]


    public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
            final AmazonWebServicesClientProxy proxy,
            final ResourceHandlerRequest<ResourceModel> request,
            final CallbackContext callbackContext,
            final Logger logger) {
        val firehoseAPIWrapper = FirehoseAPIWrapper.builder().firehoseClient(firehoseClient).clientProxy(proxy).build();
        final ResourceModel model = request.getDesiredResourceState();
        logger.log(String.format("Read Handler called with id %s.", model.getDeliveryStreamName()));
        DeliveryStreamDescription deliveryStreamDescription = null;
        try {
            deliveryStreamDescription = firehoseAPIWrapper.describeDeliveryStream(model.getDeliveryStreamName()).deliveryStreamDescription();
        } catch (Exception e) {
            logger.log(String.format("DescribeDeliveryStream failed for the delivery stream name %s. Error message: %s",
                model.getDeliveryStreamName(),
                e.getMessage()));
            return ProgressEvent.defaultFailureHandler(e, ExceptionMapper.mapToHandlerErrorCode(e, HandlerType.READ));
        }
        List<Tag> tags = Collections.emptyList();
        try {
            tags = firehoseAPIWrapper
                .listAllTagsOnDeliveryStream(model.getDeliveryStreamName(), HandlerUtils.LIST_TAGS_RESULT_LIMIT);
        } catch (Exception e) {
            // Basically for newer APIs being added, it is possible that some of the customers have scoped down permissions, and the API might fail. We need to make sure that we handle those failures and
            // do not introduce a breaking change. Discussion https://t.corp.amazon.com/P40581493/communication and https://t.corp.amazon.com/issues/P40588329/communication.
            logger.log(String.format("ListTagsForDeliveryStream failed for the delivery stream name %s. Error message: %s",
                model.getDeliveryStreamName(),
                e.getMessage()));
            // If access denied exception on list tags, log and continue populating the model to be returned by the read handler.
            // If some other type of exception than that, we would be explicitly marking the handle failures for the customer to be notified instead of silently failing the calls?
            if (!(e instanceof FirehoseException && ((
                ((FirehoseException) e).awsErrorDetails() != null && ((FirehoseException) e)
                    .awsErrorDetails().errorCode().equals(HandlerUtils.ACCESS_DENIED_ERROR_CODE))))) {
                return ProgressEvent.defaultFailureHandler(e, ExceptionMapper.mapToHandlerErrorCode(e, HandlerType.READ));
            }
        }
        hydrateDeliveryStreamResource(model, deliveryStreamDescription, tags);
        logger.log(String.format("Hydrated deliveryStream model with %d retrieved tags on the delivery stream name %s", tags.size(), model.getDeliveryStreamName()));
        return ProgressEvent.defaultSuccessHandler(model);
    }