Fix request compression (#3820)
## Description
<!--- Describe your changes in detail -->
This PR includes several fixes for request compression:
- `aws_smithy_compression::body::compress::CompressedBody` will no
longer incorrectly return the inner body's `SizeHint`, returning
`SizeHint::default()` instead.
- Fixed a bug where compressed payloads would have an incorrect content
length, causing those requests to hang.
- Compress in-memory request payloads instead of the previous lazy
approach.
## Testing
<!--- Please describe in detail how you tested your changes -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->
Tests are included. Additionally, I ran a reproducer for a user issues
to ensure that their use case works:
```
#[tokio::test]
async fn use_case_reproducer() {
tracing_subscriber::fmt::init();
let shared_config = aws_config::from_env()
.region(aws_sdk_cloudwatch::config::Region::new("us-west-2"))
.load()
.await;
let service_config = aws_sdk_cloudwatch::config::Config::from(&shared_config)
.to_builder()
.request_min_compression_size_bytes(1)
.build();
let client = Client::from_conf(service_config);
tracing::info!("sending metrics...");
client
.put_metric_data()
.namespace("CloudWatchTestMetricsBrivinc")
.metric_data(
aws_sdk_cloudwatch::types::MetricDatum::builder()
.metric_name(format!("MyMetricNameIsALittleLong"))
.value(0.0)
.build(),
)
.send()
.await
.unwrap();
}
```
----
_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._
---------
Co-authored-by:
ysaito1001 <awsaito@amazon.com>
Loading
Please register or sign in to comment