jedarden
56a9a93ac9
feat(hedging): implement tail-latency hedging for reads (§13.2, miroir-uhj.2)
Implements P5.2 hedged requests for tail-latency mitigation:
Core changes:
- Added execute_hedged_request() to scatter.rs with tokio::select! racing
primary vs hedge requests
- Hedge triggers at p95 * multiplier (default 1.2x) with min 15ms floor
- Intra-group alternate preferred, cross-group fallback when enabled
- Max hedges per query cap prevents thundering herd
- Applied to reads only: /search, /indexes/{uid}/documents, GET /documents/{id}
- Write operations bypass hedging entirely (architectural guarantee)
Components:
- HedgingConfig already existed in config/advanced.rs (enabled by default)
- HedgingManager already existed in hedging.rs with EWMA p95 tracking
- execute_hedged_request() integrates hedging into request execution flow
Tests:
- test_hedging_disabled: verifies no hedge when disabled
- test_hedging_fires_on_slow_primary: verifies hedge fires on slow primary
- test_hedging_respects_max_budget: verifies max_hedges_per_query enforced
- test_writes_never_hedge: architectural test that writes bypass hedging
- test_hedging_intra_group_alternate: verifies intra-group replica selection
- test_hedging_cross_group_fallback: verifies cross-group fallback when enabled
- test_hedging_cross_group_disabled: verifies cross-group disabled prevents fallback
- test_hedging_p95_multiplier: verifies deadline computation
- test_hedging_min_trigger: verifies minimum trigger time enforced
Metrics will be added in proxy layer (separate change).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>