Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,17 @@
},
"authtype": "none"
},
"OperationWithRequestCompression": {
"name": "APostOperation",
"http": {
"method": "POST",
"requestUri": "/"
},
"authtype": "none",
"requestCompression": {
"encodings": ["gzip"]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for adding the test. I think we should add tests for other protocols as well since it seems the codegen code for different protocols is in different files.

"APostOperation": {
"name": "APostOperation",
"http": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@
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.SdkExecutionAttribute;
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
import software.amazon.awssdk.core.interceptor.trait.HttpChecksum;
import software.amazon.awssdk.core.interceptor.trait.HttpChecksumRequired;
import software.amazon.awssdk.core.interceptor.trait.RequestCompression;
import software.amazon.awssdk.core.metrics.CoreMetric;
import software.amazon.awssdk.core.runtime.transform.AsyncStreamingRequestMarshaller;
import software.amazon.awssdk.core.signer.Signer;
Expand All @@ -52,6 +54,8 @@
import software.amazon.awssdk.services.query.model.OperationWithContextParamResponse;
import software.amazon.awssdk.services.query.model.OperationWithNoneAuthTypeRequest;
import software.amazon.awssdk.services.query.model.OperationWithNoneAuthTypeResponse;
import software.amazon.awssdk.services.query.model.OperationWithRequestCompressionRequest;
import software.amazon.awssdk.services.query.model.OperationWithRequestCompressionResponse;
import software.amazon.awssdk.services.query.model.OperationWithStaticContextParamsRequest;
import software.amazon.awssdk.services.query.model.OperationWithStaticContextParamsResponse;
import software.amazon.awssdk.services.query.model.PutOperationWithChecksumRequest;
Expand All @@ -69,6 +73,7 @@
import software.amazon.awssdk.services.query.transform.OperationWithChecksumRequiredRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithContextParamRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithNoneAuthTypeRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithRequestCompressionRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithStaticContextParamsRequestMarshaller;
import software.amazon.awssdk.services.query.transform.PutOperationWithChecksumRequestMarshaller;
import software.amazon.awssdk.services.query.transform.StreamingInputOperationRequestMarshaller;
Expand Down Expand Up @@ -494,6 +499,66 @@ public CompletableFuture<OperationWithNoneAuthTypeResponse> operationWithNoneAut
}
}

/**
* Invokes the OperationWithRequestCompression operation asynchronously.
*
* @param operationWithRequestCompressionRequest
* @return A Java Future containing the result of the OperationWithRequestCompression operation returned by the
* service.<br/>
* The CompletableFuture returned by this method can be completed exceptionally with the following
* exceptions.
* <ul>
* <li>SdkException Base class for all exceptions that can be thrown by the SDK (both service and client).
* Can be used for catch all scenarios.</li>
* <li>SdkClientException If any client side error occurs such as an IO related failure, failure to get
* credentials, etc.</li>
* <li>QueryException Base class for all service exceptions. Unknown exceptions will be thrown as an
* instance of this type.</li>
* </ul>
* @sample QueryAsyncClient.OperationWithRequestCompression
* @see <a href="https://docs.aws.amazon.com/goto/WebAPI/query-service-2010-05-08/OperationWithRequestCompression"
* target="_top">AWS API Documentation</a>
*/
@Override
public CompletableFuture<OperationWithRequestCompressionResponse> operationWithRequestCompression(
OperationWithRequestCompressionRequest operationWithRequestCompressionRequest) {
List<MetricPublisher> metricPublishers = resolveMetricPublishers(clientConfiguration,
operationWithRequestCompressionRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Query Service");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "OperationWithRequestCompression");

HttpResponseHandler<OperationWithRequestCompressionResponse> responseHandler = protocolFactory
.createResponseHandler(OperationWithRequestCompressionResponse::builder);

HttpResponseHandler<AwsServiceException> errorResponseHandler = protocolFactory.createErrorResponseHandler();

CompletableFuture<OperationWithRequestCompressionResponse> executeFuture = clientHandler
.execute(new ClientExecutionParams<OperationWithRequestCompressionRequest, OperationWithRequestCompressionResponse>()
.withOperationName("OperationWithRequestCompression")
.withMarshaller(new OperationWithRequestCompressionRequestMarshaller(protocolFactory))
.withResponseHandler(responseHandler)
.withErrorResponseHandler(errorResponseHandler)
.withMetricCollector(apiCallMetricCollector)
.putExecutionAttribute(SdkInternalExecutionAttribute.IS_NONE_AUTH_TYPE_REQUEST, false)
.putExecutionAttribute(SdkInternalExecutionAttribute.REQUEST_COMPRESSION,
RequestCompression.builder().encodings("gzip").isStreaming(false).build())
.putExecutionAttribute(SdkExecutionAttribute.REQUEST_COMPRESSION_CONFIGURATION,
clientConfiguration.option(SdkClientOption.REQUEST_COMPRESSION_CONFIGURATION))
.withInput(operationWithRequestCompressionRequest));
CompletableFuture<OperationWithRequestCompressionResponse> whenCompleteFuture = null;
whenCompleteFuture = executeFuture.whenComplete((r, e) -> {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
});
return CompletableFutureUtils.forwardExceptionTo(whenCompleteFuture, executeFuture);
} catch (Throwable t) {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
return CompletableFutureUtils.failedFuture(t);
}
}

/**
* Invokes the OperationWithStaticContextParams operation asynchronously.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
import software.amazon.awssdk.core.client.handler.SyncClientHandler;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.http.HttpResponseHandler;
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
import software.amazon.awssdk.core.interceptor.trait.HttpChecksum;
import software.amazon.awssdk.core.interceptor.trait.HttpChecksumRequired;
import software.amazon.awssdk.core.interceptor.trait.RequestCompression;
import software.amazon.awssdk.core.metrics.CoreMetric;
import software.amazon.awssdk.core.runtime.transform.StreamingRequestMarshaller;
import software.amazon.awssdk.core.signer.Signer;
Expand All @@ -45,6 +47,8 @@
import software.amazon.awssdk.services.query.model.OperationWithContextParamResponse;
import software.amazon.awssdk.services.query.model.OperationWithNoneAuthTypeRequest;
import software.amazon.awssdk.services.query.model.OperationWithNoneAuthTypeResponse;
import software.amazon.awssdk.services.query.model.OperationWithRequestCompressionRequest;
import software.amazon.awssdk.services.query.model.OperationWithRequestCompressionResponse;
import software.amazon.awssdk.services.query.model.OperationWithStaticContextParamsRequest;
import software.amazon.awssdk.services.query.model.OperationWithStaticContextParamsResponse;
import software.amazon.awssdk.services.query.model.PutOperationWithChecksumRequest;
Expand All @@ -62,6 +66,7 @@
import software.amazon.awssdk.services.query.transform.OperationWithChecksumRequiredRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithContextParamRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithNoneAuthTypeRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithRequestCompressionRequestMarshaller;
import software.amazon.awssdk.services.query.transform.OperationWithStaticContextParamsRequestMarshaller;
import software.amazon.awssdk.services.query.transform.PutOperationWithChecksumRequestMarshaller;
import software.amazon.awssdk.services.query.transform.StreamingInputOperationRequestMarshaller;
Expand Down Expand Up @@ -422,6 +427,57 @@ public OperationWithNoneAuthTypeResponse operationWithNoneAuthType(
}
}

/**
* Invokes the OperationWithRequestCompression operation.
*
* @param operationWithRequestCompressionRequest
* @return Result of the OperationWithRequestCompression operation returned by the service.
* @throws SdkException
* Base class for all exceptions that can be thrown by the SDK (both service and client). Can be used for
* catch all scenarios.
* @throws SdkClientException
* If any client side error occurs such as an IO related failure, failure to get credentials, etc.
* @throws QueryException
* Base class for all service exceptions. Unknown exceptions will be thrown as an instance of this type.
* @sample QueryClient.OperationWithRequestCompression
* @see <a href="https://docs.aws.amazon.com/goto/WebAPI/query-service-2010-05-08/OperationWithRequestCompression"
* target="_top">AWS API Documentation</a>
*/
@Override
public OperationWithRequestCompressionResponse operationWithRequestCompression(
OperationWithRequestCompressionRequest operationWithRequestCompressionRequest) throws AwsServiceException,
SdkClientException, QueryException {

HttpResponseHandler<OperationWithRequestCompressionResponse> responseHandler = protocolFactory
.createResponseHandler(OperationWithRequestCompressionResponse::builder);

HttpResponseHandler<AwsServiceException> errorResponseHandler = protocolFactory.createErrorResponseHandler();
List<MetricPublisher> metricPublishers = resolveMetricPublishers(clientConfiguration,
operationWithRequestCompressionRequest.overrideConfiguration().orElse(null));
MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector
.create("ApiCall");
try {
apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Query Service");
apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "OperationWithRequestCompression");

return clientHandler
.execute(new ClientExecutionParams<OperationWithRequestCompressionRequest, OperationWithRequestCompressionResponse>()
.withOperationName("OperationWithRequestCompression")
.withResponseHandler(responseHandler)
.withErrorResponseHandler(errorResponseHandler)
.withInput(operationWithRequestCompressionRequest)
.withMetricCollector(apiCallMetricCollector)
.putExecutionAttribute(SdkInternalExecutionAttribute.IS_NONE_AUTH_TYPE_REQUEST, false)
.putExecutionAttribute(SdkInternalExecutionAttribute.REQUEST_COMPRESSION,
RequestCompression.builder().encodings("gzip").isStreaming(false).build())
.putExecutionAttribute(SdkExecutionAttribute.REQUEST_COMPRESSION_CONFIGURATION,
clientConfiguration.option(SdkClientOption.REQUEST_COMPRESSION_CONFIGURATION))
.withMarshaller(new OperationWithRequestCompressionRequestMarshaller(protocolFactory)));
} finally {
metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect()));
}
}

