feat(processing): add distributed session coordination (closes #216)#303
Merged
Xhristin3 merged 1 commit intoJun 20, 2026
Merged
Conversation
) Wire a LockManager in front of SessionRegistry so two worker pods never process the same stream concurrently. Two backends ship: - MemoryLockManager (default, per-process) — keeps unit + integration tests deterministic without a DB. - PostgresLockManager — fronts a stream_locks table with a single atomic UPSERT for acquisition, a guarded UPDATE for heartbeat renewals, and deletes on release. Locks are acquired before the placeholder session is exposed in the local map; each lock is heartbeated at TTL/3 ms; a lost renewal fails the session so the stream can be picked up by another worker once the TTL elapses. Closes XStreamRollz#216
Xhristin3
approved these changes
Jun 20, 2026
Xhristin3
left a comment
Contributor
There was a problem hiding this comment.
Big change, but the abstraction (memory vs postgres backends behind one LockManager interface) is clean, and the new tests cover both. The pnpm-lock bump matches the new pg dependency. Approving and merging.
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.
Implements #216.
When horizontally scaling the worker, two pods polling the API in parallel would otherwise register StreamSessions for the same streamId and double-publish every event. This change wires a LockManager in front of SessionRegistry so each stream is claimed atomically before a session is created.
Two backends ship:
Notes
Verification
Closes #216