Skip to content

fix(proxy): switch selector on every set-aside kind, not quota only - #15140

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.52from
maxmad64bis:fix/selector-setaside-switch
Oct 2, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.52from
maxmad64bis:fix/selector-setaside-switch

Conversation

@maxmad64bis

@maxmad64bis maxmad64bis commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ base-red inherited: #15306

Summary

A pool member set aside for a transport failure or a slow response kept serving its selector group. Only quota refusals steered the local core selector away. Every set-aside now steers the selector to a live member.

Related Issues

Validation

  • Change type: provider
  • Focused tests and category gates from the golden path
  • npm run lint — ESLint on the touched files is clean; the full run is red on the base (🔴 Release branch not green: release/v3.8.52 #15306)
  • Reconciled with the current active release base; focused checks rerun afterward
  • Production-code changes include a new or updated automated test in this PR

Tests Added Or Updated

  • tests/unit/proxySubscription.selectorTransition.test.ts (new, 5 tests: collapsed quota double trigger, gap-window refusal, one switch per transport/slow kind with kind-observable member memory, idempotent registration, end-to-end transport flip)
  • tests/unit/proxySubscription.selectorTrigger.test.ts, selectorMemberMemory, selectorWarning, selectorFunctional (existing, green)

Coverage Notes

  • src/lib/proxySubscription/selectorTrigger.ts — covered by proxySubscription.selectorTransition.test.ts and proxySubscription.selectorTrigger.test.ts
  • src/lib/proxySubscription/proxyTransitionSubscriber.ts — covered by proxySubscription.selectorTransition.test.ts
  • src/instrumentation-node.ts — wiring only, covered indirectly by proxySubscription.selectorTransition.test.ts
  • src/sse/handlers/proxyOutcomeMemory.ts — unchanged (synchronous quota path kept as-is)

Reviewer Notes

@maxmad64bis
maxmad64bis force-pushed the fix/selector-setaside-switch branch from 9a92eb4 to 7b17a62 Compare September 29, 2026 20:26
@maxmad64bis
maxmad64bis force-pushed the fix/selector-setaside-switch branch from 7b17a62 to 0421bfc Compare September 29, 2026 21:03
@maxmad64bis
maxmad64bis marked this pull request as ready for review September 29, 2026 21:05
Why: a pool member set aside for a transport or slow refusal kept
serving its selector group; only quota (429) refusals steered the
local core selector away.

What: subscribe to set-aside transitions and drive the existing
switch trigger with the real refusal kind; the synchronous quota
path is kept as-is and both share one throttle slot per
(subscription, selector), so a quota refusal still switches once.
The trigger records the live member under the received kind.

Tests: transition suite covers the collapsed quota double trigger,
the gap-window refusal, one switch per transport/slow kind with
kind-observable member memory, idempotent registration and an
end-to-end transport flip.

Docs: changelog fragment in changelog.d/fixes.

Do not: change display wiring; touch budgets or delays; remove
local scripts.
@maxmad64bis
maxmad64bis force-pushed the fix/selector-setaside-switch branch from 0421bfc to ee07b68 Compare September 30, 2026 00:08
@diegosouzapw
diegosouzapw merged commit f802445 into diegosouzapw:release/v3.8.52 Oct 2, 2026
11 of 16 checks passed
@diegosouzapw

Copy link
Copy Markdown
Owner

Thanks @maxmad64bis — merged into release/v3.8.52; it ships in the next release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants