vercel-flags-core: jitter ingest retries and batch-wait window#371
Merged
vincent-derks merged 1 commit intomainfrom May 6, 2026
Merged
vercel-flags-core: jitter ingest retries and batch-wait window#371vincent-derks merged 1 commit intomainfrom
vincent-derks merged 1 commit intomainfrom
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
AndyBitz
approved these changes
May 6, 2026
13bf56b to
e3f2fff
Compare
Replace the deterministic 100/200ms retry schedule with full-jitter exponential backoff, jitter MAX_BATCH_WAIT_MS by ±20% to desynchronize concurrent flushes, and log when a flush exhausts all retries. Helpers extracted to utils/backoff.ts so they can be reused. Co-authored-by: Cursor <cursoragent@cursor.com>
e3f2fff to
b48e5b8
Compare
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.
Summary
The usage tracker's
/v1/ingestretry path used a deterministic 100/200ms schedule with no jitter, and the 5s batch-wait window was likewise unjittered. Concurrent processes that started at the same moment would all flush together and, on a non-2xx, retry in lockstep — amplifying transient pressure.Changes
delay = random(0, base * 2^(attempt-1)), capped at 5s). Replaces the previousattempt * 100ms schedule.MAX_BATCH_WAIT_MSis perturbed by ±20% on every flush so independent processes don't flush at the same wall-clock instant.Test plan
utils/backoff.test.tscovering exponential ceiling, custombaseMs/capMs, and the symmetric jitter bounds.utils/usage-tracker.test.tsfor the exhaustion log and no-exhaustion-on-success.pnpm --filter @vercel/flags-core test→ all pass.pnpm --filter @vercel/flags-core check→ clean.