/**
* Invokes the OperationWithStaticContextParams operation.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,16 @@ public final class ProfileProperty {
public static final String EC2_METADATA_SERVICE_ENDPOINT = "ec2_metadata_service_endpoint";

/**
* Whether request compression is enabled for operations marked with the RequestCompression trait. The default value is true.
* Whether request compression is disabled for operations marked with the RequestCompression trait. The default value is
* false, i.e., request compression is enabled.
*/
public static final String REQUEST_COMPRESSION_ENABLED = "requestCompressionEnabled";
public static final String DISABLE_REQUEST_COMPRESSION = "disable_request_compression";

/**
* The minimum compression size in bytes, inclusive, for a request to be compressed. The default value is 10_240.
* The value must be non-negative and no greater than 10_485_760.
*/
public static final String REQUEST_MIN_COMPRESSION_SIZE_IN_BYTES = "requestMinCompressionSizeInBytes";
public static final String REQUEST_MIN_COMPRESSION_SIZE_BYTES = "request_min_compression_size_bytes";

private ProfileProperty() {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
* compression threshold in bytes.
*/
@SdkPublicApi
public class RequestCompressionConfiguration implements ToCopyableBuilder<RequestCompressionConfiguration.Builder,
public final class RequestCompressionConfiguration implements ToCopyableBuilder<RequestCompressionConfiguration.Builder,
RequestCompressionConfiguration> {

private final Boolean requestCompressionEnabled;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,12 @@ public ExecutionAttributes executionAttributes() {
}

/**
* Returns the request compression configuration object, which includes options to enable/disable request compression and
* set the minimum compression threshold. This request compression config object supersedes the request compression config
* object set on the client.
* Returns the request compression configuration object, if present, which includes options to enable/disable request
* compression and set the minimum compression threshold. This request compression config object supersedes the request
* compression config object set on the client.
*/
public RequestCompressionConfiguration requestCompressionConfiguration() {
return requestCompressionConfiguration;
public Optional<RequestCompressionConfiguration> requestCompressionConfiguration() {
return Optional.ofNullable(requestCompressionConfiguration);
}

@Override
Expand Down Expand Up @@ -426,14 +426,16 @@ default B putRawQueryParameter(String name, String value) {
ExecutionAttributes executionAttributes();

/**
* Sets the {@link RequestCompressionConfiguration} for this request.
* Sets the {@link RequestCompressionConfiguration} for this request. The order of precedence, from highest to lowest,
* for this setting is: 1) Per request configuration 2) Client configuration 3) Environment variables 4) Profile setting.
*
* @param requestCompressionConfiguration Request compression configuration object for this request.
*/
B requestCompressionConfiguration(RequestCompressionConfiguration requestCompressionConfiguration);

/**
* Sets the {@link RequestCompressionConfiguration} for this request.
* Sets the {@link RequestCompressionConfiguration} for this request. The order of precedence, from highest to lowest,
* for this setting is: 1) Per request configuration 2) Client configuration 3) Environment variables 4) Profile setting.
*
* @param requestCompressionConfigurationConsumer A {@link Consumer} that accepts a
* {@link RequestCompressionConfiguration.Builder}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,16 @@ public enum SdkSystemSetting implements SystemSetting {
AWS_USE_FIPS_ENDPOINT("aws.useFipsEndpoint", null),

/**
* Whether request compression is enabled for operations marked with the RequestCompression trait. The default value is true.
* Whether request compression is disabled for operations marked with the RequestCompression trait. The default value is
* false, i.e., request compression is enabled.
*/
AWS_REQUEST_COMPRESSION_ENABLED("aws.requestCompressionEnabled", null),
AWS_DISABLE_REQUEST_COMPRESSION("aws.disableRequestCompression", null),

/**
* Defines the minimum compression size in bytes, inclusive, for a request to be compressed. The default value is 10_240.
* The value must be non-negative and no greater than 10_485_760.
*/
AWS_REQUEST_MIN_COMPRESSION_SIZE_IN_BYTES("aws.requestMinCompressionSizeInBytes", null),
AWS_REQUEST_MIN_COMPRESSION_SIZE_BYTES("aws.requestMinCompressionSizeBytes", null),

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,16 @@ default Builder retryPolicy(RetryMode retryMode) {
*/
Builder requestCompressionConfiguration(RequestCompressionConfiguration requestCompressionConfiguration);

/**
* Sets the {@link RequestCompressionConfiguration} for this client.
*/
default Builder requestCompressionConfiguration(Consumer<RequestCompressionConfiguration.Builder>
requestCompressionConfiguration) {
return requestCompressionConfiguration(RequestCompressionConfiguration.builder()
.applyMutation(requestCompressionConfiguration)
.build());
}

RequestCompressionConfiguration requestCompressionConfiguration();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ public class SdkExecutionAttribute {
public static final ExecutionAttribute<ChecksumValidation> HTTP_RESPONSE_CHECKSUM_VALIDATION = new ExecutionAttribute<>(
"HttpResponseChecksumValidation");

/**
* The {@link RequestCompressionConfiguration}, which includes options to enable/disable request compression and set the
* minimum compression threshold.
*/
public static final ExecutionAttribute<RequestCompressionConfiguration> REQUEST_COMPRESSION_CONFIGURATION =
new ExecutionAttribute<>("RequestCompressionConfiguration");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public final class SdkInternalExecutionAttribute extends SdkExecutionAttribute {
new ExecutionAttribute<>("IsDiscoveredEndpoint");

/**
* The supported compression algorithms for an operation
* The supported compression algorithms for an operation, and whether the operation is streaming or not.
*/
public static final ExecutionAttribute<RequestCompression> REQUEST_COMPRESSION =
new ExecutionAttribute<>("RequestCompression");
Expand Down