Skip to content

Fix replay sequence reservation#5

Merged
DorianOuvrard merged 1 commit into
mainfrom
fix/replay-sequence-reservation
Jun 15, 2026
Merged

Fix replay sequence reservation#5
DorianOuvrard merged 1 commit into
mainfrom
fix/replay-sequence-reservation

Conversation

@DorianOuvrard

Copy link
Copy Markdown
Contributor

Summary

Fixes session replay sequence reservation so different replay payloads cannot upload with the same (sessionId, sequenceNumber).

Root Cause

The SDK previously advanced _sequenceNumber only after a successful fetch. A concurrent beforeunload/sendBeacon, reload, or oversized split could reuse the same sequence number for a different payload, especially seq=0 during replay startup.

Changes

  • Reserve and persist replay sequence numbers before upload.
  • Keep failed chunks as numbered retry payloads so exact retries reuse the same sequence number.
  • Make sendBeacon use the same reservation path as normal flushes.
  • Assign distinct sequence numbers to oversized split chunks.
  • Guard concurrent startReplay() calls before rrweb finishes loading.
  • Require the first chunk of a session to include a FullSnapshot.
  • Add regression tests for initial flush races, beacon during fetch, retries, oversized split, and idle restart.

Validation

  • npm run type-check
  • npm test

@DorianOuvrard DorianOuvrard merged commit 25a369e into main Jun 15, 2026
4 checks passed
@DorianOuvrard DorianOuvrard deleted the fix/replay-sequence-reservation branch June 15, 2026 17:56
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.

1 participant