fix: reject half-open delay exceeding the sliding window size#28
Merged
Conversation
SlidingWindowBreaker.apply silently clamped halfOpenDelay to windowSize whenever it was 0 OR greater than windowSize. Defaulting an unset (0) value is fine, but silently shrinking an explicit value (e.g. 30s -> 10s) discards the caller's configuration without any signal, violating least-astonishment. Keep defaulting the unset case, but return an error when an explicit halfOpenDelay exceeds windowSize (such a delay could never let the circuit go half-open, since the window expires and closes it first). This mirrors how EWMABreaker already rejects invalid half-open configuration loudly at construction. WithHalfOpenDelay and NewSlidingWindowBreaker docs are updated to describe the behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
SlidingWindowBreakernow returns an error when an explicithalfOpenDelayexceedswindowSize, instead of silently clamping it.Why
applyclamped towindowSizewhenever the delay was0or> windowSize. Defaulting an unset (0) value is reasonable, but silently shrinking an explicit30sto10sdiscards the caller's configuration with no signal — a least-astonishment violation. (EWMABreakeralready rejects invalid half-open config loudly.)How
0) still defaults towindowSize.> windowSizenow errors atNewCircuit(it could never let the circuit go half-open — the window expires and closes it first).WithHalfOpenDelayandNewSlidingWindowBreakerdocs updated.Notes
🤖 Generated with Claude Code