software.amazon.awssdk.services.s3.DefaultS3AsyncClient Maven / Gradle / Ivy
Show all versions of s3 Show documentation
/*
* 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.s3;
import static software.amazon.awssdk.utils.FunctionalUtils.runAndLogError;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.function.Consumer;
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.eventstream.RestEventStreamAsyncResponseTransformer;
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.Response;
import software.amazon.awssdk.core.SdkPlugin;
import software.amazon.awssdk.core.SdkPojoBuilder;
import software.amazon.awssdk.core.SdkRequest;
import software.amazon.awssdk.core.async.AsyncRequestBody;
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
import software.amazon.awssdk.core.async.AsyncResponseTransformerUtils;
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.ClientExecutionParams;
import software.amazon.awssdk.core.http.HttpResponseHandler;
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
import software.amazon.awssdk.core.interceptor.trait.HttpChecksum;
import software.amazon.awssdk.core.metrics.CoreMetric;
import software.amazon.awssdk.core.retry.RetryMode;
import software.amazon.awssdk.core.runtime.transform.AsyncStreamingRequestMarshaller;
import software.amazon.awssdk.metrics.MetricCollector;
import software.amazon.awssdk.metrics.MetricPublisher;
import software.amazon.awssdk.metrics.NoOpMetricCollector;
import software.amazon.awssdk.protocols.core.ExceptionMetadata;
import software.amazon.awssdk.protocols.xml.AwsS3ProtocolFactory;
import software.amazon.awssdk.protocols.xml.XmlOperationMetadata;
import software.amazon.awssdk.retries.api.RetryStrategy;
import software.amazon.awssdk.services.s3.internal.CustomRequestTransformerUtils;
import software.amazon.awssdk.services.s3.internal.S3ServiceClientConfigurationBuilder;
import software.amazon.awssdk.services.s3.model.AbortMultipartUploadRequest;
import software.amazon.awssdk.services.s3.model.AbortMultipartUploadResponse;
import software.amazon.awssdk.services.s3.model.BucketAlreadyExistsException;
import software.amazon.awssdk.services.s3.model.BucketAlreadyOwnedByYouException;
import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest;
import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadResponse;
import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
import software.amazon.awssdk.services.s3.model.CopyObjectResponse;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.CreateBucketResponse;
import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
import software.amazon.awssdk.services.s3.model.CreateSessionRequest;
import software.amazon.awssdk.services.s3.model.CreateSessionResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketAnalyticsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketAnalyticsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketCorsRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketCorsResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketEncryptionRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketEncryptionResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketIntelligentTieringConfigurationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketIntelligentTieringConfigurationResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketInventoryConfigurationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketInventoryConfigurationResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketLifecycleRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketLifecycleResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketMetricsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketMetricsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketOwnershipControlsRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketOwnershipControlsResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketPolicyRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketPolicyResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketReplicationResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketTaggingRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketTaggingResponse;
import software.amazon.awssdk.services.s3.model.DeleteBucketWebsiteRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketWebsiteResponse;
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
import software.amazon.awssdk.services.s3.model.DeleteObjectResponse;
import software.amazon.awssdk.services.s3.model.DeleteObjectTaggingRequest;
import software.amazon.awssdk.services.s3.model.DeleteObjectTaggingResponse;
import software.amazon.awssdk.services.s3.model.DeleteObjectsRequest;
import software.amazon.awssdk.services.s3.model.DeleteObjectsResponse;
import software.amazon.awssdk.services.s3.model.DeletePublicAccessBlockRequest;
import software.amazon.awssdk.services.s3.model.DeletePublicAccessBlockResponse;
import software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketAclRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAclResponse;
import software.amazon.awssdk.services.s3.model.GetBucketAnalyticsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAnalyticsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketCorsRequest;
import software.amazon.awssdk.services.s3.model.GetBucketCorsResponse;
import software.amazon.awssdk.services.s3.model.GetBucketEncryptionRequest;
import software.amazon.awssdk.services.s3.model.GetBucketEncryptionResponse;
import software.amazon.awssdk.services.s3.model.GetBucketIntelligentTieringConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketIntelligentTieringConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketInventoryConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketInventoryConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketLifecycleConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketLocationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketLocationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketLoggingRequest;
import software.amazon.awssdk.services.s3.model.GetBucketLoggingResponse;
import software.amazon.awssdk.services.s3.model.GetBucketMetricsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketMetricsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketNotificationConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketNotificationConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketOwnershipControlsRequest;
import software.amazon.awssdk.services.s3.model.GetBucketOwnershipControlsResponse;
import software.amazon.awssdk.services.s3.model.GetBucketPolicyRequest;
import software.amazon.awssdk.services.s3.model.GetBucketPolicyResponse;
import software.amazon.awssdk.services.s3.model.GetBucketPolicyStatusRequest;
import software.amazon.awssdk.services.s3.model.GetBucketPolicyStatusResponse;
import software.amazon.awssdk.services.s3.model.GetBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.GetBucketReplicationResponse;
import software.amazon.awssdk.services.s3.model.GetBucketRequestPaymentRequest;
import software.amazon.awssdk.services.s3.model.GetBucketRequestPaymentResponse;
import software.amazon.awssdk.services.s3.model.GetBucketTaggingRequest;
import software.amazon.awssdk.services.s3.model.GetBucketTaggingResponse;
import software.amazon.awssdk.services.s3.model.GetBucketVersioningRequest;
import software.amazon.awssdk.services.s3.model.GetBucketVersioningResponse;
import software.amazon.awssdk.services.s3.model.GetBucketWebsiteRequest;
import software.amazon.awssdk.services.s3.model.GetBucketWebsiteResponse;
import software.amazon.awssdk.services.s3.model.GetObjectAclRequest;
import software.amazon.awssdk.services.s3.model.GetObjectAclResponse;
import software.amazon.awssdk.services.s3.model.GetObjectAttributesRequest;
import software.amazon.awssdk.services.s3.model.GetObjectAttributesResponse;
import software.amazon.awssdk.services.s3.model.GetObjectLegalHoldRequest;
import software.amazon.awssdk.services.s3.model.GetObjectLegalHoldResponse;
import software.amazon.awssdk.services.s3.model.GetObjectLockConfigurationRequest;
import software.amazon.awssdk.services.s3.model.GetObjectLockConfigurationResponse;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
import software.amazon.awssdk.services.s3.model.GetObjectRetentionRequest;
import software.amazon.awssdk.services.s3.model.GetObjectRetentionResponse;
import software.amazon.awssdk.services.s3.model.GetObjectTaggingRequest;
import software.amazon.awssdk.services.s3.model.GetObjectTaggingResponse;
import software.amazon.awssdk.services.s3.model.GetObjectTorrentRequest;
import software.amazon.awssdk.services.s3.model.GetObjectTorrentResponse;
import software.amazon.awssdk.services.s3.model.GetPublicAccessBlockRequest;
import software.amazon.awssdk.services.s3.model.GetPublicAccessBlockResponse;
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
import software.amazon.awssdk.services.s3.model.InvalidObjectStateException;
import software.amazon.awssdk.services.s3.model.ListBucketAnalyticsConfigurationsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketAnalyticsConfigurationsResponse;
import software.amazon.awssdk.services.s3.model.ListBucketIntelligentTieringConfigurationsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketIntelligentTieringConfigurationsResponse;
import software.amazon.awssdk.services.s3.model.ListBucketInventoryConfigurationsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketInventoryConfigurationsResponse;
import software.amazon.awssdk.services.s3.model.ListBucketMetricsConfigurationsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketMetricsConfigurationsResponse;
import software.amazon.awssdk.services.s3.model.ListBucketsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsRequest;
import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsResponse;
import software.amazon.awssdk.services.s3.model.ListMultipartUploadsRequest;
import software.amazon.awssdk.services.s3.model.ListMultipartUploadsResponse;
import software.amazon.awssdk.services.s3.model.ListObjectVersionsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectVersionsResponse;
import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
import software.amazon.awssdk.services.s3.model.ListPartsRequest;
import software.amazon.awssdk.services.s3.model.ListPartsResponse;
import software.amazon.awssdk.services.s3.model.NoSuchBucketException;
import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
import software.amazon.awssdk.services.s3.model.NoSuchUploadException;
import software.amazon.awssdk.services.s3.model.ObjectAlreadyInActiveTierErrorException;
import software.amazon.awssdk.services.s3.model.ObjectNotInActiveTierErrorException;
import software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketAclRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAclResponse;
import software.amazon.awssdk.services.s3.model.PutBucketAnalyticsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAnalyticsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketCorsRequest;
import software.amazon.awssdk.services.s3.model.PutBucketCorsResponse;
import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest;
import software.amazon.awssdk.services.s3.model.PutBucketEncryptionResponse;
import software.amazon.awssdk.services.s3.model.PutBucketIntelligentTieringConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketIntelligentTieringConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketInventoryConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketInventoryConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketLifecycleConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketLoggingRequest;
import software.amazon.awssdk.services.s3.model.PutBucketLoggingResponse;
import software.amazon.awssdk.services.s3.model.PutBucketMetricsConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketMetricsConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketNotificationConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketNotificationConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketOwnershipControlsRequest;
import software.amazon.awssdk.services.s3.model.PutBucketOwnershipControlsResponse;
import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
import software.amazon.awssdk.services.s3.model.PutBucketPolicyResponse;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationResponse;
import software.amazon.awssdk.services.s3.model.PutBucketRequestPaymentRequest;
import software.amazon.awssdk.services.s3.model.PutBucketRequestPaymentResponse;
import software.amazon.awssdk.services.s3.model.PutBucketTaggingRequest;
import software.amazon.awssdk.services.s3.model.PutBucketTaggingResponse;
import software.amazon.awssdk.services.s3.model.PutBucketVersioningRequest;
import software.amazon.awssdk.services.s3.model.PutBucketVersioningResponse;
import software.amazon.awssdk.services.s3.model.PutBucketWebsiteRequest;
import software.amazon.awssdk.services.s3.model.PutBucketWebsiteResponse;
import software.amazon.awssdk.services.s3.model.PutObjectAclRequest;
import software.amazon.awssdk.services.s3.model.PutObjectAclResponse;
import software.amazon.awssdk.services.s3.model.PutObjectLegalHoldRequest;
import software.amazon.awssdk.services.s3.model.PutObjectLegalHoldResponse;
import software.amazon.awssdk.services.s3.model.PutObjectLockConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutObjectLockConfigurationResponse;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
import software.amazon.awssdk.services.s3.model.PutObjectRetentionRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRetentionResponse;
import software.amazon.awssdk.services.s3.model.PutObjectTaggingRequest;
import software.amazon.awssdk.services.s3.model.PutObjectTaggingResponse;
import software.amazon.awssdk.services.s3.model.PutPublicAccessBlockRequest;
import software.amazon.awssdk.services.s3.model.PutPublicAccessBlockResponse;
import software.amazon.awssdk.services.s3.model.RestoreObjectRequest;
import software.amazon.awssdk.services.s3.model.RestoreObjectResponse;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.model.SelectObjectContentEventStream;
import software.amazon.awssdk.services.s3.model.SelectObjectContentRequest;
import software.amazon.awssdk.services.s3.model.SelectObjectContentResponse;
import software.amazon.awssdk.services.s3.model.SelectObjectContentResponseHandler;
import software.amazon.awssdk.services.s3.model.UploadPartCopyRequest;
import software.amazon.awssdk.services.s3.model.UploadPartCopyResponse;
import software.amazon.awssdk.services.s3.model.UploadPartRequest;
import software.amazon.awssdk.services.s3.model.UploadPartResponse;
import software.amazon.awssdk.services.s3.model.WriteGetObjectResponseRequest;
import software.amazon.awssdk.services.s3.model.WriteGetObjectResponseResponse;
import software.amazon.awssdk.services.s3.transform.AbortMultipartUploadRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.CompleteMultipartUploadRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.CopyObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.CreateBucketRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.CreateMultipartUploadRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.CreateSessionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketAnalyticsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketCorsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketEncryptionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketIntelligentTieringConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketInventoryConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketLifecycleRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketMetricsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketOwnershipControlsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketPolicyRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketReplicationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteBucketWebsiteRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteObjectTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeleteObjectsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.DeletePublicAccessBlockRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketAccelerateConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketAclRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketAnalyticsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketCorsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketEncryptionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketIntelligentTieringConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketInventoryConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketLifecycleConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketLocationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketLoggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketMetricsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketNotificationConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketOwnershipControlsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketPolicyRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketPolicyStatusRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketReplicationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketRequestPaymentRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketVersioningRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetBucketWebsiteRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectAclRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectAttributesRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectLegalHoldRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectLockConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectRetentionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetObjectTorrentRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.GetPublicAccessBlockRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.HeadBucketRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.HeadObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListBucketAnalyticsConfigurationsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListBucketIntelligentTieringConfigurationsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListBucketInventoryConfigurationsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListBucketMetricsConfigurationsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListBucketsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListDirectoryBucketsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListMultipartUploadsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListObjectVersionsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListObjectsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListObjectsV2RequestMarshaller;
import software.amazon.awssdk.services.s3.transform.ListPartsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketAccelerateConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketAclRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketAnalyticsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketCorsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketEncryptionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketIntelligentTieringConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketInventoryConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketLifecycleConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketLoggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketMetricsConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketNotificationConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketOwnershipControlsRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketPolicyRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketReplicationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketRequestPaymentRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketVersioningRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutBucketWebsiteRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectAclRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectLegalHoldRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectLockConfigurationRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectRetentionRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutObjectTaggingRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.PutPublicAccessBlockRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.RestoreObjectRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.SelectObjectContentRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.UploadPartCopyRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.UploadPartRequestMarshaller;
import software.amazon.awssdk.services.s3.transform.WriteGetObjectResponseRequestMarshaller;
import software.amazon.awssdk.services.s3.waiters.S3AsyncWaiter;
import software.amazon.awssdk.utils.CompletableFutureUtils;
import software.amazon.awssdk.utils.HostnameValidator;
import software.amazon.awssdk.utils.Pair;
/**
* Internal implementation of {@link S3AsyncClient}.
*
* @see S3AsyncClient#builder()
*/
@Generated("software.amazon.awssdk:codegen")
@SdkInternalApi
final class DefaultS3AsyncClient implements S3AsyncClient {
private static final Logger log = LoggerFactory.getLogger(DefaultS3AsyncClient.class);
private static final AwsProtocolMetadata protocolMetadata = AwsProtocolMetadata.builder()
.serviceProtocol(AwsServiceProtocol.REST_XML).build();
private final AsyncClientHandler clientHandler;
private final AwsS3ProtocolFactory protocolFactory;
private final SdkClientConfiguration clientConfiguration;
private final ScheduledExecutorService executorService;
private final Executor executor;
protected DefaultS3AsyncClient(SdkClientConfiguration clientConfiguration) {
this.clientHandler = new AwsAsyncClientHandler(clientConfiguration);
this.clientConfiguration = clientConfiguration.toBuilder().option(SdkClientOption.SDK_CLIENT, this).build();
this.protocolFactory = init();
this.executor = clientConfiguration.option(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR);
this.executorService = clientConfiguration.option(SdkClientOption.SCHEDULED_EXECUTOR_SERVICE);
}
@Override
public S3Utilities utilities() {
return S3Utilities.create(clientConfiguration);
}
/**
*
* This operation aborts a multipart upload. After a multipart upload is aborted, no additional parts can be
* uploaded using that upload ID. The storage consumed by any previously uploaded parts will be freed. However, if
* any part uploads are currently in progress, those part uploads might or might not succeed. As a result, it might
* be necessary to abort a given multipart upload multiple times in order to completely free all storage consumed by
* all parts.
*
*
* To verify that all parts have been removed and prevent getting charged for the part storage, you should call the
* ListParts API operation and
* ensure that the parts list is empty.
*
*
*
* -
*
* Directory buckets - If multipart uploads in a directory bucket are in progress, you can't delete the
* bucket until all the in-progress multipart uploads are aborted or completed. To delete these in-progress
* multipart uploads, use the ListMultipartUploads
operation to list the in-progress multipart uploads
* in the bucket and use the AbortMultupartUpload
operation to abort all the in-progress multipart
* uploads.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - For information about permissions required to use the multipart
* upload, see Multipart Upload and
* Permissions in the Amazon S3 User Guide.
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend
* that you use the
* CreateSession
API operation for session-based authorization. Specifically, you grant the
* s3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM
* identity-based policy. Then, you make the CreateSession
API call on the bucket to obtain a session
* token. With the session token in your request header, you can make API requests to this operation. After the
* session token expires, you make another CreateSession
API call to generate a new session token for
* use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service
* interruptions when a session expires. For more information about authorization, see CreateSession
.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following operations are related to AbortMultipartUpload
:
*
*
* -
*
*
* -
*
* UploadPart
*
*
* -
*
*
* -
*
* ListParts
*
*
* -
*
*
*
*
* @param abortMultipartUploadRequest
* @return A Java Future containing the result of the AbortMultipartUpload 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.
*
* - NoSuchUploadException The specified multipart upload does not exist.
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.AbortMultipartUpload
*/
@Override
public CompletableFuture abortMultipartUpload(
AbortMultipartUploadRequest abortMultipartUploadRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(abortMultipartUploadRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, abortMultipartUploadRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "AbortMultipartUpload");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(AbortMultipartUploadResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("AbortMultipartUpload").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new AbortMultipartUploadRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(abortMultipartUploadRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Completes a multipart upload by assembling previously uploaded parts.
*
*
* You first initiate the multipart upload and then upload all parts using the UploadPart operation or the UploadPartCopy operation.
* After successfully uploading all relevant parts of an upload, you call this CompleteMultipartUpload
* operation to complete the upload. Upon receiving this request, Amazon S3 concatenates all the parts in ascending
* order by part number to create a new object. In the CompleteMultipartUpload request, you must provide the parts
* list and ensure that the parts list is complete. The CompleteMultipartUpload API operation concatenates the parts
* that you provide in the list. For each part in the list, you must provide the PartNumber
value and
* the ETag
value that are returned after that part was uploaded.
*
*
* The processing of a CompleteMultipartUpload request could take several minutes to finalize. After Amazon S3
* begins processing the request, it sends an HTTP response header that specifies a 200 OK
response.
* While processing is in progress, Amazon S3 periodically sends white space characters to keep the connection from
* timing out. A request could fail after the initial 200 OK
response has been sent. This means that a
* 200 OK
response can contain either a success or an error. The error response might be embedded in
* the 200 OK
response. If you call this API operation directly, make sure to design your application
* to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs
* handle this condition. The SDKs detect the embedded error and apply error handling per your configuration
* settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw
* an exception (or, for the SDKs that don't use exceptions, they return an error).
*
*
* Note that if CompleteMultipartUpload
fails, applications should be prepared to retry any failed
* requests (including 500 error responses). For more information, see Amazon S3 Error Best
* Practices.
*
*
*
* You can't use Content-Type: application/x-www-form-urlencoded
for the CompleteMultipartUpload
* requests. Also, if you don't provide a Content-Type
header, CompleteMultipartUpload
can
* still return a 200 OK
response.
*
*
*
* For more information about multipart uploads, see Uploading Objects Using Multipart
* Upload in the Amazon S3 User Guide.
*
*
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - For information about permissions required to use the multipart
* upload API, see Multipart Upload
* and Permissions in the Amazon S3 User Guide.
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend
* that you use the
* CreateSession
API operation for session-based authorization. Specifically, you grant the
* s3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM
* identity-based policy. Then, you make the CreateSession
API call on the bucket to obtain a session
* token. With the session token in your request header, you can make API requests to this operation. After the
* session token expires, you make another CreateSession
API call to generate a new session token for
* use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service
* interruptions when a session expires. For more information about authorization, see CreateSession
.
*
*
* -
*
* If you provide an additional checksum
* value in your MultipartUpload
requests and the object is encrypted with Key Management Service,
* you must have permission to use the kms:Decrypt
action for the CompleteMultipartUpload
* request to succeed.
*
*
*
*
* - Special errors
* -
*
* -
*
* Error Code: EntityTooSmall
*
*
* -
*
* Description: Your proposed upload is smaller than the minimum allowed object size. Each part must be at least 5
* MB in size, except the last part.
*
*
* -
*
* HTTP Status Code: 400 Bad Request
*
*
*
*
* -
*
* Error Code: InvalidPart
*
*
* -
*
* Description: One or more of the specified parts could not be found. The part might not have been uploaded, or the
* specified ETag might not have matched the uploaded part's ETag.
*
*
* -
*
* HTTP Status Code: 400 Bad Request
*
*
*
*
* -
*
* Error Code: InvalidPartOrder
*
*
* -
*
* Description: The list of parts was not in ascending order. The parts list must be specified in order by part
* number.
*
*
* -
*
* HTTP Status Code: 400 Bad Request
*
*
*
*
* -
*
* Error Code: NoSuchUpload
*
*
* -
*
* Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart
* upload might have been aborted or completed.
*
*
* -
*
* HTTP Status Code: 404 Not Found
*
*
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following operations are related to CompleteMultipartUpload
:
*
*
* -
*
*
* -
*
* UploadPart
*
*
* -
*
*
* -
*
* ListParts
*
*
* -
*
*
*
*
* @param completeMultipartUploadRequest
* @return A Java Future containing the result of the CompleteMultipartUpload 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.CompleteMultipartUpload
*/
@Override
public CompletableFuture completeMultipartUpload(
CompleteMultipartUploadRequest completeMultipartUploadRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(completeMultipartUploadRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, completeMultipartUploadRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CompleteMultipartUpload");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(CompleteMultipartUploadResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("CompleteMultipartUpload").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new CompleteMultipartUploadRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(completeMultipartUploadRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Creates a copy of an object that is already stored in Amazon S3.
*
*
*
* You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size
* in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the
* multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see Copy Object Using the
* REST Multipart Upload API.
*
*
*
* You can copy individual objects between general purpose buckets, between directory buckets, and between general
* purpose buckets and directory buckets.
*
*
*
* -
*
* Amazon S3 supports copy operations using Multi-Region Access Points only as a destination when using the
* Multi-Region Access Point ARN.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
* -
*
* VPC endpoints don't support cross-Region requests (including copies). If you're using VPC endpoints, your source
* and destination buckets should be in the same Amazon Web Services Region as your VPC endpoint.
*
*
*
*
*
* Both the Region that you want to copy the object from and the Region that you want to copy the object to must be
* enabled for your account. For more information about how to enable a Region for your account, see Enable or disable a Region for standalone accounts in the Amazon Web Services Account Management
* Guide.
*
*
*
* Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a
* transfer acceleration endpoint, you get a 400 Bad Request
error. For more information, see Transfer Acceleration.
*
*
*
* - Authentication and authorization
* -
*
* All CopyObject
requests must be authenticated and signed by using IAM credentials (access key ID and
* secret access key for the IAM identities). All headers with the x-amz-
prefix, including
* x-amz-copy-source
, must be signed. For more information, see REST Authentication.
*
*
* Directory buckets - You must use the IAM credentials to authenticate and authorize your access to the
* CopyObject
API operation, instead of using the temporary security credentials through the
* CreateSession
API operation.
*
*
* Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.
*
*
* - Permissions
* -
*
* You must have read access to the source object and write access to the destination bucket.
*
*
* -
*
* General purpose bucket permissions - You must have permissions in an IAM policy based on the source and
* destination bucket types in a CopyObject
operation.
*
*
* -
*
* If the source object is in a general purpose bucket, you must have s3:GetObject
permission
* to read the source object that is being copied.
*
*
* -
*
* If the destination bucket is a general purpose bucket, you must have s3:PutObject
* permission to write the object copy to the destination bucket.
*
*
*
*
* -
*
* Directory bucket permissions - You must have permissions in a bucket policy or an IAM identity-based
* policy based on the source and destination bucket types in a CopyObject
operation.
*
*
* -
*
* If the source object that you want to copy is in a directory bucket, you must have the
* s3express:CreateSession
permission in the Action
element of a policy to read the
* object. By default, the session is in the ReadWrite
mode. If you want to restrict the access, you
* can explicitly set the s3express:SessionMode
condition key to ReadOnly
on the copy
* source bucket.
*
*
* -
*
* If the copy destination is a directory bucket, you must have the s3express:CreateSession
* permission in the Action
element of a policy to write the object to the destination. The
* s3express:SessionMode
condition key can't be set to ReadOnly
on the copy destination
* bucket.
*
*
*
*
* For example policies, see Example bucket policies for S3 Express One Zone and Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone in
* the Amazon S3 User Guide.
*
*
*
*
* - Response and special errors
* -
*
* When the request is an HTTP 1.1 request, the response is chunk encoded. When the request is not an HTTP 1.1
* request, the response would not contain the Content-Length
. You always need to read the entire
* response body to check if the copy succeeds.
*
*
* -
*
* If the copy is successful, you receive a response with information about the copied object.
*
*
* -
*
* A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the
* files. A 200 OK
response can contain either a success or an error.
*
*
* -
*
* If the error occurs before the copy action starts, you receive a standard Amazon S3 error.
*
*
* -
*
* If the error occurs during the copy operation, the error response is embedded in the 200 OK
* response. For example, in a cross-region copy, you may encounter throttling and receive a 200 OK
* response. For more information, see Resolve the Error 200 response when
* copying objects to Amazon S3. The 200 OK
status code means the copy was accepted, but it doesn't
* mean the copy is complete. Another example is when you disconnect from Amazon S3 before the copy is complete,
* Amazon S3 might cancel the copy and you may receive a 200 OK
response. You must stay connected to
* Amazon S3 until the entire response is successfully received and processed.
*
*
* If you call this API operation directly, make sure to design your application to parse the content of the
* response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs
* detect the embedded error and apply error handling per your configuration settings (including automatically
* retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs
* that don't use exceptions, they return an error).
*
*
*
*
*
*
* - Charge
* -
*
* The copy request charge is based on the storage class and Region that you specify for the destination object. The
* request can also result in a data retrieval charge for the source if the source storage class bills for data
* retrieval. If the copy source is in a different region, the data transfer is billed to the copy source account.
* For pricing information, see Amazon S3 pricing.
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following operations are related to CopyObject
:
*
*
*
* @param copyObjectRequest
* @return A Java Future containing the result of the CopyObject 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.
*
* - ObjectNotInActiveTierErrorException The source object of the COPY action is not in the active tier
* and is only stored in Amazon S3 Glacier.
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.CopyObject
*/
@Override
public CompletableFuture copyObject(CopyObjectRequest copyObjectRequest) {
copyObjectRequest = CustomRequestTransformerUtils.modifyCopyObjectRequest(copyObjectRequest);
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(copyObjectRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, copyObjectRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CopyObject");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
CopyObjectResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams().withOperationName("CopyObject")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new CopyObjectRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(copyObjectRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This action creates an Amazon S3 bucket. To create an Amazon S3 on Outposts bucket, see CreateBucket
* .
*
*
*
* Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and have a valid Amazon Web Services
* Access Key ID to authenticate requests. Anonymous requests are never allowed to create buckets. By creating the
* bucket, you become the bucket owner.
*
*
* There are two types of buckets: general purpose buckets and directory buckets. For more information about these
* bucket types, see Creating, configuring, and
* working with Amazon S3 buckets in the Amazon S3 User Guide.
*
*
*
* -
*
* General purpose buckets - If you send your CreateBucket
request to the
* s3.amazonaws.com
global endpoint, the request goes to the us-east-1
Region. So the
* signature calculations in Signature Version 4 must use us-east-1
as the Region, even if the location
* constraint in the request specifies another Region where the bucket is to be created. If you create a bucket in a
* Region other than US East (N. Virginia), your application must be able to handle 307 redirect. For more
* information, see Virtual hosting of
* buckets in the Amazon S3 User Guide.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Regional
* endpoint. These endpoints support path-style requests in the format
* https://s3express-control.region_code.amazonaws.com/bucket-name
. Virtual-hosted-style
* requests aren't supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - In addition to the s3:CreateBucket
permission, the
* following permissions are required in a policy when your CreateBucket
request includes specific
* headers:
*
*
* -
*
* Access control lists (ACLs) - In your CreateBucket
request, if you specify an access control
* list (ACL) and set it to public-read
, public-read-write
,
* authenticated-read
, or if you explicitly specify any other custom ACLs, both
* s3:CreateBucket
and s3:PutBucketAcl
permissions are required. In your
* CreateBucket
request, if you set the ACL to private
, or if you don't specify any ACLs,
* only the s3:CreateBucket
permission is required.
*
*
* -
*
* Object Lock - In your CreateBucket
request, if you set
* x-amz-bucket-object-lock-enabled
to true, the s3:PutBucketObjectLockConfiguration
and
* s3:PutBucketVersioning
permissions are required.
*
*
* -
*
* S3 Object Ownership - If your CreateBucket
request includes the
* x-amz-object-ownership
header, then the s3:PutBucketOwnershipControls
permission is
* required.
*
*
*
* To set an ACL on a bucket as part of a CreateBucket
request, you must explicitly set S3 Object
* Ownership for the bucket to a different value than the default, BucketOwnerEnforced
. Additionally,
* if your desired bucket ACL grants public access, you must first create the bucket (without the bucket ACL) and
* then explicitly disable Block Public Access on the bucket before using PutBucketAcl
to set the ACL.
* If you try to create a bucket with a public ACL, the request will fail.
*
*
* For the majority of modern use cases in S3, we recommend that you keep all Block Public Access settings enabled
* and keep ACLs disabled. If you would like to share data with users outside of your account, you can use bucket
* policies as needed. For more information, see Controlling ownership of
* objects and disabling ACLs for your bucket and Blocking
* public access to your Amazon S3 storage in the Amazon S3 User Guide.
*
*
* -
*
* S3 Block Public Access - If your specific use case requires granting public access to your S3 resources,
* you can disable Block Public Access. Specifically, you can create a new bucket with Block Public Access enabled,
* then separately call the
* DeletePublicAccessBlock
API. To use this operation, you must have the
* s3:PutBucketPublicAccessBlock
permission. For more information about S3 Block Public Access, see Blocking
* public access to your Amazon S3 storage in the Amazon S3 User Guide.
*
*
*
*
* -
*
* Directory bucket permissions - You must have the s3express:CreateBucket
permission in an IAM
* identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported.
* This operation can only be performed by the Amazon Web Services account that owns the resource. For more
* information about directory bucket policies and permissions, see Amazon Web Services
* Identity and Access Management (IAM) for S3 Express One Zone in the Amazon S3 User Guide.
*
*
*
* The permissions for ACLs, Object Lock, S3 Object Ownership, and S3 Block Public Access are not supported for
* directory buckets. For directory buckets, all Block Public Access settings are enabled at the bucket level and S3
* Object Ownership is set to Bucket owner enforced (ACLs disabled). These settings can't be modified.
*
*
* For more information about permissions for creating and working with directory buckets, see Directory
* buckets in the Amazon S3 User Guide. For more information about supported S3 features for directory
* buckets, see Features of S3 Express One Zone in the Amazon S3 User Guide.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* s3express-control.region.amazonaws.com
.
*
*
*
*
* The following operations are related to CreateBucket
:
*
*
* -
*
* PutObject
*
*
* -
*
* DeleteBucket
*
*
*
*
* @param createBucketRequest
* @return A Java Future containing the result of the CreateBucket 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.
*
* - BucketAlreadyExistsException The requested bucket name is not available. The bucket namespace is
* shared by all users of the system. Select a different name and try again.
* - BucketAlreadyOwnedByYouException The bucket you tried to create already exists, and you own it.
* Amazon S3 returns this error in all Amazon Web Services Regions except in the North Virginia Region. For
* legacy compatibility, if you re-create an existing bucket that you already own in the North Virginia
* Region, Amazon S3 returns 200 OK and resets the bucket access control lists (ACLs).
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.CreateBucket
*/
@Override
public CompletableFuture createBucket(CreateBucketRequest createBucketRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createBucketRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, createBucketRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateBucket");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
CreateBucketResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("CreateBucket").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new CreateBucketRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(createBucketRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* This action initiates a multipart upload and returns an upload ID. This upload ID is used to associate all of the
* parts in the specific multipart upload. You specify this upload ID in each of your subsequent upload part
* requests (see UploadPart). You
* also include this upload ID in the final request to either complete or abort the multipart upload request. For
* more information about multipart uploads, see Multipart Upload Overview in the
* Amazon S3 User Guide.
*
*
*
* After you initiate a multipart upload and upload one or more parts, to stop being charged for storing the
* uploaded parts, you must either complete or abort the multipart upload. Amazon S3 frees up the space used to
* store the parts and stops charging you for storing them only after you either complete or abort a multipart
* upload.
*
*
*
* If you have configured a lifecycle rule to abort incomplete multipart uploads, the created multipart upload must
* be completed within the number of days specified in the bucket lifecycle configuration. Otherwise, the incomplete
* multipart upload becomes eligible for an abort action and Amazon S3 aborts the multipart upload. For more
* information, see Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration.
*
*
*
* -
*
* Directory buckets - S3 Lifecycle is not supported by directory buckets.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* - Request signing
* -
*
* For request signing, multipart upload is just a series of regular requests. You initiate a multipart upload, send
* one or more requests to upload parts, and then complete the multipart upload process. You sign each request
* individually. There is nothing special about signing multipart upload requests. For more information about
* signing, see Authenticating
* Requests (Amazon Web Services Signature Version 4) in the Amazon S3 User Guide.
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - To perform a multipart upload with encryption using an Key Management
* Service (KMS) KMS key, the requester must have permission to the kms:Decrypt
and
* kms:GenerateDataKey
actions on the key. The requester must also have permissions for the
* kms:GenerateDataKey
action for the CreateMultipartUpload
API. Then, the requester needs
* permissions for the kms:Decrypt
action on the UploadPart
and
* UploadPartCopy
APIs. These permissions are required because Amazon S3 must decrypt and read data
* from the encrypted file parts before it completes the multipart upload. For more information, see Multipart upload
* API and permissions and Protecting data using
* server-side encryption with Amazon Web Services KMS in the Amazon S3 User Guide.
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend
* that you use the
* CreateSession
API operation for session-based authorization. Specifically, you grant the
* s3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM
* identity-based policy. Then, you make the CreateSession
API call on the bucket to obtain a session
* token. With the session token in your request header, you can make API requests to this operation. After the
* session token expires, you make another CreateSession
API call to generate a new session token for
* use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service
* interruptions when a session expires. For more information about authorization, see CreateSession
.
*
*
*
*
* - Encryption
* -
*
* -
*
* General purpose buckets - Server-side encryption is for data encryption at rest. Amazon S3 encrypts your
* data as it writes it to disks in its data centers and decrypts it when you access it. Amazon S3 automatically
* encrypts all new objects that are uploaded to an S3 bucket. When doing a multipart upload, if you don't specify
* encryption information in your request, the encryption setting of the uploaded parts is set to the default
* encryption configuration of the destination bucket. By default, all buckets have a base level of encryption
* configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket
* has a default encryption configuration that uses server-side encryption with an Key Management Service (KMS) key
* (SSE-KMS), or a customer-provided encryption key (SSE-C), Amazon S3 uses the corresponding KMS key, or a
* customer-provided key to encrypt the uploaded parts. When you perform a CreateMultipartUpload operation, if you
* want to use a different type of encryption setting for the uploaded parts, you can request that Amazon S3
* encrypts the object with a different encryption key (such as an Amazon S3 managed key, a KMS key, or a
* customer-provided key). When the encryption setting in your request is different from the default encryption
* configuration of the destination bucket, the encryption setting in your request takes precedence. If you choose
* to provide your own encryption key, the request headers you provide in UploadPart and UploadPartCopy requests must
* match the headers you used in the CreateMultipartUpload
request.
*
*
* -
*
* Use KMS keys (SSE-KMS) that include the Amazon Web Services managed key (aws/s3
) and KMS customer
* managed keys stored in Key Management Service (KMS) – If you want Amazon Web Services to manage the keys used to
* encrypt data, specify the following headers in the request.
*
*
* -
*
* x-amz-server-side-encryption
*
*
* -
*
* x-amz-server-side-encryption-aws-kms-key-id
*
*
* -
*
* x-amz-server-side-encryption-context
*
*
*
*
*
* -
*
* If you specify x-amz-server-side-encryption:aws:kms
, but don't provide
* x-amz-server-side-encryption-aws-kms-key-id
, Amazon S3 uses the Amazon Web Services managed key (
* aws/s3
key) in KMS to protect the data.
*
*
* -
*
* To perform a multipart upload with encryption by using an Amazon Web Services KMS key, the requester must have
* permission to the kms:Decrypt
and kms:GenerateDataKey*
actions on the key. These
* permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it
* completes the multipart upload. For more information, see Multipart upload
* API and permissions and Protecting data using
* server-side encryption with Amazon Web Services KMS in the Amazon S3 User Guide.
*
*
* -
*
* If your Identity and Access Management (IAM) user or role is in the same Amazon Web Services account as the KMS
* key, then you must have these permissions on the key policy. If your IAM user or role is in a different account
* from the key, then you must have the permissions on both the key policy and your IAM user or role.
*
*
* -
*
* All GET
and PUT
requests for an object protected by KMS fail if you don't make them by
* using Secure Sockets Layer (SSL), Transport Layer Security (TLS), or Signature Version 4. For information about
* configuring any of the officially supported Amazon Web Services SDKs and Amazon Web Services CLI, see Specifying the
* Signature Version in Request Authentication in the Amazon S3 User Guide.
*
*
*
*
*
* For more information about server-side encryption with KMS keys (SSE-KMS), see Protecting Data Using
* Server-Side Encryption with KMS keys in the Amazon S3 User Guide.
*
*
* -
*
* Use customer-provided encryption keys (SSE-C) – If you want to manage your own encryption keys, provide all the
* following headers in the request.
*
*
* -
*
* x-amz-server-side-encryption-customer-algorithm
*
*
* -
*
* x-amz-server-side-encryption-customer-key
*
*
* -
*
* x-amz-server-side-encryption-customer-key-MD5
*
*
*
*
* For more information about server-side encryption with customer-provided encryption keys (SSE-C), see Protecting
* data using server-side encryption with customer-provided encryption keys (SSE-C) in the Amazon S3 User
* Guide.
*
*
*
*
* -
*
* Directory buckets -For directory buckets, only server-side encryption with Amazon S3 managed keys (SSE-S3)
* (AES256
) is supported.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following operations are related to CreateMultipartUpload
:
*
*
* -
*
* UploadPart
*
*
* -
*
*
* -
*
*
* -
*
* ListParts
*
*
* -
*
*
*
*
* @param createMultipartUploadRequest
* @return A Java Future containing the result of the CreateMultipartUpload 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.CreateMultipartUpload
*/
@Override
public CompletableFuture createMultipartUpload(
CreateMultipartUploadRequest createMultipartUploadRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createMultipartUploadRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, createMultipartUploadRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateMultipartUpload");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(CreateMultipartUploadResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("CreateMultipartUpload").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new CreateMultipartUploadRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(createMultipartUploadRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Creates a session that establishes temporary security credentials to support fast authentication and
* authorization for the Zonal endpoint APIs on directory buckets. For more information about Zonal endpoint APIs
* that include the Availability Zone in the request endpoint, see S3 Express One Zone APIs in
* the Amazon S3 User Guide.
*
*
* To make Zonal endpoint API requests on a directory bucket, use the CreateSession
API operation.
* Specifically, you grant s3express:CreateSession
permission to a bucket in a bucket policy or an IAM
* identity-based policy. Then, you use IAM credentials to make the CreateSession
API request on the
* bucket, which returns temporary security credentials that include the access key ID, secret access key, session
* token, and expiration. These credentials have associated permissions to access the Zonal endpoint APIs. After the
* session is created, you don’t need to use other policies to grant permissions to each Zonal endpoint API
* individually. Instead, in your Zonal endpoint API requests, you sign your requests by applying the temporary
* security credentials of the session to the request headers and following the SigV4 protocol for authentication.
* You also apply the session token to the x-amz-s3session-token
request header for authorization.
* Temporary security credentials are scoped to the bucket and expire after 5 minutes. After the expiration time,
* any calls that you make with those credentials will fail. You must use IAM credentials again to make a
* CreateSession
API request that generates a new set of temporary credentials for use. Temporary
* credentials cannot be extended or refreshed beyond the original specified interval.
*
*
* If you use Amazon Web Services SDKs, SDKs handle the session token refreshes automatically to avoid service
* interruptions when a session expires. We recommend that you use the Amazon Web Services SDKs to initiate and
* manage requests to the CreateSession API. For more information, see Performance guidelines and design patterns in the Amazon S3 User Guide.
*
*
*
* -
*
* You must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style
* requests in the format https://bucket_name.s3express-az_id.region.amazonaws.com
* . Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
* -
*
* CopyObject
API operation - Unlike other Zonal endpoint APIs, the CopyObject
API
* operation doesn't use the temporary security credentials returned from the CreateSession
API
* operation for authentication and authorization. For information about authentication and authorization of the
* CopyObject
API operation on directory buckets, see CopyObject.
*
*
* -
*
* HeadBucket
API operation - Unlike other Zonal endpoint APIs, the HeadBucket
API
* operation doesn't use the temporary security credentials returned from the CreateSession
API
* operation for authentication and authorization. For information about authentication and authorization of the
* HeadBucket
API operation on directory buckets, see HeadBucket.
*
*
*
*
*
* - Permissions
* -
*
* To obtain temporary security credentials, you must create a bucket policy or an IAM identity-based policy that
* grants s3express:CreateSession
permission to the bucket. In a policy, you can have the
* s3express:SessionMode
condition key to control who can create a ReadWrite
or
* ReadOnly
session. For more information about ReadWrite
or ReadOnly
* sessions, see
* x-amz-create-session-mode
. For example policies, see Example bucket policies for S3 Express One Zone and Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone in
* the Amazon S3 User Guide.
*
*
* To grant cross-account access to Zonal endpoint APIs, the bucket policy should also grant both accounts the
* s3express:CreateSession
permission.
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* @param createSessionRequest
* @return A Java Future containing the result of the CreateSession 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.
*
* - NoSuchBucketException The specified bucket does not exist.
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.CreateSession
*/
@Override
public CompletableFuture createSession(CreateSessionRequest createSessionRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createSessionRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, createSessionRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateSession");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
CreateSessionResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("CreateSession").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new CreateSessionRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(createSessionRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Deletes the S3 bucket. All objects (including all object versions and delete markers) in the bucket must be
* deleted before the bucket itself can be deleted.
*
*
*
* -
*
* Directory buckets - If multipart uploads in a directory bucket are in progress, you can't delete the
* bucket until all the in-progress multipart uploads are aborted or completed.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Regional
* endpoint. These endpoints support path-style requests in the format
* https://s3express-control.region_code.amazonaws.com/bucket-name
. Virtual-hosted-style
* requests aren't supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - You must have the s3:DeleteBucket
permission on the
* specified bucket in a policy.
*
*
* -
*
* Directory bucket permissions - You must have the s3express:DeleteBucket
permission in an IAM
* identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported.
* This operation can only be performed by the Amazon Web Services account that owns the resource. For more
* information about directory bucket policies and permissions, see Amazon Web Services
* Identity and Access Management (IAM) for S3 Express One Zone in the Amazon S3 User Guide.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* s3express-control.region.amazonaws.com
.
*
*
*
*
* The following operations are related to DeleteBucket
:
*
*
* -
*
* CreateBucket
*
*
* -
*
* DeleteObject
*
*
*
*
* @param deleteBucketRequest
* @return A Java Future containing the result of the DeleteBucket 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucket
*/
@Override
public CompletableFuture deleteBucket(DeleteBucketRequest deleteBucketRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucket");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
DeleteBucketResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucket").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes an analytics configuration for the bucket (specified by the analytics configuration ID).
*
*
* To use this operation, you must have permissions to perform the s3:PutAnalyticsConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* For information about the Amazon S3 analytics feature, see Amazon S3 Analytics – Storage
* Class Analysis.
*
*
* The following operations are related to DeleteBucketAnalyticsConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketAnalyticsConfigurationRequest
* @return A Java Future containing the result of the DeleteBucketAnalyticsConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketAnalyticsConfiguration
*/
@Override
public CompletableFuture deleteBucketAnalyticsConfiguration(
DeleteBucketAnalyticsConfigurationRequest deleteBucketAnalyticsConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketAnalyticsConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
deleteBucketAnalyticsConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketAnalyticsConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketAnalyticsConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketAnalyticsConfiguration")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketAnalyticsConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketAnalyticsConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes the cors
configuration information set for the bucket.
*
*
* To use this operation, you must have permission to perform the s3:PutBucketCORS
action. The bucket
* owner has this permission by default and can grant this permission to others.
*
*
* For information about cors
, see Enabling Cross-Origin Resource Sharing in
* the Amazon S3 User Guide.
*
*
* Related Resources
*
*
* -
*
* PutBucketCors
*
*
* -
*
*
*
*
* @param deleteBucketCorsRequest
* @return A Java Future containing the result of the DeleteBucketCors 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketCors
*/
@Override
public CompletableFuture deleteBucketCors(DeleteBucketCorsRequest deleteBucketCorsRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketCorsRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketCorsRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketCors");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketCorsResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketCors").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketCorsRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketCorsRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* This implementation of the DELETE action resets the default encryption for the bucket as server-side encryption
* with Amazon S3 managed keys (SSE-S3). For information about the bucket default encryption feature, see Amazon S3 Bucket Default
* Encryption in the Amazon S3 User Guide.
*
*
* To use this operation, you must have permissions to perform the s3:PutEncryptionConfiguration
* action. The bucket owner has this permission by default. The bucket owner can grant this permission to others.
* For more information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to your Amazon S3 Resources in the Amazon S3 User Guide.
*
*
* The following operations are related to DeleteBucketEncryption
:
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketEncryptionRequest
* @return A Java Future containing the result of the DeleteBucketEncryption 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketEncryption
*/
@Override
public CompletableFuture deleteBucketEncryption(
DeleteBucketEncryptionRequest deleteBucketEncryptionRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketEncryptionRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketEncryptionRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketEncryption");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketEncryptionResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketEncryption").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketEncryptionRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketEncryptionRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes the S3 Intelligent-Tiering configuration from the specified bucket.
*
*
* The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to
* the most cost-effective storage access tier, without performance impact or operational overhead. S3
* Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get
* the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional
* archiving capabilities.
*
*
* The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or
* unpredictable access patterns, independent of object size or retention period. If the size of an object is less
* than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are
* always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.
*
*
* For more information, see Storage
* class for automatically optimizing frequently and infrequently accessed objects.
*
*
* Operations related to DeleteBucketIntelligentTieringConfiguration
include:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketIntelligentTieringConfigurationRequest
* @return A Java Future containing the result of the DeleteBucketIntelligentTieringConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketIntelligentTieringConfiguration
*/
@Override
public CompletableFuture deleteBucketIntelligentTieringConfiguration(
DeleteBucketIntelligentTieringConfigurationRequest deleteBucketIntelligentTieringConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(
deleteBucketIntelligentTieringConfigurationRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
deleteBucketIntelligentTieringConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketIntelligentTieringConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketIntelligentTieringConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketIntelligentTieringConfiguration")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketIntelligentTieringConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketIntelligentTieringConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes an inventory configuration (identified by the inventory ID) from the bucket.
*
*
* To use this operation, you must have permissions to perform the s3:PutInventoryConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* For information about the Amazon S3 inventory feature, see Amazon S3 Inventory.
*
*
* Operations related to DeleteBucketInventoryConfiguration
include:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketInventoryConfigurationRequest
* @return A Java Future containing the result of the DeleteBucketInventoryConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketInventoryConfiguration
*/
@Override
public CompletableFuture deleteBucketInventoryConfiguration(
DeleteBucketInventoryConfigurationRequest deleteBucketInventoryConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketInventoryConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
deleteBucketInventoryConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketInventoryConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketInventoryConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketInventoryConfiguration")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketInventoryConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketInventoryConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes the lifecycle configuration from the specified bucket. Amazon S3 removes all the lifecycle configuration
* rules in the lifecycle subresource associated with the bucket. Your objects never expire, and Amazon S3 no longer
* automatically deletes any objects on the basis of rules contained in the deleted lifecycle configuration.
*
*
* To use this operation, you must have permission to perform the s3:PutLifecycleConfiguration
action.
* By default, the bucket owner has this permission and the bucket owner can grant this permission to others.
*
*
* There is usually some time lag before lifecycle configuration deletion is fully propagated to all the Amazon S3
* systems.
*
*
* For more information about the object expiration, see Elements to Describe Lifecycle Actions.
*
*
* Related actions include:
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketLifecycleRequest
* @return A Java Future containing the result of the DeleteBucketLifecycle 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketLifecycle
*/
@Override
public CompletableFuture deleteBucketLifecycle(
DeleteBucketLifecycleRequest deleteBucketLifecycleRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketLifecycleRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketLifecycleRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketLifecycle");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketLifecycleResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketLifecycle").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketLifecycleRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketLifecycleRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes a metrics configuration for the Amazon CloudWatch request metrics (specified by the metrics configuration
* ID) from the bucket. Note that this doesn't include the daily storage metrics.
*
*
* To use this operation, you must have permissions to perform the s3:PutMetricsConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* For information about CloudWatch request metrics for Amazon S3, see Monitoring Metrics with Amazon
* CloudWatch.
*
*
* The following operations are related to DeleteBucketMetricsConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketMetricsConfigurationRequest
* @return A Java Future containing the result of the DeleteBucketMetricsConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketMetricsConfiguration
*/
@Override
public CompletableFuture deleteBucketMetricsConfiguration(
DeleteBucketMetricsConfigurationRequest deleteBucketMetricsConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketMetricsConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
deleteBucketMetricsConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketMetricsConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketMetricsConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketMetricsConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketMetricsConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketMetricsConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Removes OwnershipControls
for an Amazon S3 bucket. To use this operation, you must have the
* s3:PutBucketOwnershipControls
permission. For more information about Amazon S3 permissions, see Specifying Permissions in a
* Policy.
*
*
* For information about Amazon S3 Object Ownership, see Using Object Ownership.
*
*
* The following operations are related to DeleteBucketOwnershipControls
:
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketOwnershipControlsRequest
* @return A Java Future containing the result of the DeleteBucketOwnershipControls 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketOwnershipControls
*/
@Override
public CompletableFuture deleteBucketOwnershipControls(
DeleteBucketOwnershipControlsRequest deleteBucketOwnershipControlsRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketOwnershipControlsRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
deleteBucketOwnershipControlsRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketOwnershipControls");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketOwnershipControlsResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketOwnershipControls").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketOwnershipControlsRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketOwnershipControlsRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Deletes the policy of a specified bucket.
*
*
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Regional
* endpoint. These endpoints support path-style requests in the format
* https://s3express-control.region_code.amazonaws.com/bucket-name
. Virtual-hosted-style
* requests aren't supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
* - Permissions
* -
*
* If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket,
* the calling identity must both have the DeleteBucketPolicy
permissions on the specified bucket and
* belong to the bucket owner's account in order to use this operation.
*
*
* If you don't have DeleteBucketPolicy
permissions, Amazon S3 returns a 403 Access Denied
* error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's
* account, Amazon S3 returns a 405 Method Not Allowed
error.
*
*
*
* To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in
* a bucket owner's Amazon Web Services account can perform the GetBucketPolicy
,
* PutBucketPolicy
, and DeleteBucketPolicy
API actions, even if their bucket policy
* explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing
* these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.
*
*
*
* -
*
* General purpose bucket permissions - The s3:DeleteBucketPolicy
permission is required in a
* policy. For more information about general purpose buckets bucket policies, see Using Bucket Policies and User
* Policies in the Amazon S3 User Guide.
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation, you must have the
* s3express:DeleteBucketPolicy
permission in an IAM identity-based policy instead of a bucket policy.
* Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon
* Web Services account that owns the resource. For more information about directory bucket policies and
* permissions, see Amazon Web Services
* Identity and Access Management (IAM) for S3 Express One Zone in the Amazon S3 User Guide.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* s3express-control.region.amazonaws.com
.
*
*
*
*
* The following operations are related to DeleteBucketPolicy
*
*
* -
*
* CreateBucket
*
*
* -
*
* DeleteObject
*
*
*
*
* @param deleteBucketPolicyRequest
* @return A Java Future containing the result of the DeleteBucketPolicy 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketPolicy
*/
@Override
public CompletableFuture deleteBucketPolicy(DeleteBucketPolicyRequest deleteBucketPolicyRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketPolicyRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketPolicyRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketPolicy");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketPolicyResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketPolicy").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketPolicyRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketPolicyRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes the replication configuration from the bucket.
*
*
* To use this operation, you must have permissions to perform the s3:PutReplicationConfiguration
* action. The bucket owner has these permissions by default and can grant it to others. For more information about
* permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
*
* It can take a while for the deletion of a replication configuration to fully propagate.
*
*
*
* For information about replication configuration, see Replication in the Amazon S3 User
* Guide.
*
*
* The following operations are related to DeleteBucketReplication
:
*
*
* -
*
*
* -
*
*
*
*
* @param deleteBucketReplicationRequest
* @return A Java Future containing the result of the DeleteBucketReplication 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketReplication
*/
@Override
public CompletableFuture deleteBucketReplication(
DeleteBucketReplicationRequest deleteBucketReplicationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketReplicationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketReplicationRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketReplication");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketReplicationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketReplication").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketReplicationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketReplicationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Deletes the tags from the bucket.
*
*
* To use this operation, you must have permission to perform the s3:PutBucketTagging
action. By
* default, the bucket owner has this permission and can grant this permission to others.
*
*
* The following operations are related to DeleteBucketTagging
:
*
*
* -
*
* GetBucketTagging
*
*
* -
*
* PutBucketTagging
*
*
*
*
* @param deleteBucketTaggingRequest
* @return A Java Future containing the result of the DeleteBucketTagging 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketTagging
*/
@Override
public CompletableFuture deleteBucketTagging(
DeleteBucketTaggingRequest deleteBucketTaggingRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketTaggingRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketTaggingRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketTagging");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketTaggingResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketTagging").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketTaggingRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketTaggingRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* This action removes the website configuration for a bucket. Amazon S3 returns a 200 OK
response upon
* successfully deleting a website configuration on the specified bucket. You will get a 200 OK
* response if the website configuration you are trying to delete does not exist on the bucket. Amazon S3 returns a
* 404
response if the bucket specified in the request does not exist.
*
*
* This DELETE action requires the S3:DeleteBucketWebsite
permission. By default, only the bucket owner
* can delete the website configuration attached to a bucket. However, bucket owners can grant other users
* permission to delete the website configuration by writing a bucket policy granting them the
* S3:DeleteBucketWebsite
permission.
*
*
* For more information about hosting websites, see Hosting Websites on Amazon S3.
*
*
* The following operations are related to DeleteBucketWebsite
:
*
*
* -
*
* GetBucketWebsite
*
*
* -
*
* PutBucketWebsite
*
*
*
*
* @param deleteBucketWebsiteRequest
* @return A Java Future containing the result of the DeleteBucketWebsite 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteBucketWebsite
*/
@Override
public CompletableFuture deleteBucketWebsite(
DeleteBucketWebsiteRequest deleteBucketWebsiteRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteBucketWebsiteRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteBucketWebsiteRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteBucketWebsite");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteBucketWebsiteResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteBucketWebsite").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteBucketWebsiteRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteBucketWebsiteRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Removes an object from a bucket. The behavior depends on the bucket's versioning state:
*
*
* -
*
* If bucket versioning is not enabled, the operation permanently deletes the object.
*
*
* -
*
* If bucket versioning is enabled, the operation inserts a delete marker, which becomes the current version of the
* object. To permanently delete an object in a versioned bucket, you must include the object’s
* versionId
in the request. For more information about versioning-enabled buckets, see Deleting object versions
* from a versioning-enabled bucket.
*
*
* -
*
* If bucket versioning is suspended, the operation removes the object that has a null versionId
, if
* there is one, and inserts a delete marker that becomes the current version of the object. If there isn't an
* object with a null versionId
, and all versions of the object have a versionId
, Amazon
* S3 does not remove the object and only inserts a delete marker. To permanently delete an object that has a
* versionId
, you must include the object’s versionId
in the request. For more information
* about versioning-suspended buckets, see Deleting objects from versioning-suspended buckets.
*
*
*
*
*
* -
*
* Directory buckets - S3 Versioning isn't enabled and supported for directory buckets. For this API
* operation, only the null
value of the version ID is supported by directory buckets. You can only
* specify null
to the versionId
query parameter in the request.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* To remove a specific version, you must use the versionId
query parameter. Using this query parameter
* permanently deletes the version. If the object deleted is a delete marker, Amazon S3 sets the response header
* x-amz-delete-marker
to true.
*
*
* If the object you want to delete is in a bucket where the bucket versioning configuration is MFA Delete enabled,
* you must include the x-amz-mfa
request header in the DELETE versionId
request. Requests
* that include x-amz-mfa
must use HTTPS. For more information about MFA Delete, see Using MFA Delete in the Amazon
* S3 User Guide. To see sample requests that use versioning, see Sample
* Request.
*
*
*
* Directory buckets - MFA delete is not supported by directory buckets.
*
*
*
* You can delete objects by explicitly calling DELETE Object or calling (PutBucketLifecycle) to
* enable Amazon S3 to remove them for you. If you want to block users or accounts from removing or deleting objects
* from your bucket, you must deny them the s3:DeleteObject
, s3:DeleteObjectVersion
, and
* s3:PutLifeCycleConfiguration
actions.
*
*
*
* Directory buckets - S3 Lifecycle is not supported by directory buckets.
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - The following permissions are required in your policies when your
* DeleteObjects
request includes specific headers.
*
*
* -
*
* s3:DeleteObject
- To delete an object from a bucket, you must always have the
* s3:DeleteObject
permission.
*
*
* -
*
* s3:DeleteObjectVersion
- To delete a specific version of an object from a
* versioning-enabled bucket, you must have the s3:DeleteObjectVersion
permission.
*
*
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend
* that you use the
* CreateSession
API operation for session-based authorization. Specifically, you grant the
* s3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM
* identity-based policy. Then, you make the CreateSession
API call on the bucket to obtain a session
* token. With the session token in your request header, you can make API requests to this operation. After the
* session token expires, you make another CreateSession
API call to generate a new session token for
* use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service
* interruptions when a session expires. For more information about authorization, see CreateSession
.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following action is related to DeleteObject
:
*
*
* -
*
* PutObject
*
*
*
*
* @param deleteObjectRequest
* @return A Java Future containing the result of the DeleteObject 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteObject
*/
@Override
public CompletableFuture deleteObject(DeleteObjectRequest deleteObjectRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteObjectRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteObjectRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteObject");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
DeleteObjectResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteObject").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteObjectRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteObjectRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Removes the entire tag set from the specified object. For more information about managing object tags, see Object Tagging.
*
*
* To use this operation, you must have permission to perform the s3:DeleteObjectTagging
action.
*
*
* To delete tags of a specific object version, add the versionId
query parameter in the request. You
* will need permission for the s3:DeleteObjectVersionTagging
action.
*
*
* The following operations are related to DeleteObjectTagging
:
*
*
* -
*
* PutObjectTagging
*
*
* -
*
* GetObjectTagging
*
*
*
*
* @param deleteObjectTaggingRequest
* @return A Java Future containing the result of the DeleteObjectTagging 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteObjectTagging
*/
@Override
public CompletableFuture deleteObjectTagging(
DeleteObjectTaggingRequest deleteObjectTaggingRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteObjectTaggingRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteObjectTaggingRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteObjectTagging");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeleteObjectTaggingResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteObjectTagging").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteObjectTaggingRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deleteObjectTaggingRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* This operation enables you to delete multiple objects from a bucket using a single HTTP request. If you know the
* object keys that you want to delete, then this operation provides a suitable alternative to sending individual
* delete requests, reducing per-request overhead.
*
*
* The request can contain a list of up to 1000 keys that you want to delete. In the XML, you provide the object key
* names, and optionally, version IDs if you want to delete a specific version of the object from a
* versioning-enabled bucket. For each key, Amazon S3 performs a delete operation and returns the result of that
* delete, success or failure, in the response. Note that if the object specified in the request is not found,
* Amazon S3 returns the result as deleted.
*
*
*
* -
*
* Directory buckets - S3 Versioning isn't enabled and supported for directory buckets.
*
*
* -
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Zonal
* endpoint. These endpoints support virtual-hosted-style requests in the format
* https://bucket_name.s3express-az_id.region.amazonaws.com/key-name
.
* Path-style requests are not supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
*
*
* The operation supports two modes for the response: verbose and quiet. By default, the operation uses verbose mode
* in which the response includes the result of deletion of each key in your request. In quiet mode the response
* includes only keys where the delete operation encountered an error. For a successful deletion in a quiet mode,
* the operation does not return any information about the delete in the response body.
*
*
* When performing this action on an MFA Delete enabled bucket, that attempts to delete any versioned objects, you
* must include an MFA token. If you do not provide one, the entire request will fail, even if there are
* non-versioned objects you are trying to delete. If you provide an invalid token, whether there are versioned keys
* in the request or not, the entire Multi-Object Delete request will fail. For information about MFA Delete, see MFA
* Delete in the Amazon S3 User Guide.
*
*
*
* Directory buckets - MFA delete is not supported by directory buckets.
*
*
*
* - Permissions
* -
*
* -
*
* General purpose bucket permissions - The following permissions are required in your policies when your
* DeleteObjects
request includes specific headers.
*
*
* -
*
* s3:DeleteObject
- To delete an object from a bucket, you must always specify the
* s3:DeleteObject
permission.
*
*
* -
*
* s3:DeleteObjectVersion
- To delete a specific version of an object from a
* versioning-enabled bucket, you must specify the s3:DeleteObjectVersion
permission.
*
*
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation on a directory bucket, we recommend
* that you use the
* CreateSession
API operation for session-based authorization. Specifically, you grant the
* s3express:CreateSession
permission to the directory bucket in a bucket policy or an IAM
* identity-based policy. Then, you make the CreateSession
API call on the bucket to obtain a session
* token. With the session token in your request header, you can make API requests to this operation. After the
* session token expires, you make another CreateSession
API call to generate a new session token for
* use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service
* interruptions when a session expires. For more information about authorization, see CreateSession
.
*
*
*
*
* - Content-MD5 request header
* -
*
* -
*
* General purpose bucket - The Content-MD5 request header is required for all Multi-Object Delete requests.
* Amazon S3 uses the header value to ensure that your request body has not been altered in transit.
*
*
* -
*
* Directory bucket - The Content-MD5 request header or a additional checksum request header (including
* x-amz-checksum-crc32
, x-amz-checksum-crc32c
, x-amz-checksum-sha1
, or
* x-amz-checksum-sha256
) is required for all Multi-Object Delete requests.
*
*
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* Bucket_name.s3express-az_id.region.amazonaws.com
.
*
*
*
*
* The following operations are related to DeleteObjects
:
*
*
* -
*
*
* -
*
* UploadPart
*
*
* -
*
*
* -
*
* ListParts
*
*
* -
*
*
*
*
* @param deleteObjectsRequest
* @return A Java Future containing the result of the DeleteObjects 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeleteObjects
*/
@Override
public CompletableFuture deleteObjects(DeleteObjectsRequest deleteObjectsRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteObjectsRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteObjectsRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteObjects");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
DeleteObjectsResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeleteObjects")
.withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeleteObjectsRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler)
.withMetricCollector(apiCallMetricCollector)
.putExecutionAttribute(
SdkInternalExecutionAttribute.HTTP_CHECKSUM,
HttpChecksum.builder().requestChecksumRequired(true)
.requestAlgorithm(deleteObjectsRequest.checksumAlgorithmAsString())
.isRequestStreaming(false).build()).withInput(deleteObjectsRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Removes the PublicAccessBlock
configuration for an Amazon S3 bucket. To use this operation, you must
* have the s3:PutBucketPublicAccessBlock
permission. For more information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* The following operations are related to DeletePublicAccessBlock
:
*
*
* -
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param deletePublicAccessBlockRequest
* @return A Java Future containing the result of the DeletePublicAccessBlock 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.DeletePublicAccessBlock
*/
@Override
public CompletableFuture deletePublicAccessBlock(
DeletePublicAccessBlockRequest deletePublicAccessBlockRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deletePublicAccessBlockRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, deletePublicAccessBlockRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeletePublicAccessBlock");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(DeletePublicAccessBlockResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("DeletePublicAccessBlock").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new DeletePublicAccessBlockRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(deletePublicAccessBlockRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* This implementation of the GET action uses the accelerate
subresource to return the Transfer
* Acceleration state of a bucket, which is either Enabled
or Suspended
. Amazon S3
* Transfer Acceleration is a bucket-level feature that enables you to perform faster data transfers to and from
* Amazon S3.
*
*
* To use this operation, you must have permission to perform the s3:GetAccelerateConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to your Amazon S3 Resources in the Amazon S3 User Guide.
*
*
* You set the Transfer Acceleration state of an existing bucket to Enabled
or Suspended
* by using the
* PutBucketAccelerateConfiguration operation.
*
*
* A GET accelerate
request does not return a state value for a bucket that has no transfer
* acceleration state. A bucket has no Transfer Acceleration state if a state has never been set on the bucket.
*
*
* For more information about transfer acceleration, see Transfer Acceleration in
* the Amazon S3 User Guide.
*
*
* The following operations are related to GetBucketAccelerateConfiguration
:
*
*
* -
*
*
*
*
* @param getBucketAccelerateConfigurationRequest
* @return A Java Future containing the result of the GetBucketAccelerateConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketAccelerateConfiguration
*/
@Override
public CompletableFuture getBucketAccelerateConfiguration(
GetBucketAccelerateConfigurationRequest getBucketAccelerateConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketAccelerateConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketAccelerateConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketAccelerateConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketAccelerateConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketAccelerateConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketAccelerateConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketAccelerateConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* This implementation of the GET
action uses the acl
subresource to return the access
* control list (ACL) of a bucket. To use GET
to return the ACL of the bucket, you must have the
* READ_ACP
access to the bucket. If READ_ACP
permission is granted to the anonymous user,
* you can return the ACL of the bucket without using an authorization header.
*
*
* When you use this API operation with an access point, provide the alias of the access point in place of the
* bucket name.
*
*
* When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access
* point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error
* code InvalidAccessPointAliasError
is returned. For more information about
* InvalidAccessPointAliasError
, see List of Error Codes.
*
*
*
* If your bucket uses the bucket owner enforced setting for S3 Object Ownership, requests to read ACLs are still
* supported and return the bucket-owner-full-control
ACL with the owner being the account that created
* the bucket. For more information, see Controlling object
* ownership and disabling ACLs in the Amazon S3 User Guide.
*
*
*
* The following operations are related to GetBucketAcl
:
*
*
* -
*
* ListObjects
*
*
*
*
* @param getBucketAclRequest
* @return A Java Future containing the result of the GetBucketAcl 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketAcl
*/
@Override
public CompletableFuture getBucketAcl(GetBucketAclRequest getBucketAclRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketAclRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketAclRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketAcl");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
GetBucketAclResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketAcl").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketAclRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketAclRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* This implementation of the GET action returns an analytics configuration (identified by the analytics
* configuration ID) from the bucket.
*
*
* To use this operation, you must have permissions to perform the s3:GetAnalyticsConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources in the Amazon S3 User Guide.
*
*
* For information about Amazon S3 analytics feature, see Amazon S3 Analytics – Storage
* Class Analysis in the Amazon S3 User Guide.
*
*
* The following operations are related to GetBucketAnalyticsConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketAnalyticsConfigurationRequest
* @return A Java Future containing the result of the GetBucketAnalyticsConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketAnalyticsConfiguration
*/
@Override
public CompletableFuture getBucketAnalyticsConfiguration(
GetBucketAnalyticsConfigurationRequest getBucketAnalyticsConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketAnalyticsConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketAnalyticsConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketAnalyticsConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketAnalyticsConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketAnalyticsConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketAnalyticsConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketAnalyticsConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the Cross-Origin Resource Sharing (CORS) configuration information set for the bucket.
*
*
* To use this operation, you must have permission to perform the s3:GetBucketCORS
action. By default,
* the bucket owner has this permission and can grant it to others.
*
*
* When you use this API operation with an access point, provide the alias of the access point in place of the
* bucket name.
*
*
* When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access
* point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error
* code InvalidAccessPointAliasError
is returned. For more information about
* InvalidAccessPointAliasError
, see List of Error Codes.
*
*
* For more information about CORS, see
* Enabling Cross-Origin Resource Sharing.
*
*
* The following operations are related to GetBucketCors
:
*
*
* -
*
* PutBucketCors
*
*
* -
*
* DeleteBucketCors
*
*
*
*
* @param getBucketCorsRequest
* @return A Java Future containing the result of the GetBucketCors 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketCors
*/
@Override
public CompletableFuture getBucketCors(GetBucketCorsRequest getBucketCorsRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketCorsRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketCorsRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketCors");
HttpResponseHandler> responseHandler = protocolFactory.createCombinedResponseHandler(
GetBucketCorsResponse::builder, new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketCors").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketCorsRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketCorsRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the default encryption configuration for an Amazon S3 bucket. By default, all buckets have a default
* encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). For information
* about the bucket default encryption feature, see Amazon S3 Bucket Default
* Encryption in the Amazon S3 User Guide.
*
*
* To use this operation, you must have permission to perform the s3:GetEncryptionConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* The following operations are related to GetBucketEncryption
:
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketEncryptionRequest
* @return A Java Future containing the result of the GetBucketEncryption 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketEncryption
*/
@Override
public CompletableFuture getBucketEncryption(
GetBucketEncryptionRequest getBucketEncryptionRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketEncryptionRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketEncryptionRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketEncryption");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketEncryptionResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketEncryption").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketEncryptionRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketEncryptionRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Gets the S3 Intelligent-Tiering configuration from the specified bucket.
*
*
* The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to
* the most cost-effective storage access tier, without performance impact or operational overhead. S3
* Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get
* the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional
* archiving capabilities.
*
*
* The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or
* unpredictable access patterns, independent of object size or retention period. If the size of an object is less
* than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are
* always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.
*
*
* For more information, see Storage
* class for automatically optimizing frequently and infrequently accessed objects.
*
*
* Operations related to GetBucketIntelligentTieringConfiguration
include:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketIntelligentTieringConfigurationRequest
* @return A Java Future containing the result of the GetBucketIntelligentTieringConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketIntelligentTieringConfiguration
*/
@Override
public CompletableFuture getBucketIntelligentTieringConfiguration(
GetBucketIntelligentTieringConfigurationRequest getBucketIntelligentTieringConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(
getBucketIntelligentTieringConfigurationRequest, this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketIntelligentTieringConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketIntelligentTieringConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketIntelligentTieringConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketIntelligentTieringConfiguration")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketIntelligentTieringConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketIntelligentTieringConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns an inventory configuration (identified by the inventory configuration ID) from the bucket.
*
*
* To use this operation, you must have permissions to perform the s3:GetInventoryConfiguration
action.
* The bucket owner has this permission by default and can grant this permission to others. For more information
* about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* For information about the Amazon S3 inventory feature, see Amazon S3 Inventory.
*
*
* The following operations are related to GetBucketInventoryConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketInventoryConfigurationRequest
* @return A Java Future containing the result of the GetBucketInventoryConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketInventoryConfiguration
*/
@Override
public CompletableFuture getBucketInventoryConfiguration(
GetBucketInventoryConfigurationRequest getBucketInventoryConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketInventoryConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketInventoryConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketInventoryConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketInventoryConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketInventoryConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketInventoryConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketInventoryConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Bucket lifecycle configuration now supports specifying a lifecycle rule using an object key name prefix, one or
* more object tags, object size, or any combination of these. Accordingly, this section describes the latest API.
* The previous version of the API supported filtering based only on an object key name prefix, which is supported
* for backward compatibility. For the related API description, see GetBucketLifecycle.
* Accordingly, this section describes the latest API. The response describes the new filter element that you can
* use to specify a filter to select a subset of objects to which the rule applies. If you are using a previous
* version of the lifecycle configuration, it still works. For the earlier action,
*
*
*
* Returns the lifecycle configuration information set on the bucket. For information about lifecycle configuration,
* see Object Lifecycle
* Management.
*
*
* To use this operation, you must have permission to perform the s3:GetLifecycleConfiguration
action.
* The bucket owner has this permission, by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* GetBucketLifecycleConfiguration
has the following special error:
*
*
* -
*
* Error code: NoSuchLifecycleConfiguration
*
*
* -
*
* Description: The lifecycle configuration does not exist.
*
*
* -
*
* HTTP Status Code: 404 Not Found
*
*
* -
*
* SOAP Fault Code Prefix: Client
*
*
*
*
*
*
* The following operations are related to GetBucketLifecycleConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketLifecycleConfigurationRequest
* @return A Java Future containing the result of the GetBucketLifecycleConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketLifecycleConfiguration
*/
@Override
public CompletableFuture getBucketLifecycleConfiguration(
GetBucketLifecycleConfigurationRequest getBucketLifecycleConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketLifecycleConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketLifecycleConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketLifecycleConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketLifecycleConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketLifecycleConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketLifecycleConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketLifecycleConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the Region the bucket resides in. You set the bucket's Region using the LocationConstraint
* request parameter in a CreateBucket
request. For more information, see CreateBucket.
*
*
* When you use this API operation with an access point, provide the alias of the access point in place of the
* bucket name.
*
*
* When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access
* point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error
* code InvalidAccessPointAliasError
is returned. For more information about
* InvalidAccessPointAliasError
, see List of Error Codes.
*
*
*
* We recommend that you use HeadBucket to return the Region
* that a bucket resides in. For backward compatibility, Amazon S3 continues to support GetBucketLocation.
*
*
*
* The following operations are related to GetBucketLocation
:
*
*
* -
*
* GetObject
*
*
* -
*
* CreateBucket
*
*
*
*
* @param getBucketLocationRequest
* @return A Java Future containing the result of the GetBucketLocation 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketLocation
*/
@Override
public CompletableFuture getBucketLocation(GetBucketLocationRequest getBucketLocationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketLocationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketLocationRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketLocation");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketLocationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketLocation").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketLocationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketLocationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the logging status of a bucket and the permissions users have to view and modify that status.
*
*
* The following operations are related to GetBucketLogging
:
*
*
* -
*
* CreateBucket
*
*
* -
*
* PutBucketLogging
*
*
*
*
* @param getBucketLoggingRequest
* @return A Java Future containing the result of the GetBucketLogging 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketLogging
*/
@Override
public CompletableFuture getBucketLogging(GetBucketLoggingRequest getBucketLoggingRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketLoggingRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketLoggingRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketLogging");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketLoggingResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketLogging").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketLoggingRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketLoggingRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Gets a metrics configuration (specified by the metrics configuration ID) from the bucket. Note that this doesn't
* include the daily storage metrics.
*
*
* To use this operation, you must have permissions to perform the s3:GetMetricsConfiguration
action.
* The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more
* information about permissions, see Permissions Related to Bucket Subresource Operations and Managing Access Permissions
* to Your Amazon S3 Resources.
*
*
* For information about CloudWatch request metrics for Amazon S3, see Monitoring Metrics with Amazon
* CloudWatch.
*
*
* The following operations are related to GetBucketMetricsConfiguration
:
*
*
* -
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketMetricsConfigurationRequest
* @return A Java Future containing the result of the GetBucketMetricsConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketMetricsConfiguration
*/
@Override
public CompletableFuture getBucketMetricsConfiguration(
GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketMetricsConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketMetricsConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketMetricsConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketMetricsConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketMetricsConfiguration").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketMetricsConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketMetricsConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the notification configuration of a bucket.
*
*
* If notifications are not enabled on the bucket, the action returns an empty
* NotificationConfiguration
element.
*
*
* By default, you must be the bucket owner to read the notification configuration of a bucket. However, the bucket
* owner can use a bucket policy to grant permission to other users to read this configuration with the
* s3:GetBucketNotification
permission.
*
*
* When you use this API operation with an access point, provide the alias of the access point in place of the
* bucket name.
*
*
* When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access
* point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error
* code InvalidAccessPointAliasError
is returned. For more information about
* InvalidAccessPointAliasError
, see List of Error Codes.
*
*
* For more information about setting and reading the notification configuration on a bucket, see Setting Up Notification of Bucket
* Events. For more information about bucket policies, see Using Bucket Policies.
*
*
* The following action is related to GetBucketNotification
:
*
*
* -
*
*
*
*
* @param getBucketNotificationConfigurationRequest
* @return A Java Future containing the result of the GetBucketNotificationConfiguration 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketNotificationConfiguration
*/
@Override
public CompletableFuture getBucketNotificationConfiguration(
GetBucketNotificationConfigurationRequest getBucketNotificationConfigurationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketNotificationConfigurationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration,
getBucketNotificationConfigurationRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketNotificationConfiguration");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketNotificationConfigurationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketNotificationConfiguration")
.withRequestConfiguration(clientConfiguration).withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketNotificationConfigurationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketNotificationConfigurationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Retrieves OwnershipControls
for an Amazon S3 bucket. To use this operation, you must have the
* s3:GetBucketOwnershipControls
permission. For more information about Amazon S3 permissions, see Specifying permissions in
* a policy.
*
*
* For information about Amazon S3 Object Ownership, see Using Object
* Ownership.
*
*
* The following operations are related to GetBucketOwnershipControls
:
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketOwnershipControlsRequest
* @return A Java Future containing the result of the GetBucketOwnershipControls 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketOwnershipControls
*/
@Override
public CompletableFuture getBucketOwnershipControls(
GetBucketOwnershipControlsRequest getBucketOwnershipControlsRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketOwnershipControlsRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketOwnershipControlsRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketOwnershipControls");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketOwnershipControlsResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketOwnershipControls").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketOwnershipControlsRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketOwnershipControlsRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
* Returns the policy of a specified bucket.
*
*
*
* Directory buckets - For directory buckets, you must make requests for this API operation to the Regional
* endpoint. These endpoints support path-style requests in the format
* https://s3express-control.region_code.amazonaws.com/bucket-name
. Virtual-hosted-style
* requests aren't supported. For more information, see Regional and Zonal
* endpoints in the Amazon S3 User Guide.
*
*
*
* - Permissions
* -
*
* If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket,
* the calling identity must both have the GetBucketPolicy
permissions on the specified bucket and
* belong to the bucket owner's account in order to use this operation.
*
*
* If you don't have GetBucketPolicy
permissions, Amazon S3 returns a 403 Access Denied
* error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's
* account, Amazon S3 returns a 405 Method Not Allowed
error.
*
*
*
* To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in
* a bucket owner's Amazon Web Services account can perform the GetBucketPolicy
,
* PutBucketPolicy
, and DeleteBucketPolicy
API actions, even if their bucket policy
* explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing
* these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.
*
*
*
* -
*
* General purpose bucket permissions - The s3:GetBucketPolicy
permission is required in a
* policy. For more information about general purpose buckets bucket policies, see Using Bucket Policies and User
* Policies in the Amazon S3 User Guide.
*
*
* -
*
* Directory bucket permissions - To grant access to this API operation, you must have the
* s3express:GetBucketPolicy
permission in an IAM identity-based policy instead of a bucket policy.
* Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon
* Web Services account that owns the resource. For more information about directory bucket policies and
* permissions, see Amazon Web Services
* Identity and Access Management (IAM) for S3 Express One Zone in the Amazon S3 User Guide.
*
*
*
*
* - Example bucket policies
* -
*
* General purpose buckets example bucket policies - See Bucket policy
* examples in the Amazon S3 User Guide.
*
*
* Directory bucket example bucket policies - See Example bucket policies for S3 Express One Zone in the Amazon S3 User Guide.
*
*
* - HTTP Host header syntax
* -
*
* Directory buckets - The HTTP Host header syntax is
* s3express-control.region.amazonaws.com
.
*
*
*
*
* The following action is related to GetBucketPolicy
:
*
*
* -
*
* GetObject
*
*
*
*
* @param getBucketPolicyRequest
* @return A Java Future containing the result of the GetBucketPolicy 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketPolicy
*/
@Override
public CompletableFuture getBucketPolicy(GetBucketPolicyRequest getBucketPolicyRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketPolicyRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketPolicyRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketPolicy");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketPolicyResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketPolicy").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketPolicyRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketPolicyRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Retrieves the policy status for an Amazon S3 bucket, indicating whether the bucket is public. In order to use
* this operation, you must have the s3:GetBucketPolicyStatus
permission. For more information about
* Amazon S3 permissions, see Specifying Permissions in a
* Policy.
*
*
* For more information about when Amazon S3 considers a bucket public, see The Meaning of "Public".
*
*
* The following operations are related to GetBucketPolicyStatus
:
*
*
* -
*
*
* -
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketPolicyStatusRequest
* @return A Java Future containing the result of the GetBucketPolicyStatus 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketPolicyStatus
*/
@Override
public CompletableFuture getBucketPolicyStatus(
GetBucketPolicyStatusRequest getBucketPolicyStatusRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketPolicyStatusRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketPolicyStatusRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketPolicyStatus");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketPolicyStatusResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketPolicyStatus").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketPolicyStatusRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketPolicyStatusRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the replication configuration of a bucket.
*
*
*
* It can take a while to propagate the put or delete a replication configuration to all Amazon S3 systems.
* Therefore, a get request soon after put or delete can return a wrong result.
*
*
*
* For information about replication configuration, see Replication in the Amazon S3 User
* Guide.
*
*
* This action requires permissions for the s3:GetReplicationConfiguration
action. For more information
* about permissions, see Using
* Bucket Policies and User Policies.
*
*
* If you include the Filter
element in a replication configuration, you must also include the
* DeleteMarkerReplication
and Priority
elements. The response also returns those
* elements.
*
*
* For information about GetBucketReplication
errors, see List of
* replication-related error codes
*
*
* The following operations are related to GetBucketReplication
:
*
*
* -
*
*
* -
*
*
*
*
* @param getBucketReplicationRequest
* @return A Java Future containing the result of the GetBucketReplication 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketReplication
*/
@Override
public CompletableFuture getBucketReplication(
GetBucketReplicationRequest getBucketReplicationRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketReplicationRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketReplicationRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketReplication");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketReplicationResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketReplication").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketReplicationRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketReplicationRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the request payment configuration of a bucket. To use this version of the operation, you must be the
* bucket owner. For more information, see Requester Pays Buckets.
*
*
* The following operations are related to GetBucketRequestPayment
:
*
*
* -
*
* ListObjects
*
*
*
*
* @param getBucketRequestPaymentRequest
* @return A Java Future containing the result of the GetBucketRequestPayment 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketRequestPayment
*/
@Override
public CompletableFuture getBucketRequestPayment(
GetBucketRequestPaymentRequest getBucketRequestPaymentRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketRequestPaymentRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketRequestPaymentRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketRequestPayment");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketRequestPaymentResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketRequestPayment").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketRequestPaymentRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketRequestPaymentRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the tag set associated with the bucket.
*
*
* To use this operation, you must have permission to perform the s3:GetBucketTagging
action. By
* default, the bucket owner has this permission and can grant this permission to others.
*
*
* GetBucketTagging
has the following special error:
*
*
* -
*
* Error code: NoSuchTagSet
*
*
* -
*
* Description: There is no tag set associated with the bucket.
*
*
*
*
*
*
* The following operations are related to GetBucketTagging
:
*
*
* -
*
* PutBucketTagging
*
*
* -
*
*
*
*
* @param getBucketTaggingRequest
* @return A Java Future containing the result of the GetBucketTagging 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketTagging
*/
@Override
public CompletableFuture getBucketTagging(GetBucketTaggingRequest getBucketTaggingRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketTaggingRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketTaggingRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketTagging");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketTaggingResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketTagging").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketTaggingRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketTaggingRequest));
CompletableFuture whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
return whenCompleteFuture;
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}
/**
*
*
* This operation is not supported by directory buckets.
*
*
*
* Returns the versioning state of a bucket.
*
*
* To retrieve the versioning state of a bucket, you must be the bucket owner.
*
*
* This implementation also returns the MFA Delete status of the versioning state. If the MFA Delete status is
* enabled
, the bucket owner must use an authentication device to change the versioning state of the
* bucket.
*
*
* The following operations are related to GetBucketVersioning
:
*
*
* -
*
* GetObject
*
*
* -
*
* PutObject
*
*
* -
*
* DeleteObject
*
*
*
*
* @param getBucketVersioningRequest
* @return A Java Future containing the result of the GetBucketVersioning 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.
*
* - 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.
* - S3Exception Base class for all service exceptions. Unknown exceptions will be thrown as an instance
* of this type.
*
* @sample S3AsyncClient.GetBucketVersioning
*/
@Override
public CompletableFuture getBucketVersioning(
GetBucketVersioningRequest getBucketVersioningRequest) {
SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getBucketVersioningRequest,
this.clientConfiguration);
List metricPublishers = resolveMetricPublishers(clientConfiguration, getBucketVersioningRequest
.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "S3");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetBucketVersioning");
HttpResponseHandler> responseHandler = protocolFactory
.createCombinedResponseHandler(GetBucketVersioningResponse::builder,
new XmlOperationMetadata().withHasStreamingSuccessResponse(false));
CompletableFuture executeFuture = clientHandler
.execute(new ClientExecutionParams()
.withOperationName("GetBucketVersioning").withRequestConfiguration(clientConfiguration)
.withProtocolMetadata(protocolMetadata)
.withMarshaller(new GetBucketVersioningRequestMarshaller(protocolFactory))
.withCombinedResponseHandler(responseHandler).withMetricCollector(apiCallMetricCollector)
.withInput(getBucketVersioningRequest));
CompletableFuture