Skip to content

fix(account-pool): serialize concurrent credential refreshes - #3112

Closed
smsunarto wants to merge 2 commits into
get-bb:mainfrom
smsunarto:scott/pool-refresh-singleflight
Closed

fix(account-pool): serialize concurrent credential refreshes#3112
smsunarto wants to merge 2 commits into
get-bb:mainfrom
smsunarto:scott/pool-refresh-singleflight

Conversation

@smsunarto

@smsunarto smsunarto commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Human comments

What was wrong

When parallel requests needed a token refresh, they could refresh the same account twice and race token rotation, risking authentication failures that interrupt otherwise valid sessions.

What changed

Requests now share one refresh per account, so parallel work reuses the refreshed credential. Other accounts can continue independently.

How you verified

The duplicate-refresh regression fails before the fix and passes after. All 35 server tests, typecheck, lint, and formatting passed.

Fork branches are stacked; upstream PR diffs are cumulative.

AGENT GENERATED


This is part 1 of 4 in a stack made with GitButler:

SawyerHood pushed a commit that referenced this pull request Sep 5, 2026
## Human comments

## What was wrong

Conversations could switch accounts under load even while their current
account was healthy. Losing a warm prompt cache can increase uncached
input and latency. Child sessions also missed their parent’s account
affinity, and Codex session headers were dropped.

## What changed

Keep conversations on eligible accounts and let children inherit an
eligible parent’s account. A child can fail over independently. Preserve
native session headers, cache keys, and encrypted payloads so routing
does not unnecessarily disrupt cache reuse.

## How you verified

Quota tests cover failover, staying on the replacement account, and
recovery after all accounts exhaust. Both providers’ tests fail with
affinity disabled. All 229 plugin tests, typecheck, lint, and formatting
passed. Synthetic tests do not measure live cache improvement.

Fork branches are stacked; upstream PR diffs are cumulative.

<!-- GitButler Footer Boundary Top -->
---
This is **part 4 of 4 in a stack** made with GitButler:
- <kbd>&nbsp;4&nbsp;</kbd> #3117 👈 
- <kbd>&nbsp;3&nbsp;</kbd> #3116
- <kbd>&nbsp;2&nbsp;</kbd> #3115
- <kbd>&nbsp;1&nbsp;</kbd> #3112
<!-- GitButler Footer Boundary Bottom -->

> AGENT GENERATED
@SawyerHood

Copy link
Copy Markdown
Collaborator

Closing as already included in #3117, which was squash-merged into main as 4a5e755. Verified that this PR head is included in the top of the stack and that the merged tree matches that stack head. No additional merge is needed.

@SawyerHood SawyerHood closed this Sep 5, 2026
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