Skip to content

Constructing an SDK client from Config::builder().<.....>.build() does not enable retries #1389

@rcoh

Description

@rcoh

Describe the bug

To reproduce: Construct a client, e.g. KMS from aws_sdk_kms::Config::builder().

Use a test like the following:

 let http_client = StaticReplayClient::new(vec![
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(500).body(SdkBody::from("hello test...")).unwrap(),
            ),
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(500).body(SdkBody::empty()).unwrap(),
            ),
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(200).body(SdkBody::from(r#"{"Plaintext":"cGxhaW50ZXh0"}"#)).unwrap(),
            ),
        ]);

Unless you explicitly set retry_config(<...>) on the config builder, retries are not enabled.

Regression Issue

  • Select this option if this issue appears to be a regression.

Expected Behavior

Retries are enabled, regardless of how a client is constructed.

Current Behavior

Retries are only enabled when constructing a client with aws-config

Reproduction Steps

 let http_client = StaticReplayClient::new(vec![
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(500).body(SdkBody::from("hello test...")).unwrap(),
            ),
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(500).body(SdkBody::empty()).unwrap(),
            ),
            ReplayEvent::new(
                http::Request::builder().uri("http://localhost").body(SdkBody::empty()).unwrap(),
                http::Response::builder().status(200).body(SdkBody::from(r#"..."#)).unwrap(),
            ),
        ]);
  let client = Client::from_conf(Config::builder().http_client(http_client).build());
  client.make_request().send().await

Possible Solution

No response

Additional Information/Context

No response

Version

│   │   ├── aws-sdk-kms v1.96.0
│   │   │   ├── aws-credential-types v1.2.10 (*)
│   │   │   ├── aws-runtime v1.5.16 (*)
│   │   │   ├── aws-smithy-async v1.2.6 (*)
│   │   │   ├── aws-smithy-http v0.62.5 (*)
│   │   │   ├── aws-smithy-json v0.61.7 (*)
│   │   │   ├── aws-smithy-runtime v1.9.4 (*)
│   │   │   ├── aws-smithy-runtime-api v1.9.2 (*)
│   │   │   ├── aws-smithy-types v1.3.4 (*)
│   │   │   ├── aws-types v1.3.10 (*)

Environment details (OS name and version, etc.)

n/a

Logs

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationThis is a problem with documentationfeature-requestA feature should be added or improved.p2This is a standard priority issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions