All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.services.kinesis.DefaultKinesisAsyncClient Maven / Gradle / Ivy

Go to download

The AWS Java SDK for Amazon Kinesis module holds the client classes that are used for communicating with Amazon Kinesis Service

There is a newer version: 2.29.19
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package software.amazon.awssdk.services.kinesis;

import static software.amazon.awssdk.utils.FunctionalUtils.runAndLogError;

import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.function.Consumer;
import java.util.function.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.awscore.client.handler.AwsAsyncClientHandler;
import software.amazon.awssdk.awscore.eventstream.EventStreamAsyncResponseTransformer;
import software.amazon.awssdk.awscore.eventstream.EventStreamTaggedUnionPojoSupplier;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.awscore.internal.AwsProtocolMetadata;
import software.amazon.awssdk.awscore.internal.AwsServiceProtocol;
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
import software.amazon.awssdk.core.RequestOverrideConfiguration;
import software.amazon.awssdk.core.SdkPlugin;
import software.amazon.awssdk.core.SdkPojoBuilder;
import software.amazon.awssdk.core.SdkRequest;
import software.amazon.awssdk.core.SdkResponse;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.client.config.SdkAdvancedAsyncClientOption;
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
import software.amazon.awssdk.core.client.config.SdkClientOption;
import software.amazon.awssdk.core.client.handler.AsyncClientHandler;
import software.amazon.awssdk.core.client.handler.AttachHttpMetadataResponseHandler;
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
import software.amazon.awssdk.core.http.HttpResponseHandler;
import software.amazon.awssdk.core.metrics.CoreMetric;
import software.amazon.awssdk.core.protocol.VoidSdkResponse;
import software.amazon.awssdk.core.retry.RetryMode;
import software.amazon.awssdk.metrics.MetricCollector;
import software.amazon.awssdk.metrics.MetricPublisher;
import software.amazon.awssdk.metrics.NoOpMetricCollector;
import software.amazon.awssdk.protocols.cbor.AwsCborProtocolFactory;
import software.amazon.awssdk.protocols.core.ExceptionMetadata;
import software.amazon.awssdk.protocols.json.AwsJsonProtocol;
import software.amazon.awssdk.protocols.json.AwsJsonProtocolFactory;
import software.amazon.awssdk.protocols.json.BaseAwsJsonProtocolFactory;
import software.amazon.awssdk.protocols.json.JsonOperationMetadata;
import software.amazon.awssdk.retries.api.RetryStrategy;
import software.amazon.awssdk.services.kinesis.internal.KinesisServiceClientConfigurationBuilder;
import software.amazon.awssdk.services.kinesis.model.AccessDeniedException;
import software.amazon.awssdk.services.kinesis.model.AddTagsToStreamRequest;
import software.amazon.awssdk.services.kinesis.model.AddTagsToStreamResponse;
import software.amazon.awssdk.services.kinesis.model.CreateStreamRequest;
import software.amazon.awssdk.services.kinesis.model.CreateStreamResponse;
import software.amazon.awssdk.services.kinesis.model.DecreaseStreamRetentionPeriodRequest;
import software.amazon.awssdk.services.kinesis.model.DecreaseStreamRetentionPeriodResponse;
import software.amazon.awssdk.services.kinesis.model.DeleteResourcePolicyRequest;
import software.amazon.awssdk.services.kinesis.model.DeleteResourcePolicyResponse;
import software.amazon.awssdk.services.kinesis.model.DeleteStreamRequest;
import software.amazon.awssdk.services.kinesis.model.DeleteStreamResponse;
import software.amazon.awssdk.services.kinesis.model.DeregisterStreamConsumerRequest;
import software.amazon.awssdk.services.kinesis.model.DeregisterStreamConsumerResponse;
import software.amazon.awssdk.services.kinesis.model.DescribeLimitsRequest;
import software.amazon.awssdk.services.kinesis.model.DescribeLimitsResponse;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamConsumerRequest;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamConsumerResponse;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamRequest;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamResponse;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamSummaryRequest;
import software.amazon.awssdk.services.kinesis.model.DescribeStreamSummaryResponse;
import software.amazon.awssdk.services.kinesis.model.DisableEnhancedMonitoringRequest;
import software.amazon.awssdk.services.kinesis.model.DisableEnhancedMonitoringResponse;
import software.amazon.awssdk.services.kinesis.model.EnableEnhancedMonitoringRequest;
import software.amazon.awssdk.services.kinesis.model.EnableEnhancedMonitoringResponse;
import software.amazon.awssdk.services.kinesis.model.ExpiredIteratorException;
import software.amazon.awssdk.services.kinesis.model.ExpiredNextTokenException;
import software.amazon.awssdk.services.kinesis.model.GetRecordsRequest;
import software.amazon.awssdk.services.kinesis.model.GetRecordsResponse;
import software.amazon.awssdk.services.kinesis.model.GetResourcePolicyRequest;
import software.amazon.awssdk.services.kinesis.model.GetResourcePolicyResponse;
import software.amazon.awssdk.services.kinesis.model.GetShardIteratorRequest;
import software.amazon.awssdk.services.kinesis.model.GetShardIteratorResponse;
import software.amazon.awssdk.services.kinesis.model.IncreaseStreamRetentionPeriodRequest;
import software.amazon.awssdk.services.kinesis.model.IncreaseStreamRetentionPeriodResponse;
import software.amazon.awssdk.services.kinesis.model.InternalFailureException;
import software.amazon.awssdk.services.kinesis.model.InvalidArgumentException;
import software.amazon.awssdk.services.kinesis.model.KinesisException;
import software.amazon.awssdk.services.kinesis.model.KmsAccessDeniedException;
import software.amazon.awssdk.services.kinesis.model.KmsDisabledException;
import software.amazon.awssdk.services.kinesis.model.KmsInvalidStateException;
import software.amazon.awssdk.services.kinesis.model.KmsNotFoundException;
import software.amazon.awssdk.services.kinesis.model.KmsOptInRequiredException;
import software.amazon.awssdk.services.kinesis.model.KmsThrottlingException;
import software.amazon.awssdk.services.kinesis.model.LimitExceededException;
import software.amazon.awssdk.services.kinesis.model.ListShardsRequest;
import software.amazon.awssdk.services.kinesis.model.ListShardsResponse;
import software.amazon.awssdk.services.kinesis.model.ListStreamConsumersRequest;
import software.amazon.awssdk.services.kinesis.model.ListStreamConsumersResponse;
import software.amazon.awssdk.services.kinesis.model.ListStreamsRequest;
import software.amazon.awssdk.services.kinesis.model.ListStreamsResponse;
import software.amazon.awssdk.services.kinesis.model.ListTagsForStreamRequest;
import software.amazon.awssdk.services.kinesis.model.ListTagsForStreamResponse;
import software.amazon.awssdk.services.kinesis.model.MergeShardsRequest;
import software.amazon.awssdk.services.kinesis.model.MergeShardsResponse;
import software.amazon.awssdk.services.kinesis.model.ProvisionedThroughputExceededException;
import software.amazon.awssdk.services.kinesis.model.PutRecordRequest;
import software.amazon.awssdk.services.kinesis.model.PutRecordResponse;
import software.amazon.awssdk.services.kinesis.model.PutRecordsRequest;
import software.amazon.awssdk.services.kinesis.model.PutRecordsResponse;
import software.amazon.awssdk.services.kinesis.model.PutResourcePolicyRequest;
import software.amazon.awssdk.services.kinesis.model.PutResourcePolicyResponse;
import software.amazon.awssdk.services.kinesis.model.RegisterStreamConsumerRequest;
import software.amazon.awssdk.services.kinesis.model.RegisterStreamConsumerResponse;
import software.amazon.awssdk.services.kinesis.model.RemoveTagsFromStreamRequest;
import software.amazon.awssdk.services.kinesis.model.RemoveTagsFromStreamResponse;
import software.amazon.awssdk.services.kinesis.model.ResourceInUseException;
import software.amazon.awssdk.services.kinesis.model.ResourceNotFoundException;
import software.amazon.awssdk.services.kinesis.model.SplitShardRequest;
import software.amazon.awssdk.services.kinesis.model.SplitShardResponse;
import software.amazon.awssdk.services.kinesis.model.StartStreamEncryptionRequest;
import software.amazon.awssdk.services.kinesis.model.StartStreamEncryptionResponse;
import software.amazon.awssdk.services.kinesis.model.StopStreamEncryptionRequest;
import software.amazon.awssdk.services.kinesis.model.StopStreamEncryptionResponse;
import software.amazon.awssdk.services.kinesis.model.SubscribeToShardEventStream;
import software.amazon.awssdk.services.kinesis.model.SubscribeToShardRequest;
import software.amazon.awssdk.services.kinesis.model.SubscribeToShardResponse;
import software.amazon.awssdk.services.kinesis.model.SubscribeToShardResponseHandler;
import software.amazon.awssdk.services.kinesis.model.UpdateShardCountRequest;
import software.amazon.awssdk.services.kinesis.model.UpdateShardCountResponse;
import software.amazon.awssdk.services.kinesis.model.UpdateStreamModeRequest;
import software.amazon.awssdk.services.kinesis.model.UpdateStreamModeResponse;
import software.amazon.awssdk.services.kinesis.model.ValidationException;
import software.amazon.awssdk.services.kinesis.transform.AddTagsToStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.CreateStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DecreaseStreamRetentionPeriodRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DeleteResourcePolicyRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DeleteStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DeregisterStreamConsumerRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DescribeLimitsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DescribeStreamConsumerRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DescribeStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DescribeStreamSummaryRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.DisableEnhancedMonitoringRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.EnableEnhancedMonitoringRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.GetRecordsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.GetResourcePolicyRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.GetShardIteratorRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.IncreaseStreamRetentionPeriodRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.ListShardsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.ListStreamConsumersRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.ListStreamsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.ListTagsForStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.MergeShardsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.PutRecordRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.PutRecordsRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.PutResourcePolicyRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.RegisterStreamConsumerRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.RemoveTagsFromStreamRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.SplitShardRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.StartStreamEncryptionRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.StopStreamEncryptionRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.SubscribeToShardRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.UpdateShardCountRequestMarshaller;
import software.amazon.awssdk.services.kinesis.transform.UpdateStreamModeRequestMarshaller;
import software.amazon.awssdk.services.kinesis.waiters.KinesisAsyncWaiter;
import software.amazon.awssdk.utils.CompletableFutureUtils;

