From e888d7ec5a4f9330196ee1bb69eff902314ff8b3 Mon Sep 17 00:00:00 2001 From: Alpcan Ornek Date: Thu, 21 May 2026 10:28:06 +0200 Subject: [PATCH 1/2] fix(hedge): assert non-zero rotation period on construction --- tower/src/hedge/mod.rs | 9 +++++++++ tower/tests/hedge/main.rs | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/tower/src/hedge/mod.rs b/tower/src/hedge/mod.rs index 9698a9b7d..40cb124a8 100644 --- a/tower/src/hedge/mod.rs +++ b/tower/src/hedge/mod.rs @@ -97,6 +97,10 @@ impl Hedge { S::Error: Into, P: Policy + Clone, { + assert!( + period > Duration::ZERO, + "histogram rotation period must be greater than zero" + ); let histo = Arc::new(Mutex::new(RotatingHistogram::new(period))); Self::new_with_histo(service, policy, min_data_points, latency_percentile, histo) } @@ -116,6 +120,11 @@ impl Hedge { S::Error: Into, P: Policy + Clone, { + assert!( + period > Duration::ZERO, + "histogram rotation period must be greater than zero" + ); + let histo = Arc::new(Mutex::new(RotatingHistogram::new(period))); { let mut locked = histo.lock().unwrap(); diff --git a/tower/tests/hedge/main.rs b/tower/tests/hedge/main.rs index d4082ca2a..7448eeeee 100644 --- a/tower/tests/hedge/main.rs +++ b/tower/tests/hedge/main.rs @@ -182,3 +182,26 @@ fn new_service + Clone>(policy: P) -> (mock::Spawn (mock::Spawn::new(service), handle) } + +#[test] +#[should_panic(expected = "histogram rotation period must be greater than zero")] +fn hedge_new_with_mock_latencies_zero_period_panics() { + let (service, _handle) = tower_test::mock::pair::(); + let mock_latencies: [u64; 2] = [10, 20]; + + let _service = Hedge::new_with_mock_latencies( + service, + TestPolicy, + 10, + 0.9, + Duration::ZERO, + &mock_latencies, + ); +} +#[test] +#[should_panic(expected = "histogram rotation period must be greater than zero")] +fn hedge_new_zero_period_panics() { + let (service, _handle) = tower_test::mock::pair::(); + + let _service = Hedge::new(service, TestPolicy, 10, 0.9, Duration::ZERO); +} From 05446845a46f5596b295b8c57e1d0ab7b77e2219 Mon Sep 17 00:00:00 2001 From: Alpcan Ornek Date: Thu, 21 May 2026 16:35:35 +0200 Subject: [PATCH 2/2] docs(hedge): add explicit # Panics section to constructor --- tower/src/hedge/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tower/src/hedge/mod.rs b/tower/src/hedge/mod.rs index 40cb124a8..41276552d 100644 --- a/tower/src/hedge/mod.rs +++ b/tower/src/hedge/mod.rs @@ -85,6 +85,10 @@ pub struct SelectPolicy

{ impl Hedge { /// Create a new hedge middleware. + /// + /// # Panics + /// + /// Panics if `period` is zero. pub fn new( service: S, policy: P,