feat(http): add standard hedging handler - #136
Conversation
Provide one-line endpoint-aware hedging with isolated limiter and breaker state plus safe request replay.
Treat transport Unavailable as deadline-owned when the gRPC deadline has already expired, preserving terminal metadata.
|
Rebased onto #131 and resolved the standard-handler docs/guard overlap by preserving both APIs. The Windows failure reproduced locally as a real gRPC deadline race: TestServer can surface Unavailable after the deadline. Added deterministic coverage and normalized that expired transport status to DeadlineExceeded while preserving trailers. Release build, 685 unit tests, and 118 integration tests pass locally. |
418dbd3 to
28e64c6
Compare
|
Warning Review limit reached
Next review available in: 1 minute Limit details: You’ve used all 10 included reviews currently available. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (10)
Comment |
Closes #127.
What changed
AddStandardHedgingShieldand bindableStandardHedgingShieldOptionsValidation
dotnet build Kevlar.slnx -c Release --no-restoredotnet run --project tests/Kevlar.Tests -c Release --no-build -- --timeout 5m— 680 passeddotnet run --project tests/Kevlar.IntegrationTests -c Release --no-build -- --timeout 5m— 117 passednpm run buildindocs/Verify-Packages.ps1— layout, consumers, analyzers, trimmed and single-file publish passed; NativeAOT remains Linux-CI-onlyVerify-DocSnippets.ps1— 99 snippets compiled and documented behavior executedBenchmark
ShortRun, .NET 10, HTTP happy path: