Skip to content

Commit c94eb76

Browse files
sanketkediaSanket Kedia
andauthored
[ENH]: Change retry rate limits in s3 client (#6917)
## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - Increases the token bucket capacity that s3 client uses for retries by 10x - Adds a token bucket fill rate of 1000 tokens / sec - New functionality - ... ## Test plan - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _None_ ## Observability plan _None_ ## Documentation Changes _None_ Co-authored-by: Sanket Kedia <sanketkedia@Sankets-MacBook-Pro.local>
1 parent a760f7e commit c94eb76

2 files changed

Lines changed: 30 additions & 5 deletions

File tree

rust/storage/src/config.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ pub struct S3StorageConfig {
104104
pub upload_part_size_bytes: usize,
105105
#[serde(default = "S3StorageConfig::default_download_part_size_bytes")]
106106
pub download_part_size_bytes: usize,
107+
#[serde(default = "S3StorageConfig::default_retry_token_bucket_capacity")]
108+
pub retry_token_bucket_capacity: usize,
109+
#[serde(default = "S3StorageConfig::default_retry_token_refill_rate")]
110+
pub retry_token_refill_rate: f32,
107111
}
108112

109113
impl S3StorageConfig {
@@ -147,6 +151,14 @@ impl S3StorageConfig {
147151
fn default_download_part_size_bytes() -> usize {
148152
8 * 1024 * 1024
149153
}
154+
155+
fn default_retry_token_bucket_capacity() -> usize {
156+
5000
157+
}
158+
159+
fn default_retry_token_refill_rate() -> f32 {
160+
1000.0
161+
}
150162
}
151163

152164
impl Default for S3StorageConfig {
@@ -163,6 +175,8 @@ impl Default for S3StorageConfig {
163175
stall_upload_enabled: S3StorageConfig::default_stall_upload_enabled(),
164176
upload_part_size_bytes: S3StorageConfig::default_upload_part_size_bytes(),
165177
download_part_size_bytes: S3StorageConfig::default_download_part_size_bytes(),
178+
retry_token_bucket_capacity: S3StorageConfig::default_retry_token_bucket_capacity(),
179+
retry_token_refill_rate: S3StorageConfig::default_retry_token_refill_rate(),
166180
}
167181
}
168182
}

rust/storage/src/s3.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use async_trait::async_trait;
1717
use aws_config::retry::RetryConfig;
1818
use aws_config::timeout::TimeoutConfigBuilder;
1919
use aws_sdk_s3;
20+
use aws_sdk_s3::config::retry::{RetryPartition, TokenBucket};
2021
use aws_sdk_s3::config::StalledStreamProtectionConfig;
2122
use aws_sdk_s3::error::ProvideErrorMetadata;
2223
use aws_sdk_s3::error::SdkError;
@@ -1194,6 +1195,15 @@ impl Configurable<StorageConfig> for S3Storage {
11941195
let retry_config =
11951196
RetryConfig::standard().with_max_attempts(s3_config.request_retry_count);
11961197

1198+
let retry_partition = RetryPartition::custom("chroma-s3")
1199+
.token_bucket(
1200+
TokenBucket::builder()
1201+
.capacity(s3_config.retry_token_bucket_capacity)
1202+
.refill_rate(s3_config.retry_token_refill_rate)
1203+
.build(),
1204+
)
1205+
.build();
1206+
11971207
let client = match &s3_config.credentials {
11981208
super::config::S3CredentialsConfig::Minio
11991209
| super::config::S3CredentialsConfig::Localhost => {
@@ -1228,14 +1238,14 @@ impl Configurable<StorageConfig> for S3Storage {
12281238
aws_sdk_s3::Client::from_conf(config)
12291239
}
12301240
super::config::S3CredentialsConfig::AWS => {
1231-
let config = aws_config::load_from_env().await;
1232-
let config = config
1233-
.to_builder()
1241+
let sdk_config = aws_config::load_from_env().await;
1242+
let config = aws_sdk_s3::config::Builder::from(&sdk_config)
12341243
.timeout_config(timeout_config)
12351244
.stalled_stream_protection(stalled_config)
12361245
.retry_config(retry_config)
1246+
.retry_partition(retry_partition)
12371247
.build();
1238-
aws_sdk_s3::Client::new(&config)
1248+
aws_sdk_s3::Client::from_conf(config)
12391249
}
12401250
super::config::S3CredentialsConfig::Explicit {
12411251
access_key_id,
@@ -1258,7 +1268,8 @@ impl Configurable<StorageConfig> for S3Storage {
12581268
.region(aws_sdk_s3::config::Region::new(region.clone()))
12591269
.timeout_config(timeout_config)
12601270
.stalled_stream_protection(stalled_config)
1261-
.retry_config(retry_config);
1271+
.retry_config(retry_config)
1272+
.retry_partition(retry_partition);
12621273

12631274
if let Some(url) = custom_endpoint {
12641275
config_builder =

0 commit comments

Comments
 (0)