/**
 * Internal implementation of {@link KinesisAsyncClient}.
 *
 * @see KinesisAsyncClient#builder()
 */
@Generated("software.amazon.awssdk:codegen")
@SdkInternalApi
final class DefaultKinesisAsyncClient implements KinesisAsyncClient {
    private static final Logger log = LoggerFactory.getLogger(DefaultKinesisAsyncClient.class);

    private static final AwsProtocolMetadata protocolMetadata = AwsProtocolMetadata.builder()
            .serviceProtocol(AwsServiceProtocol.CBOR).build();

    private final AsyncClientHandler clientHandler;

    private final AwsCborProtocolFactory protocolFactory;

    private final SdkClientConfiguration clientConfiguration;

    private final AwsJsonProtocolFactory jsonProtocolFactory;

    private final ScheduledExecutorService executorService;

    private final Executor executor;

    protected DefaultKinesisAsyncClient(SdkClientConfiguration clientConfiguration) {
        this.clientHandler = new AwsAsyncClientHandler(clientConfiguration);
        this.clientConfiguration = clientConfiguration.toBuilder().option(SdkClientOption.SDK_CLIENT, this).build();
        this.protocolFactory = init(AwsCborProtocolFactory.builder()).build();
        this.jsonProtocolFactory = init(AwsJsonProtocolFactory.builder()).build();
        this.executor = clientConfiguration.option(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR);
        this.executorService = clientConfiguration.option(SdkClientOption.SCHEDULED_EXECUTOR_SERVICE);
    }

