From 18a78e86c4791cb5ea92d96f7c2a38aeac7cb47c Mon Sep 17 00:00:00 2001 From: ARDA7787 <104717701+ARDA7787@users.noreply.github.com> Date: Sat, 16 May 2026 21:30:10 -0400 Subject: [PATCH 1/4] Fix jitter calculation in retry logic --- src/daft-io/src/retry.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/daft-io/src/retry.rs b/src/daft-io/src/retry.rs index 5762a070b0f..4539fa437b5 100644 --- a/src/daft-io/src/retry.rs +++ b/src/daft-io/src/retry.rs @@ -60,7 +60,7 @@ impl ExponentialBackoff { } let jitter = rand::rng() - .random_range(0..((1 << attempts) * self.jitter_ms)) + .random_range(0..(1u64.saturating_shl(attempts as u32) * self.jitter_ms)) .min(self.max_backoff_ms); tokio::time::sleep(Duration::from_millis(jitter)).await; From de64311a48722558580ce3de358da472c7ee40f1 Mon Sep 17 00:00:00 2001 From: ARDA7787 <104717701+ARDA7787@users.noreply.github.com> Date: Sat, 16 May 2026 21:41:31 -0400 Subject: [PATCH 2/4] Fix jitter calculation in retry logic --- src/daft-io/src/retry.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/daft-io/src/retry.rs b/src/daft-io/src/retry.rs index 4539fa437b5..5ce0d06774e 100644 --- a/src/daft-io/src/retry.rs +++ b/src/daft-io/src/retry.rs @@ -60,7 +60,7 @@ impl ExponentialBackoff { } let jitter = rand::rng() - .random_range(0..(1u64.saturating_shl(attempts as u32) * self.jitter_ms)) + .random_range(0..(1u64.saturating_shl(attempts as u32).saturating_mul(self.jitter_ms))) .min(self.max_backoff_ms); tokio::time::sleep(Duration::from_millis(jitter)).await; From a3b97da85ea571c934f7605bc19b4a604454f63b Mon Sep 17 00:00:00 2001 From: ARDA7787 Date: Wed, 20 May 2026 11:12:08 -0700 Subject: [PATCH 3/4] fix formatting --- src/daft-io/src/retry.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/daft-io/src/retry.rs b/src/daft-io/src/retry.rs index 5ce0d06774e..f070e973c6f 100644 --- a/src/daft-io/src/retry.rs +++ b/src/daft-io/src/retry.rs @@ -60,7 +60,11 @@ impl ExponentialBackoff { } let jitter = rand::rng() - .random_range(0..(1u64.saturating_shl(attempts as u32).saturating_mul(self.jitter_ms))) + .random_range( + 0..(1u64 + .saturating_shl(attempts as u32) + .saturating_mul(self.jitter_ms)), + ) .min(self.max_backoff_ms); tokio::time::sleep(Duration::from_millis(jitter)).await; From 90fef74a08a75cae41416845c790d201dfff4c78 Mon Sep 17 00:00:00 2001 From: ARDA7787 Date: Thu, 21 May 2026 08:26:01 -0700 Subject: [PATCH 4/4] fix(io): use checked_shl and saturating_mul in retry jitter calculation --- src/daft-io/src/retry.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/daft-io/src/retry.rs b/src/daft-io/src/retry.rs index f070e973c6f..c4a87aa8606 100644 --- a/src/daft-io/src/retry.rs +++ b/src/daft-io/src/retry.rs @@ -62,7 +62,8 @@ impl ExponentialBackoff { let jitter = rand::rng() .random_range( 0..(1u64 - .saturating_shl(attempts as u32) + .checked_shl(attempts as u32) + .unwrap_or(u64::MAX) .saturating_mul(self.jitter_ms)), ) .min(self.max_backoff_ms);