smithy-rs/rust-runtime/aws-smithy-compression
Zelda Hessler 1cecc3baa6
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>
2024-09-18 17:06:58 +00:00
..
src Fix request compression (#3820) 2024-09-18 17:06:58 +00:00
test-data Add request compression runtime crate (#3627) 2024-05-08 09:26:19 -07:00
Cargo.toml Fix request compression (#3820) 2024-09-18 17:06:58 +00:00
LICENSE Add request compression runtime crate (#3627) 2024-05-08 09:26:19 -07:00
README.md Add request compression runtime crate (#3627) 2024-05-08 09:26:19 -07:00
external-types.toml Add request compression runtime crate (#3627) 2024-05-08 09:26:19 -07:00

README.md

aws-smithy-compression

Compression for HTTP request and response bodies.

This crate is part of the AWS SDK for Rust and the smithy-rs code generator. In most cases, it should not be used directly.