    /**
     * 

* Adds or updates tags for the specified Kinesis data stream. You can assign up to 50 tags to a data stream. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* If tags have already been assigned to the stream, AddTagsToStream overwrites any existing tags that * correspond to the specified tag keys. *

*

* AddTagsToStream has a limit of five transactions per second per account. *

* * @param addTagsToStreamRequest * Represents the input for AddTagsToStream. * @return A Java Future containing the result of the AddTagsToStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.AddTagsToStream * @see AWS API * Documentation */ @Override public CompletableFuture addTagsToStream(AddTagsToStreamRequest addTagsToStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(addTagsToStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, addTagsToStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "AddTagsToStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, AddTagsToStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("AddTagsToStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new AddTagsToStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(addTagsToStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Creates a Kinesis data stream. A stream captures and transports data records that are continuously emitted from * different data sources or producers. Scale-out within a stream is explicitly supported by means of shards, * which are uniquely identified groups of data records in a stream. *

*

* You can create your data stream using either on-demand or provisioned capacity mode. Data streams with an * on-demand mode require no capacity planning and automatically scale to handle gigabytes of write and read * throughput per minute. With the on-demand mode, Kinesis Data Streams automatically manages the shards in order to * provide the necessary throughput. For the data streams with a provisioned mode, you must specify the number of * shards for the data stream. Each shard can support reads up to five transactions per second, up to a maximum data * read total of 2 MiB per second. Each shard can support writes up to 1,000 records per second, up to a maximum * data write total of 1 MiB per second. If the amount of data input increases or decreases, you can add or remove * shards. *

*

* The stream name identifies the stream. The name is scoped to the Amazon Web Services account used by the * application. It is also scoped by Amazon Web Services Region. That is, two streams in two different accounts can * have the same name, and two streams in the same account, but in two different Regions, can have the same name. *

*

* CreateStream is an asynchronous operation. Upon receiving a CreateStream request, * Kinesis Data Streams immediately returns and sets the stream status to CREATING. After the stream is * created, Kinesis Data Streams sets the stream status to ACTIVE. You should perform read and write * operations only on an ACTIVE stream. *

*

* You receive a LimitExceededException when making a CreateStream request when you try to * do one of the following: *

*
    *
  • *

    * Have more than five streams in the CREATING state at any point in time. *

    *
  • *
  • *

    * Create more shards than are authorized for your account. *

    *
  • *
*

* For the default shard limit for an Amazon Web Services account, see Amazon Kinesis Data Streams * Limits in the Amazon Kinesis Data Streams Developer Guide. To increase this limit, contact Amazon Web Services * Support. *

*

* You can use DescribeStreamSummary to check the stream status, which is returned in * StreamStatus. *

*

* CreateStream has a limit of five transactions per second per account. *

*

* You can add tags to the stream when making a CreateStream request by setting the Tags * parameter. If you pass Tags parameter, in addition to having kinesis:createStream * permission, you must also have kinesis:addTagsToStream permission for the stream that will be * created. Tags will take effect from the CREATING status of the stream. *

* * @param createStreamRequest * Represents the input for CreateStream. * @return A Java Future containing the result of the CreateStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.CreateStream * @see AWS API * Documentation */ @Override public CompletableFuture createStream(CreateStreamRequest createStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, createStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, CreateStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("CreateStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new CreateStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(createStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Decreases the Kinesis data stream's retention period, which is the length of time data records are accessible * after they are added to the stream. The minimum value of a stream's retention period is 24 hours. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* This operation may result in lost data. For example, if the stream's retention period is 48 hours and is * decreased to 24 hours, any data already in the stream that is older than 24 hours is inaccessible. *

* * @param decreaseStreamRetentionPeriodRequest * Represents the input for DecreaseStreamRetentionPeriod. * @return A Java Future containing the result of the DecreaseStreamRetentionPeriod operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DecreaseStreamRetentionPeriod * @see AWS API Documentation */ @Override public CompletableFuture decreaseStreamRetentionPeriod( DecreaseStreamRetentionPeriodRequest decreaseStreamRetentionPeriodRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(decreaseStreamRetentionPeriodRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, decreaseStreamRetentionPeriodRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DecreaseStreamRetentionPeriod"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DecreaseStreamRetentionPeriodResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DecreaseStreamRetentionPeriod").withProtocolMetadata(protocolMetadata) .withMarshaller(new DecreaseStreamRetentionPeriodRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(decreaseStreamRetentionPeriodRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Delete a policy for the specified data stream or consumer. Request patterns can be one of the following: *

*
    *
  • *

    * Data stream pattern: arn:aws.*:kinesis:.*:\d{12}:.*stream/\S+ *

    *
  • *
  • *

    * Consumer pattern: * ^(arn):aws.*:kinesis:.*:\d{12}:.*stream\/[a-zA-Z0-9_.-]+\/consumer\/[a-zA-Z0-9_.-]+:[0-9]+ *

    *
  • *
* * @param deleteResourcePolicyRequest * @return A Java Future containing the result of the DeleteResourcePolicy operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DeleteResourcePolicy * @see AWS * API Documentation */ @Override public CompletableFuture deleteResourcePolicy( DeleteResourcePolicyRequest deleteResourcePolicyRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteResourcePolicyRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteResourcePolicyRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteResourcePolicy"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DeleteResourcePolicyResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeleteResourcePolicy").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeleteResourcePolicyRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deleteResourcePolicyRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Deletes a Kinesis data stream and all its shards and data. You must shut down any applications that are operating * on the stream before you delete the stream. If an application attempts to operate on a deleted stream, it * receives the exception ResourceNotFoundException. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* If the stream is in the ACTIVE state, you can delete it. After a DeleteStream request, * the specified stream is in the DELETING state until Kinesis Data Streams completes the deletion. *

*

* Note: Kinesis Data Streams might continue to accept data read and write operations, such as * PutRecord, PutRecords, and GetRecords, on a stream in the DELETING state until * the stream deletion is complete. *

*

* When you delete a stream, any shards in that stream are also deleted, and any tags are dissociated from the * stream. *

*

* You can use the DescribeStreamSummary operation to check the state of the stream, which is returned in * StreamStatus. *

*

* DeleteStream has a limit of five transactions per second per account. *

* * @param deleteStreamRequest * Represents the input for DeleteStream. * @return A Java Future containing the result of the DeleteStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DeleteStream * @see AWS API * Documentation */ @Override public CompletableFuture deleteStream(DeleteStreamRequest deleteStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, DeleteStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeleteStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeleteStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deleteStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* To deregister a consumer, provide its ARN. Alternatively, you can provide the ARN of the data stream and the name * you gave the consumer when you registered it. You may also provide all three parameters, as long as they don't * conflict with each other. If you don't know the name or ARN of the consumer that you want to deregister, you can * use the ListStreamConsumers operation to get a list of the descriptions of all the consumers that are * currently registered with a given data stream. The description of a consumer contains its name and ARN. *

*

* This operation has a limit of five transactions per second per stream. *

* * @param deregisterStreamConsumerRequest * @return A Java Future containing the result of the DeregisterStreamConsumer operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DeregisterStreamConsumer * @see AWS API Documentation */ @Override public CompletableFuture deregisterStreamConsumer( DeregisterStreamConsumerRequest deregisterStreamConsumerRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deregisterStreamConsumerRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deregisterStreamConsumerRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeregisterStreamConsumer"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DeregisterStreamConsumerResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeregisterStreamConsumer").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeregisterStreamConsumerRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deregisterStreamConsumerRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Describes the shard limits and usage for the account. *

*

* If you update your account limits, the old limits might be returned for a few minutes. *

*

* This operation has a limit of one transaction per second per account. *

* * @param describeLimitsRequest * @return A Java Future containing the result of the DescribeLimits operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DescribeLimits * @see AWS API * Documentation */ @Override public CompletableFuture describeLimits(DescribeLimitsRequest describeLimitsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(describeLimitsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, describeLimitsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeLimits"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DescribeLimitsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DescribeLimits").withProtocolMetadata(protocolMetadata) .withMarshaller(new DescribeLimitsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(describeLimitsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Describes the specified Kinesis data stream. *

* *

* This API has been revised. It's highly recommended that you use the DescribeStreamSummary API to get a * summarized description of the specified Kinesis data stream and the ListShards API to list the shards in a * specified data stream and obtain information about each shard. *

*
*

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* The information returned includes the stream name, Amazon Resource Name (ARN), creation time, enhanced metric * configuration, and shard map. The shard map is an array of shard objects. For each shard object, there is the * hash key and sequence number ranges that the shard spans, and the IDs of any earlier shards that played in a role * in creating the shard. Every record ingested in the stream is identified by a sequence number, which is assigned * when the record is put into the stream. *

*

* You can limit the number of shards returned by each call. For more information, see Retrieving * Shards from a Stream in the Amazon Kinesis Data Streams Developer Guide. *

*

* There are no guarantees about the chronological order shards returned. To process shards in chronological order, * use the ID of the parent shard to track the lineage to the oldest shard. *

*

* This operation has a limit of 10 transactions per second per account. *

* * @param describeStreamRequest * Represents the input for DescribeStream. * @return A Java Future containing the result of the DescribeStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DescribeStream * @see AWS API * Documentation */ @Override public CompletableFuture describeStream(DescribeStreamRequest describeStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(describeStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, describeStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DescribeStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DescribeStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new DescribeStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(describeStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* To get the description of a registered consumer, provide the ARN of the consumer. Alternatively, you can provide * the ARN of the data stream and the name you gave the consumer when you registered it. You may also provide all * three parameters, as long as they don't conflict with each other. If you don't know the name or ARN of the * consumer that you want to describe, you can use the ListStreamConsumers operation to get a list of the * descriptions of all the consumers that are currently registered with a given data stream. *

*

* This operation has a limit of 20 transactions per second per stream. *

* *

* When making a cross-account call with DescribeStreamConsumer, make sure to provide the ARN of the * consumer. *

*
* * @param describeStreamConsumerRequest * @return A Java Future containing the result of the DescribeStreamConsumer operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DescribeStreamConsumer * @see AWS API Documentation */ @Override public CompletableFuture describeStreamConsumer( DescribeStreamConsumerRequest describeStreamConsumerRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(describeStreamConsumerRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, describeStreamConsumerRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeStreamConsumer"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DescribeStreamConsumerResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DescribeStreamConsumer").withProtocolMetadata(protocolMetadata) .withMarshaller(new DescribeStreamConsumerRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(describeStreamConsumerRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Provides a summarized description of the specified Kinesis data stream without the shard list. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* The information returned includes the stream name, Amazon Resource Name (ARN), status, record retention period, * approximate creation time, monitoring, encryption details, and open shard count. *

*

* DescribeStreamSummary has a limit of 20 transactions per second per account. *

* * @param describeStreamSummaryRequest * @return A Java Future containing the result of the DescribeStreamSummary operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DescribeStreamSummary * @see AWS * API Documentation */ @Override public CompletableFuture describeStreamSummary( DescribeStreamSummaryRequest describeStreamSummaryRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(describeStreamSummaryRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, describeStreamSummaryRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeStreamSummary"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DescribeStreamSummaryResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DescribeStreamSummary").withProtocolMetadata(protocolMetadata) .withMarshaller(new DescribeStreamSummaryRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(describeStreamSummaryRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Disables enhanced monitoring. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
* * @param disableEnhancedMonitoringRequest * Represents the input for DisableEnhancedMonitoring. * @return A Java Future containing the result of the DisableEnhancedMonitoring operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.DisableEnhancedMonitoring * @see AWS API Documentation */ @Override public CompletableFuture disableEnhancedMonitoring( DisableEnhancedMonitoringRequest disableEnhancedMonitoringRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(disableEnhancedMonitoringRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, disableEnhancedMonitoringRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DisableEnhancedMonitoring"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DisableEnhancedMonitoringResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DisableEnhancedMonitoring").withProtocolMetadata(protocolMetadata) .withMarshaller(new DisableEnhancedMonitoringRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(disableEnhancedMonitoringRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Enables enhanced Kinesis data stream monitoring for shard-level metrics. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
* * @param enableEnhancedMonitoringRequest * Represents the input for EnableEnhancedMonitoring. * @return A Java Future containing the result of the EnableEnhancedMonitoring operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.EnableEnhancedMonitoring * @see AWS API Documentation */ @Override public CompletableFuture enableEnhancedMonitoring( EnableEnhancedMonitoringRequest enableEnhancedMonitoringRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(enableEnhancedMonitoringRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, enableEnhancedMonitoringRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "EnableEnhancedMonitoring"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, EnableEnhancedMonitoringResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("EnableEnhancedMonitoring").withProtocolMetadata(protocolMetadata) .withMarshaller(new EnableEnhancedMonitoringRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(enableEnhancedMonitoringRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Gets data records from a Kinesis data stream's shard. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* Specify a shard iterator using the ShardIterator parameter. The shard iterator specifies the * position in the shard from which you want to start reading data records sequentially. If there are no records * available in the portion of the shard that the iterator points to, GetRecords returns an empty list. It * might take multiple calls to get to a portion of the shard that contains records. *

*

* You can scale by provisioning multiple shards per stream while considering service limits (for more information, * see Amazon Kinesis Data * Streams Limits in the Amazon Kinesis Data Streams Developer Guide). Your application should have one * thread per shard, each reading continuously from its stream. To read from a stream continually, call * GetRecords in a loop. Use GetShardIterator to get the shard iterator to specify in the first * GetRecords call. GetRecords returns a new shard iterator in NextShardIterator. Specify * the shard iterator returned in NextShardIterator in subsequent calls to GetRecords. If the * shard has been closed, the shard iterator can't return more data and GetRecords returns null * in NextShardIterator. You can terminate the loop when the shard is closed, or when the shard * iterator reaches the record with the sequence number or other attribute that marks it as the last record to * process. *

*

* Each data record can be up to 1 MiB in size, and each shard can read up to 2 MiB per second. You can ensure that * your calls don't exceed the maximum supported size or throughput by using the Limit parameter to * specify the maximum number of records that GetRecords can return. Consider your average record size when * determining this limit. The maximum number of records that can be returned per call is 10,000. *

*

* The size of the data returned by GetRecords varies depending on the utilization of the shard. It is * recommended that consumer applications retrieve records via the GetRecords command using the 5 TPS * limit to remain caught up. Retrieving records less frequently can lead to consumer applications falling behind. * The maximum size of data that GetRecords can return is 10 MiB. If a call returns this amount of data, * subsequent calls made within the next 5 seconds throw ProvisionedThroughputExceededException. If * there is insufficient provisioned throughput on the stream, subsequent calls made within the next 1 second throw * ProvisionedThroughputExceededException. GetRecords doesn't return any data when it throws an * exception. For this reason, we recommend that you wait 1 second between calls to GetRecords. However, it's * possible that the application will get exceptions for longer than 1 second. *

*

* To detect whether the application is falling behind in processing, you can use the * MillisBehindLatest response attribute. You can also monitor the stream using CloudWatch metrics and * other mechanisms (see Monitoring in * the Amazon Kinesis Data Streams Developer Guide). *

*

* Each Amazon Kinesis record includes a value, ApproximateArrivalTimestamp, that is set when a stream * successfully receives and stores a record. This is commonly referred to as a server-side time stamp, whereas a * client-side time stamp is set when a data producer creates or sends the record to a stream (a data producer is * any data source putting data records into a stream, for example with PutRecords). The time stamp has * millisecond precision. There are no guarantees about the time stamp accuracy, or that the time stamp is always * increasing. For example, records in a shard or across a stream might have time stamps that are out of order. *

*

* This operation has a limit of five transactions per second per shard. *

* * @param getRecordsRequest * Represents the input for GetRecords. * @return A Java Future containing the result of the GetRecords operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ProvisionedThroughputExceededException The request rate for the stream is too high, or the requested * data is too large for the available throughput. Reduce the frequency or size of your requests. For more * information, see Streams Limits in * the Amazon Kinesis Data Streams Developer Guide, and Error Retries and Exponential * Backoff in Amazon Web Services in the Amazon Web Services General Reference.
  • *
  • ExpiredIteratorException The provided iterator exceeds the maximum age allowed.
  • *
  • KmsDisabledException The request was rejected because the specified customer master key (CMK) isn't * enabled.
  • *
  • KmsInvalidStateException The request was rejected because the state of the specified resource isn't * valid for this request. For more information, see How Key State Affects Use of * a Customer Master Key in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • KmsAccessDeniedException The ciphertext references a key that doesn't exist or that you don't have * access to.
  • *
  • KmsNotFoundException The request was rejected because the specified entity or resource can't be * found.
  • *
  • KmsOptInRequiredException The Amazon Web Services access key ID needs a subscription for the service. *
  • *
  • KmsThrottlingException The request was denied due to request throttling. For more information about * throttling, see Limits * in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.GetRecords * @see AWS API * Documentation */ @Override public CompletableFuture getRecords(GetRecordsRequest getRecordsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getRecordsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getRecordsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetRecords"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, GetRecordsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("GetRecords") .withProtocolMetadata(protocolMetadata) .withMarshaller(new GetRecordsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getRecordsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Returns a policy attached to the specified data stream or consumer. Request patterns can be one of the following: *

*
    *
  • *

    * Data stream pattern: arn:aws.*:kinesis:.*:\d{12}:.*stream/\S+ *

    *
  • *
  • *

    * Consumer pattern: * ^(arn):aws.*:kinesis:.*:\d{12}:.*stream\/[a-zA-Z0-9_.-]+\/consumer\/[a-zA-Z0-9_.-]+:[0-9]+ *

    *
  • *
* * @param getResourcePolicyRequest * @return A Java Future containing the result of the GetResourcePolicy operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.GetResourcePolicy * @see AWS API * Documentation */ @Override public CompletableFuture getResourcePolicy(GetResourcePolicyRequest getResourcePolicyRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getResourcePolicyRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getResourcePolicyRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetResourcePolicy"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetResourcePolicyResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetResourcePolicy").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetResourcePolicyRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getResourcePolicyRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Gets an Amazon Kinesis shard iterator. A shard iterator expires 5 minutes after it is returned to the requester. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* A shard iterator specifies the shard position from which to start reading data records sequentially. The position * is specified using the sequence number of a data record in a shard. A sequence number is the identifier * associated with every record ingested in the stream, and is assigned when a record is put into the stream. Each * stream has one or more shards. *

*

* You must specify the shard iterator type. For example, you can set the ShardIteratorType parameter * to read exactly from the position denoted by a specific sequence number by using the * AT_SEQUENCE_NUMBER shard iterator type. Alternatively, the parameter can read right after the * sequence number by using the AFTER_SEQUENCE_NUMBER shard iterator type, using sequence numbers * returned by earlier calls to PutRecord, PutRecords, GetRecords, or DescribeStream. In * the request, you can specify the shard iterator type AT_TIMESTAMP to read records from an arbitrary * point in time, TRIM_HORIZON to cause ShardIterator to point to the last untrimmed * record in the shard in the system (the oldest data record in the shard), or LATEST so that you * always read the most recent data in the shard. *

*

* When you read repeatedly from a stream, use a GetShardIterator request to get the first shard iterator for * use in your first GetRecords request and for subsequent reads use the shard iterator returned by the * GetRecords request in NextShardIterator. A new shard iterator is returned by every * GetRecords request in NextShardIterator, which you use in the ShardIterator * parameter of the next GetRecords request. *

*

* If a GetShardIterator request is made too often, you receive a * ProvisionedThroughputExceededException. For more information about throughput limits, see * GetRecords, and Streams Limits in the * Amazon Kinesis Data Streams Developer Guide. *

*

* If the shard is closed, GetShardIterator returns a valid iterator for the last sequence number of the * shard. A shard can be closed as a result of using SplitShard or MergeShards. *

*

* GetShardIterator has a limit of five transactions per second per account per open shard. *

* * @param getShardIteratorRequest * Represents the input for GetShardIterator. * @return A Java Future containing the result of the GetShardIterator operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ProvisionedThroughputExceededException The request rate for the stream is too high, or the requested * data is too large for the available throughput. Reduce the frequency or size of your requests. For more * information, see Streams Limits in * the Amazon Kinesis Data Streams Developer Guide, and Error Retries and Exponential * Backoff in Amazon Web Services in the Amazon Web Services General Reference.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.GetShardIterator * @see AWS API * Documentation */ @Override public CompletableFuture getShardIterator(GetShardIteratorRequest getShardIteratorRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getShardIteratorRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getShardIteratorRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetShardIterator"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetShardIteratorResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetShardIterator").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetShardIteratorRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getShardIteratorRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Increases the Kinesis data stream's retention period, which is the length of time data records are accessible * after they are added to the stream. The maximum value of a stream's retention period is 8760 hours (365 days). *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* If you choose a longer stream retention period, this operation increases the time period during which records * that have not yet expired are accessible. However, it does not make previous, expired data (older than the * stream's previous retention period) accessible after the operation has been called. For example, if a stream's * retention period is set to 24 hours and is increased to 168 hours, any data that is older than 24 hours remains * inaccessible to consumer applications. *

* * @param increaseStreamRetentionPeriodRequest * Represents the input for IncreaseStreamRetentionPeriod. * @return A Java Future containing the result of the IncreaseStreamRetentionPeriod operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.IncreaseStreamRetentionPeriod * @see AWS API Documentation */ @Override public CompletableFuture increaseStreamRetentionPeriod( IncreaseStreamRetentionPeriodRequest increaseStreamRetentionPeriodRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(increaseStreamRetentionPeriodRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, increaseStreamRetentionPeriodRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "IncreaseStreamRetentionPeriod"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, IncreaseStreamRetentionPeriodResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("IncreaseStreamRetentionPeriod").withProtocolMetadata(protocolMetadata) .withMarshaller(new IncreaseStreamRetentionPeriodRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(increaseStreamRetentionPeriodRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Lists the shards in a stream and provides information about each shard. This operation has a limit of 1000 * transactions per second per data stream. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* This action does not list expired shards. For information about expired shards, see Data Routing, Data Persistence, and Shard State after a Reshard. *

* *

* This API is a new operation that is used by the Amazon Kinesis Client Library (KCL). If you have a fine-grained * IAM policy that only allows specific operations, you must update your policy to allow calls to this API. For more * information, see Controlling * Access to Amazon Kinesis Data Streams Resources Using IAM. *

*
* * @param listShardsRequest * @return A Java Future containing the result of the ListShards operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ExpiredNextTokenException The pagination token passed to the operation is expired.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.ListShards * @see AWS API * Documentation */ @Override public CompletableFuture listShards(ListShardsRequest listShardsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listShardsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listShardsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListShards"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, ListShardsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("ListShards") .withProtocolMetadata(protocolMetadata) .withMarshaller(new ListShardsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listShardsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Lists the consumers registered to receive data from a stream using enhanced fan-out, and provides information * about each consumer. *

*

* This operation has a limit of 5 transactions per second per stream. *

* * @param listStreamConsumersRequest * @return A Java Future containing the result of the ListStreamConsumers operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ExpiredNextTokenException The pagination token passed to the operation is expired.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.ListStreamConsumers * @see AWS * API Documentation */ @Override public CompletableFuture listStreamConsumers( ListStreamConsumersRequest listStreamConsumersRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listStreamConsumersRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listStreamConsumersRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListStreamConsumers"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ListStreamConsumersResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListStreamConsumers").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListStreamConsumersRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listStreamConsumersRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Lists your Kinesis data streams. *

*

* The number of streams may be too large to return from a single call to ListStreams. You can limit * the number of returned streams using the Limit parameter. If you do not specify a value for the * Limit parameter, Kinesis Data Streams uses the default limit, which is currently 100. *

*

* You can detect if there are more streams available to list by using the HasMoreStreams flag from the * returned output. If there are more streams available, you can request more streams by using the name of the last * stream returned by the ListStreams request in the ExclusiveStartStreamName parameter in * a subsequent request to ListStreams. The group of stream names returned by the subsequent request is * then added to the list. You can continue this process until all the stream names have been collected in the list. *

*

* ListStreams has a limit of five transactions per second per account. *

* * @param listStreamsRequest * Represents the input for ListStreams. * @return A Java Future containing the result of the ListStreams operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ExpiredNextTokenException The pagination token passed to the operation is expired.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.ListStreams * @see AWS API * Documentation */ @Override public CompletableFuture listStreams(ListStreamsRequest listStreamsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listStreamsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listStreamsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListStreams"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, ListStreamsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListStreams").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListStreamsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listStreamsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Lists the tags for the specified Kinesis data stream. This operation has a limit of five transactions per second * per account. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
* * @param listTagsForStreamRequest * Represents the input for ListTagsForStream. * @return A Java Future containing the result of the ListTagsForStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.ListTagsForStream * @see AWS API * Documentation */ @Override public CompletableFuture listTagsForStream(ListTagsForStreamRequest listTagsForStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listTagsForStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listTagsForStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListTagsForStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ListTagsForStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListTagsForStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListTagsForStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listTagsForStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Merges two adjacent shards in a Kinesis data stream and combines them into a single shard to reduce the stream's * capacity to ingest and transport data. This API is only supported for the data streams with the provisioned * capacity mode. Two shards are considered adjacent if the union of the hash key ranges for the two shards form a * contiguous set with no gaps. For example, if you have two shards, one with a hash key range of 276...381 and the * other with a hash key range of 382...454, then you could merge these two shards into a single shard that would * have a hash key range of 276...454. After the merge, the single child shard receives data for all hash key values * covered by the two parent shards. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* MergeShards is called when there is a need to reduce the overall capacity of a stream because of * excess capacity that is not being used. You must specify the shard to be merged and the adjacent shard for a * stream. For more information about merging shards, see Merge Two * Shards in the Amazon Kinesis Data Streams Developer Guide. *

*

* If the stream is in the ACTIVE state, you can call MergeShards. If a stream is in the * CREATING, UPDATING, or DELETING state, MergeShards returns a * ResourceInUseException. If the specified stream does not exist, MergeShards returns a * ResourceNotFoundException. *

*

* You can use DescribeStreamSummary to check the state of the stream, which is returned in * StreamStatus. *

*

* MergeShards is an asynchronous operation. Upon receiving a MergeShards request, Amazon * Kinesis Data Streams immediately returns a response and sets the StreamStatus to * UPDATING. After the operation is completed, Kinesis Data Streams sets the StreamStatus * to ACTIVE. Read and write operations continue to work while the stream is in the * UPDATING state. *

*

* You use DescribeStreamSummary and the ListShards APIs to determine the shard IDs that are specified * in the MergeShards request. *

*

* If you try to operate on too many streams in parallel using CreateStream, DeleteStream, * MergeShards, or SplitShard, you receive a LimitExceededException. *

*

* MergeShards has a limit of five transactions per second per account. *

* * @param mergeShardsRequest * Represents the input for MergeShards. * @return A Java Future containing the result of the MergeShards operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ValidationException Specifies that you tried to invoke this API for a data stream with the on-demand * capacity mode. This API is only supported for data streams with the provisioned capacity mode.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.MergeShards * @see AWS API * Documentation */ @Override public CompletableFuture mergeShards(MergeShardsRequest mergeShardsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(mergeShardsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, mergeShardsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "MergeShards"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, MergeShardsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("MergeShards").withProtocolMetadata(protocolMetadata) .withMarshaller(new MergeShardsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(mergeShardsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Writes a single data record into an Amazon Kinesis data stream. Call PutRecord to send data into the * stream for real-time ingestion and subsequent processing, one record at a time. Each shard can support writes up * to 1,000 records per second, up to a maximum data write total of 1 MiB per second. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* You must specify the name of the stream that captures, stores, and transports the data; a partition key; and the * data blob itself. *

*

* The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website * clickstream data, and so on. *

*

* The partition key is used by Kinesis Data Streams to distribute data across shards. Kinesis Data Streams * segregates the data records that belong to a stream into multiple shards, using the partition key associated with * each data record to determine the shard to which a given data record belongs. *

*

* Partition keys are Unicode strings, with a maximum length limit of 256 characters for each key. An MD5 hash * function is used to map partition keys to 128-bit integer values and to map associated data records to shards * using the hash key ranges of the shards. You can override hashing the partition key to determine the shard by * explicitly specifying a hash value using the ExplicitHashKey parameter. For more information, see Adding Data to a Stream in the Amazon Kinesis Data Streams Developer Guide. *

*

* PutRecord returns the shard ID of where the data record was placed and the sequence number that was * assigned to the data record. *

*

* Sequence numbers increase over time and are specific to a shard within a stream, not across all shards within a * stream. To guarantee strictly increasing ordering, write serially to a shard and use the * SequenceNumberForOrdering parameter. For more information, see Adding Data to a Stream in the Amazon Kinesis Data Streams Developer Guide. *

* *

* After you write a record to a stream, you cannot modify that record or its order within the stream. *

*
*

* If a PutRecord request cannot be processed because of insufficient provisioned throughput on the * shard involved in the request, PutRecord throws ProvisionedThroughputExceededException. *

*

* By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use * IncreaseStreamRetentionPeriod or DecreaseStreamRetentionPeriod to modify this retention period. *

* * @param putRecordRequest * Represents the input for PutRecord. * @return A Java Future containing the result of the PutRecord operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ProvisionedThroughputExceededException The request rate for the stream is too high, or the requested * data is too large for the available throughput. Reduce the frequency or size of your requests. For more * information, see Streams Limits in * the Amazon Kinesis Data Streams Developer Guide, and Error Retries and Exponential * Backoff in Amazon Web Services in the Amazon Web Services General Reference.
  • *
  • KmsDisabledException The request was rejected because the specified customer master key (CMK) isn't * enabled.
  • *
  • KmsInvalidStateException The request was rejected because the state of the specified resource isn't * valid for this request. For more information, see How Key State Affects Use of * a Customer Master Key in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • KmsAccessDeniedException The ciphertext references a key that doesn't exist or that you don't have * access to.
  • *
  • KmsNotFoundException The request was rejected because the specified entity or resource can't be * found.
  • *
  • KmsOptInRequiredException The Amazon Web Services access key ID needs a subscription for the service. *
  • *
  • KmsThrottlingException The request was denied due to request throttling. For more information about * throttling, see Limits * in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.PutRecord * @see AWS API * Documentation */ @Override public CompletableFuture putRecord(PutRecordRequest putRecordRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(putRecordRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, putRecordRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "PutRecord"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, PutRecordResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("PutRecord") .withProtocolMetadata(protocolMetadata) .withMarshaller(new PutRecordRequestMarshaller(protocolFactory)).withResponseHandler(responseHandler) .withErrorResponseHandler(errorResponseHandler).withRequestConfiguration(clientConfiguration) .withMetricCollector(apiCallMetricCollector).withInput(putRecordRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Writes multiple data records into a Kinesis data stream in a single call (also referred to as a * PutRecords request). Use this operation to send data into the stream for data ingestion and * processing. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* Each PutRecords request can support up to 500 records. Each record in the request can be as large as * 1 MiB, up to a limit of 5 MiB for the entire request, including partition keys. Each shard can support writes up * to 1,000 records per second, up to a maximum data write total of 1 MiB per second. *

*

* You must specify the name of the stream that captures, stores, and transports the data; and an array of request * Records, with each record in the array requiring a partition key and data blob. The record size * limit applies to the total size of the partition key and data blob. *

*

* The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website * clickstream data, and so on. *

*

* The partition key is used by Kinesis Data Streams as input to a hash function that maps the partition key and * associated data to a specific shard. An MD5 hash function is used to map partition keys to 128-bit integer values * and to map associated data records to shards. As a result of this hashing mechanism, all data records with the * same partition key map to the same shard within the stream. For more information, see Adding Data to a Stream in the Amazon Kinesis Data Streams Developer Guide. *

*

* Each record in the Records array may include an optional parameter, ExplicitHashKey, * which overrides the partition key to shard mapping. This parameter allows a data producer to determine explicitly * the shard where the record is stored. For more information, see Adding Multiple Records with PutRecords in the Amazon Kinesis Data Streams Developer Guide. *

*

* The PutRecords response includes an array of response Records. Each record in the * response array directly correlates with a record in the request array using natural ordering, from the top to the * bottom of the request and response. The response Records array always includes the same number of * records as the request array. *

*

* The response Records array includes both successfully and unsuccessfully processed records. Kinesis * Data Streams attempts to process all records in each PutRecords request. A single record failure * does not stop the processing of subsequent records. As a result, PutRecords doesn't guarantee the ordering of * records. If you need to read records in the same order they are written to the stream, use PutRecord * instead of PutRecords, and write to the same shard. *

*

* A successfully processed record includes ShardId and SequenceNumber values. The * ShardId parameter identifies the shard in the stream where the record is stored. The * SequenceNumber parameter is an identifier assigned to the put record, unique to all records in the * stream. *

*

* An unsuccessfully processed record includes ErrorCode and ErrorMessage values. * ErrorCode reflects the type of error and can be one of the following values: * ProvisionedThroughputExceededException or InternalFailure. ErrorMessage * provides more detailed information about the ProvisionedThroughputExceededException exception * including the account ID, stream name, and shard ID of the record that was throttled. For more information about * partially successful responses, see Adding Multiple Records with PutRecords in the Amazon Kinesis Data Streams Developer Guide. *

* *

* After you write a record to a stream, you cannot modify that record or its order within the stream. *

*
*

* By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use * IncreaseStreamRetentionPeriod or DecreaseStreamRetentionPeriod to modify this retention period. *

* * @param putRecordsRequest * A PutRecords request. * @return A Java Future containing the result of the PutRecords operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ProvisionedThroughputExceededException The request rate for the stream is too high, or the requested * data is too large for the available throughput. Reduce the frequency or size of your requests. For more * information, see Streams Limits in * the Amazon Kinesis Data Streams Developer Guide, and Error Retries and Exponential * Backoff in Amazon Web Services in the Amazon Web Services General Reference.
  • *
  • KmsDisabledException The request was rejected because the specified customer master key (CMK) isn't * enabled.
  • *
  • KmsInvalidStateException The request was rejected because the state of the specified resource isn't * valid for this request. For more information, see How Key State Affects Use of * a Customer Master Key in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • KmsAccessDeniedException The ciphertext references a key that doesn't exist or that you don't have * access to.
  • *
  • KmsNotFoundException The request was rejected because the specified entity or resource can't be * found.
  • *
  • KmsOptInRequiredException The Amazon Web Services access key ID needs a subscription for the service. *
  • *
  • KmsThrottlingException The request was denied due to request throttling. For more information about * throttling, see Limits * in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.PutRecords * @see AWS API * Documentation */ @Override public CompletableFuture putRecords(PutRecordsRequest putRecordsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(putRecordsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, putRecordsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "PutRecords"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, PutRecordsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("PutRecords") .withProtocolMetadata(protocolMetadata) .withMarshaller(new PutRecordsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(putRecordsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Attaches a resource-based policy to a data stream or registered consumer. If you are using an identity other than * the root user of the Amazon Web Services account that owns the resource, the calling identity must have the * PutResourcePolicy permissions on the specified Kinesis Data Streams resource and belong to the * owner's account in order to use this operation. If you don't have PutResourcePolicy permissions, * Amazon Kinesis Data Streams returns a 403 Access Denied error. If you receive a * ResourceNotFoundException, check to see if you passed a valid stream or consumer resource. *

*

* Request patterns can be one of the following: *

*
    *
  • *

    * Data stream pattern: arn:aws.*:kinesis:.*:\d{12}:.*stream/\S+ *

    *
  • *
  • *

    * Consumer pattern: * ^(arn):aws.*:kinesis:.*:\d{12}:.*stream\/[a-zA-Z0-9_.-]+\/consumer\/[a-zA-Z0-9_.-]+:[0-9]+ *

    *
  • *
*

* For more information, see Controlling Access to Amazon * Kinesis Data Streams Resources Using IAM. *

* * @param putResourcePolicyRequest * @return A Java Future containing the result of the PutResourcePolicy operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.PutResourcePolicy * @see AWS API * Documentation */ @Override public CompletableFuture putResourcePolicy(PutResourcePolicyRequest putResourcePolicyRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(putResourcePolicyRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, putResourcePolicyRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "PutResourcePolicy"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, PutResourcePolicyResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("PutResourcePolicy").withProtocolMetadata(protocolMetadata) .withMarshaller(new PutResourcePolicyRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(putResourcePolicyRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Registers a consumer with a Kinesis data stream. When you use this operation, the consumer you register can then * call SubscribeToShard to receive data from the stream using enhanced fan-out, at a rate of up to 2 MiB per * second for every shard you subscribe to. This rate is unaffected by the total number of consumers that read from * the same stream. *

*

* You can register up to 20 consumers per stream. A given consumer can only be registered with one stream at a * time. *

*

* For an example of how to use this operation, see Enhanced Fan-Out Using * the Kinesis Data Streams API. *

*

* The use of this operation has a limit of five transactions per second per account. Also, only 5 consumers can be * created simultaneously. In other words, you cannot have more than 5 consumers in a CREATING status * at the same time. Registering a 6th consumer while there are 5 in a CREATING status results in a * LimitExceededException. *

* * @param registerStreamConsumerRequest * @return A Java Future containing the result of the RegisterStreamConsumer operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.RegisterStreamConsumer * @see AWS API Documentation */ @Override public CompletableFuture registerStreamConsumer( RegisterStreamConsumerRequest registerStreamConsumerRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(registerStreamConsumerRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, registerStreamConsumerRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "RegisterStreamConsumer"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, RegisterStreamConsumerResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("RegisterStreamConsumer").withProtocolMetadata(protocolMetadata) .withMarshaller(new RegisterStreamConsumerRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(registerStreamConsumerRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Removes tags from the specified Kinesis data stream. Removed tags are deleted and cannot be recovered after this * operation successfully completes. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* If you specify a tag that does not exist, it is ignored. *

*

* RemoveTagsFromStream has a limit of five transactions per second per account. *

* * @param removeTagsFromStreamRequest * Represents the input for RemoveTagsFromStream. * @return A Java Future containing the result of the RemoveTagsFromStream operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.RemoveTagsFromStream * @see AWS * API Documentation */ @Override public CompletableFuture removeTagsFromStream( RemoveTagsFromStreamRequest removeTagsFromStreamRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(removeTagsFromStreamRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, removeTagsFromStreamRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "RemoveTagsFromStream"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, RemoveTagsFromStreamResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("RemoveTagsFromStream").withProtocolMetadata(protocolMetadata) .withMarshaller(new RemoveTagsFromStreamRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(removeTagsFromStreamRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Splits a shard into two new shards in the Kinesis data stream, to increase the stream's capacity to ingest and * transport data. SplitShard is called when there is a need to increase the overall capacity of a * stream because of an expected increase in the volume of data records being ingested. This API is only supported * for the data streams with the provisioned capacity mode. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* You can also use SplitShard when a shard appears to be approaching its maximum utilization; for * example, the producers sending data into the specific shard are suddenly sending more than previously * anticipated. You can also call SplitShard to increase stream capacity, so that more Kinesis Data * Streams applications can simultaneously read data from the stream for real-time processing. *

*

* You must specify the shard to be split and the new hash key, which is the position in the shard where the shard * gets split in two. In many cases, the new hash key might be the average of the beginning and ending hash key, but * it can be any hash key value in the range being mapped into the shard. For more information, see Split a * Shard in the Amazon Kinesis Data Streams Developer Guide. *

*

* You can use DescribeStreamSummary and the ListShards APIs to determine the shard ID and hash key * values for the ShardToSplit and NewStartingHashKey parameters that are specified in the * SplitShard request. *

*

* SplitShard is an asynchronous operation. Upon receiving a SplitShard request, Kinesis * Data Streams immediately returns a response and sets the stream status to UPDATING. After the * operation is completed, Kinesis Data Streams sets the stream status to ACTIVE. Read and write * operations continue to work while the stream is in the UPDATING state. *

*

* You can use DescribeStreamSummary to check the status of the stream, which is returned in * StreamStatus. If the stream is in the ACTIVE state, you can call * SplitShard. *

*

* If the specified stream does not exist, DescribeStreamSummary returns a * ResourceNotFoundException. If you try to create more shards than are authorized for your account, * you receive a LimitExceededException. *

*

* For the default shard limit for an Amazon Web Services account, see Kinesis Data Streams * Limits in the Amazon Kinesis Data Streams Developer Guide. To increase this limit, contact Amazon Web Services * Support. *

*

* If you try to operate on too many streams simultaneously using CreateStream, DeleteStream, * MergeShards, and/or SplitShard, you receive a LimitExceededException. *

*

* SplitShard has a limit of five transactions per second per account. *

* * @param splitShardRequest * Represents the input for SplitShard. * @return A Java Future containing the result of the SplitShard operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ValidationException Specifies that you tried to invoke this API for a data stream with the on-demand * capacity mode. This API is only supported for data streams with the provisioned capacity mode.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.SplitShard * @see AWS API * Documentation */ @Override public CompletableFuture splitShard(SplitShardRequest splitShardRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(splitShardRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, splitShardRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "SplitShard"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, SplitShardResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("SplitShard") .withProtocolMetadata(protocolMetadata) .withMarshaller(new SplitShardRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(splitShardRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Enables or updates server-side encryption using an Amazon Web Services KMS key for a specified stream. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* Starting encryption is an asynchronous operation. Upon receiving the request, Kinesis Data Streams returns * immediately and sets the status of the stream to UPDATING. After the update is complete, Kinesis * Data Streams sets the status of the stream back to ACTIVE. Updating or applying encryption normally * takes a few seconds to complete, but it can take minutes. You can continue to read and write data to your stream * while its status is UPDATING. Once the status of the stream is ACTIVE, encryption * begins for records written to the stream. *

*

* API Limits: You can successfully apply a new Amazon Web Services KMS key for server-side encryption 25 times in a * rolling 24-hour period. *

*

* Note: It can take up to 5 seconds after the stream is in an ACTIVE status before all records written * to the stream are encrypted. After you enable encryption, you can verify that encryption is applied by inspecting * the API response from PutRecord or PutRecords. *

* * @param startStreamEncryptionRequest * @return A Java Future containing the result of the StartStreamEncryption operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • KmsDisabledException The request was rejected because the specified customer master key (CMK) isn't * enabled.
  • *
  • KmsInvalidStateException The request was rejected because the state of the specified resource isn't * valid for this request. For more information, see How Key State Affects Use of * a Customer Master Key in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • KmsAccessDeniedException The ciphertext references a key that doesn't exist or that you don't have * access to.
  • *
  • KmsNotFoundException The request was rejected because the specified entity or resource can't be * found.
  • *
  • KmsOptInRequiredException The Amazon Web Services access key ID needs a subscription for the service. *
  • *
  • KmsThrottlingException The request was denied due to request throttling. For more information about * throttling, see Limits * in the Amazon Web Services Key Management Service Developer Guide.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.StartStreamEncryption * @see AWS * API Documentation */ @Override public CompletableFuture startStreamEncryption( StartStreamEncryptionRequest startStreamEncryptionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(startStreamEncryptionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, startStreamEncryptionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "StartStreamEncryption"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, StartStreamEncryptionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("StartStreamEncryption").withProtocolMetadata(protocolMetadata) .withMarshaller(new StartStreamEncryptionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(startStreamEncryptionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Disables server-side encryption for a specified stream. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* Stopping encryption is an asynchronous operation. Upon receiving the request, Kinesis Data Streams returns * immediately and sets the status of the stream to UPDATING. After the update is complete, Kinesis * Data Streams sets the status of the stream back to ACTIVE. Stopping encryption normally takes a few * seconds to complete, but it can take minutes. You can continue to read and write data to your stream while its * status is UPDATING. Once the status of the stream is ACTIVE, records written to the * stream are no longer encrypted by Kinesis Data Streams. *

*

* API Limits: You can successfully disable server-side encryption 25 times in a rolling 24-hour period. *

*

* Note: It can take up to 5 seconds after the stream is in an ACTIVE status before all records written * to the stream are no longer subject to encryption. After you disabled encryption, you can verify that encryption * is not applied by inspecting the API response from PutRecord or PutRecords. *

* * @param stopStreamEncryptionRequest * @return A Java Future containing the result of the StopStreamEncryption operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.StopStreamEncryption * @see AWS * API Documentation */ @Override public CompletableFuture stopStreamEncryption( StopStreamEncryptionRequest stopStreamEncryptionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(stopStreamEncryptionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, stopStreamEncryptionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "StopStreamEncryption"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, StopStreamEncryptionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("StopStreamEncryption").withProtocolMetadata(protocolMetadata) .withMarshaller(new StopStreamEncryptionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(stopStreamEncryptionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* This operation establishes an HTTP/2 connection between the consumer you specify in the ConsumerARN * parameter and the shard you specify in the ShardId parameter. After the connection is successfully * established, Kinesis Data Streams pushes records from the shard to the consumer over this connection. Before you * call this operation, call RegisterStreamConsumer to register the consumer with Kinesis Data Streams. *

*

* When the SubscribeToShard call succeeds, your consumer starts receiving events of type * SubscribeToShardEvent over the HTTP/2 connection for up to 5 minutes, after which time you need to call * SubscribeToShard again to renew the subscription if you want to continue to receive records. *

*

* You can make one call to SubscribeToShard per second per registered consumer per shard. For example, * if you have a 4000 shard stream and two registered stream consumers, you can make one * SubscribeToShard request per second for each combination of shard and registered consumer, allowing * you to subscribe both consumers to all 4000 shards in one second. *

*

* If you call SubscribeToShard again with the same ConsumerARN and ShardId * within 5 seconds of a successful call, you'll get a ResourceInUseException. If you call * SubscribeToShard 5 seconds or more after a successful call, the second call takes over the * subscription and the previous connection expires or fails with a ResourceInUseException. *

*

* For an example of how to use this operation, see Enhanced Fan-Out Using * the Kinesis Data Streams API. *

* * @param subscribeToShardRequest * @return A Java Future containing the result of the SubscribeToShard operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.SubscribeToShard * @see AWS API * Documentation */ @Override public CompletableFuture subscribeToShard(SubscribeToShardRequest subscribeToShardRequest, SubscribeToShardResponseHandler asyncResponseHandler) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(subscribeToShardRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, subscribeToShardRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "SubscribeToShard"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = new AttachHttpMetadataResponseHandler( jsonProtocolFactory.createResponseHandler(operationMetadata, SubscribeToShardResponse::builder)); HttpResponseHandler voidResponseHandler = jsonProtocolFactory.createResponseHandler( JsonOperationMetadata.builder().isPayloadJson(false).hasStreamingSuccessResponse(true).build(), VoidSdkResponse::builder); HttpResponseHandler eventResponseHandler = jsonProtocolFactory .createResponseHandler( JsonOperationMetadata.builder().isPayloadJson(true).hasStreamingSuccessResponse(false).build(), EventStreamTaggedUnionPojoSupplier .builder() .putSdkPojoSupplier("SubscribeToShardEvent", SubscribeToShardEventStream::subscribeToShardEventBuilder) .defaultSdkPojoSupplier(() -> new SdkPojoBuilder(SubscribeToShardEventStream.UNKNOWN)) .build()); Function> eventstreamExceptionMetadataMapper = errorCode -> { switch (errorCode) { case "ResourceNotFoundException": return Optional.of(ExceptionMetadata.builder().errorCode("ResourceNotFoundException").httpStatusCode(400) .exceptionBuilderSupplier(ResourceNotFoundException::builder).build()); case "ResourceInUseException": return Optional.of(ExceptionMetadata.builder().errorCode("ResourceInUseException").httpStatusCode(400) .exceptionBuilderSupplier(ResourceInUseException::builder).build()); case "KMSDisabledException": return Optional.of(ExceptionMetadata.builder().errorCode("KMSDisabledException").httpStatusCode(400) .exceptionBuilderSupplier(KmsDisabledException::builder).build()); case "KMSInvalidStateException": return Optional.of(ExceptionMetadata.builder().errorCode("KMSInvalidStateException").httpStatusCode(400) .exceptionBuilderSupplier(KmsInvalidStateException::builder).build()); case "KMSAccessDeniedException": return Optional.of(ExceptionMetadata.builder().errorCode("KMSAccessDeniedException").httpStatusCode(400) .exceptionBuilderSupplier(KmsAccessDeniedException::builder).build()); case "KMSNotFoundException": return Optional.of(ExceptionMetadata.builder().errorCode("KMSNotFoundException").httpStatusCode(400) .exceptionBuilderSupplier(KmsNotFoundException::builder).build()); case "KMSOptInRequired": return Optional.of(ExceptionMetadata.builder().errorCode("KMSOptInRequired").httpStatusCode(400) .exceptionBuilderSupplier(KmsOptInRequiredException::builder).build()); case "KMSThrottlingException": return Optional.of(ExceptionMetadata.builder().errorCode("KMSThrottlingException").httpStatusCode(400) .exceptionBuilderSupplier(KmsThrottlingException::builder).build()); case "InternalFailureException": return Optional.of(ExceptionMetadata.builder().errorCode("InternalFailureException").httpStatusCode(500) .exceptionBuilderSupplier(InternalFailureException::builder).build()); default: return Optional.empty(); } }; HttpResponseHandler errorEventResponseHandler = createErrorResponseHandler(jsonProtocolFactory, operationMetadata, eventstreamExceptionMetadataMapper); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(jsonProtocolFactory, operationMetadata); CompletableFuture future = new CompletableFuture<>(); EventStreamAsyncResponseTransformer asyncResponseTransformer = EventStreamAsyncResponseTransformer . builder() .eventStreamResponseHandler(asyncResponseHandler).eventResponseHandler(eventResponseHandler) .initialResponseHandler(responseHandler).exceptionResponseHandler(errorEventResponseHandler).future(future) .executor(executor).serviceName(serviceName()).build(); CompletableFuture executeFuture = clientHandler.execute( new ClientExecutionParams().withOperationName("SubscribeToShard") .withProtocolMetadata(protocolMetadata) .withMarshaller(new SubscribeToShardRequestMarshaller(jsonProtocolFactory)) .withResponseHandler(voidResponseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(subscribeToShardRequest), asyncResponseTransformer); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { if (e != null) { try { asyncResponseHandler.exceptionOccurred(e); } finally { future.completeExceptionally(e); } } metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return CompletableFutureUtils.forwardExceptionTo(future, executeFuture); } catch (Throwable t) { runAndLogError(log, "Exception thrown in exceptionOccurred callback, ignoring", () -> asyncResponseHandler.exceptionOccurred(t)); metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates the shard count of the specified stream to the specified number of shards. This API is only supported for * the data streams with the provisioned capacity mode. *

* *

* When invoking this API, you must use either the StreamARN or the StreamName parameter, * or both. It is recommended that you use the StreamARN input parameter when you invoke this API. *

*
*

* Updating the shard count is an asynchronous operation. Upon receiving the request, Kinesis Data Streams returns * immediately and sets the status of the stream to UPDATING. After the update is complete, Kinesis * Data Streams sets the status of the stream back to ACTIVE. Depending on the size of the stream, the * scaling action could take a few minutes to complete. You can continue to read and write data to your stream while * its status is UPDATING. *

*

* To update the shard count, Kinesis Data Streams performs splits or merges on individual shards. This can cause * short-lived shards to be created, in addition to the final shards. These short-lived shards count towards your * total shard limit for your account in the Region. *

*

* When using this operation, we recommend that you specify a target shard count that is a multiple of 25% (25%, * 50%, 75%, 100%). You can specify any target value within your shard limit. However, if you specify a target that * isn't a multiple of 25%, the scaling action might take longer to complete. *

*

* This operation has the following default limits. By default, you cannot do the following: *

*
    *
  • *

    * Scale more than ten times per rolling 24-hour period per stream *

    *
  • *
  • *

    * Scale up to more than double your current shard count for a stream *

    *
  • *
  • *

    * Scale down below half your current shard count for a stream *

    *
  • *
  • *

    * Scale up to more than 10000 shards in a stream *

    *
  • *
  • *

    * Scale a stream with more than 10000 shards down unless the result is less than 10000 shards *

    *
  • *
  • *

    * Scale up to more than the shard limit for your account *

    *
  • *
  • *

    * Make over 10 TPS. TPS over 10 will trigger the LimitExceededException *

    *
  • *
*

* For the default limits for an Amazon Web Services account, see Streams Limits in the * Amazon Kinesis Data Streams Developer Guide. To request an increase in the call rate limit, the shard * limit for this API, or your overall shard limit, use the limits form. *

* * @param updateShardCountRequest * @return A Java Future containing the result of the UpdateShardCount operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • ValidationException Specifies that you tried to invoke this API for a data stream with the on-demand * capacity mode. This API is only supported for data streams with the provisioned capacity mode.
  • *
  • AccessDeniedException Specifies that you do not have the permissions required to perform this * operation.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.UpdateShardCount * @see AWS API * Documentation */ @Override public CompletableFuture updateShardCount(UpdateShardCountRequest updateShardCountRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateShardCountRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateShardCountRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateShardCount"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateShardCountResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateShardCount").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateShardCountRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateShardCountRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates the capacity mode of the data stream. Currently, in Kinesis Data Streams, you can choose between an * on-demand capacity mode and a provisioned capacity mode for your data stream. *

* * @param updateStreamModeRequest * @return A Java Future containing the result of the UpdateStreamMode operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • InvalidArgumentException A specified parameter exceeds its restrictions, is not supported, or can't * be used. For more information, see the returned message.
  • *
  • LimitExceededException The requested resource exceeds the maximum number allowed, or the number of * concurrent stream requests exceeds the maximum number allowed.
  • *
  • ResourceInUseException The resource is not available for this operation. For successful operation, * the resource must be in the ACTIVE state.
  • *
  • ResourceNotFoundException The requested resource could not be found. The stream might not be * specified correctly.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • KinesisException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample KinesisAsyncClient.UpdateStreamMode * @see AWS API * Documentation */ @Override public CompletableFuture updateStreamMode(UpdateStreamModeRequest updateStreamModeRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateStreamModeRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateStreamModeRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Kinesis"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateStreamMode"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateStreamModeResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateStreamMode").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateStreamModeRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateStreamModeRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } @Override public KinesisAsyncWaiter waiter() { return KinesisAsyncWaiter.builder().client(this).scheduledExecutorService(executorService).build(); } @Override public final KinesisServiceClientConfiguration serviceClientConfiguration() { return new KinesisServiceClientConfigurationBuilder(this.clientConfiguration.toBuilder()).build(); } @Override public final String serviceName() { return SERVICE_NAME; } private > T init(T builder) { return builder .clientConfiguration(clientConfiguration) .defaultServiceExceptionSupplier(KinesisException::builder) .protocol(AwsJsonProtocol.AWS_JSON) .protocolVersion("1.1") .registerModeledException( ExceptionMetadata.builder().errorCode("KMSThrottlingException") .exceptionBuilderSupplier(KmsThrottlingException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("InternalFailureException") .exceptionBuilderSupplier(InternalFailureException::builder).httpStatusCode(500).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ResourceInUseException") .exceptionBuilderSupplier(ResourceInUseException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("KMSInvalidStateException") .exceptionBuilderSupplier(KmsInvalidStateException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("KMSNotFoundException") .exceptionBuilderSupplier(KmsNotFoundException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ExpiredIteratorException") .exceptionBuilderSupplier(ExpiredIteratorException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("KMSOptInRequired") .exceptionBuilderSupplier(KmsOptInRequiredException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ExpiredNextTokenException") .exceptionBuilderSupplier(ExpiredNextTokenException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("LimitExceededException") .exceptionBuilderSupplier(LimitExceededException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("AccessDeniedException") .exceptionBuilderSupplier(AccessDeniedException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("InvalidArgumentException") .exceptionBuilderSupplier(InvalidArgumentException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ResourceNotFoundException") .exceptionBuilderSupplier(ResourceNotFoundException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ValidationException") .exceptionBuilderSupplier(ValidationException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("KMSAccessDeniedException") .exceptionBuilderSupplier(KmsAccessDeniedException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("KMSDisabledException") .exceptionBuilderSupplier(KmsDisabledException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ProvisionedThroughputExceededException") .exceptionBuilderSupplier(ProvisionedThroughputExceededException::builder).httpStatusCode(400) .build()); } private static List resolveMetricPublishers(SdkClientConfiguration clientConfiguration, RequestOverrideConfiguration requestOverrideConfiguration) { List publishers = null; if (requestOverrideConfiguration != null) { publishers = requestOverrideConfiguration.metricPublishers(); } if (publishers == null || publishers.isEmpty()) { publishers = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHERS); } if (publishers == null) { publishers = Collections.emptyList(); } return publishers; } private void updateRetryStrategyClientConfiguration(SdkClientConfiguration.Builder configuration) { ClientOverrideConfiguration.Builder builder = configuration.asOverrideConfigurationBuilder(); RetryMode retryMode = builder.retryMode(); if (retryMode != null) { configuration.option(SdkClientOption.RETRY_STRATEGY, AwsRetryStrategy.forRetryMode(retryMode)); } else { Consumer> configurator = builder.retryStrategyConfigurator(); if (configurator != null) { RetryStrategy.Builder defaultBuilder = AwsRetryStrategy.defaultRetryStrategy().toBuilder(); configurator.accept(defaultBuilder); configuration.option(SdkClientOption.RETRY_STRATEGY, defaultBuilder.build()); } else { RetryStrategy retryStrategy = builder.retryStrategy(); if (retryStrategy != null) { configuration.option(SdkClientOption.RETRY_STRATEGY, retryStrategy); } } } configuration.option(SdkClientOption.CONFIGURED_RETRY_MODE, null); configuration.option(SdkClientOption.CONFIGURED_RETRY_STRATEGY, null); configuration.option(SdkClientOption.CONFIGURED_RETRY_CONFIGURATOR, null); } private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) { List plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList()); SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder(); if (plugins.isEmpty()) { return configuration.build(); } KinesisServiceClientConfigurationBuilder serviceConfigBuilder = new KinesisServiceClientConfigurationBuilder( configuration); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } updateRetryStrategyClientConfiguration(configuration); return configuration.build(); } private HttpResponseHandler createErrorResponseHandler(BaseAwsJsonProtocolFactory protocolFactory, JsonOperationMetadata operationMetadata) { return protocolFactory.createErrorResponseHandler(operationMetadata); } private HttpResponseHandler createErrorResponseHandler(BaseAwsJsonProtocolFactory protocolFactory, JsonOperationMetadata operationMetadata, Function> exceptionMetadataMapper) { return protocolFactory.createErrorResponseHandler(operationMetadata, exceptionMetadataMapper); } @Override public void close() { clientHandler.close(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy