Skip to content

fix(typescript): sequence async websocket decompression to prevent ou… - #5845

Open
rohanranjan0902 wants to merge 1 commit into
clockworklabs:masterfrom
rohanranjan0902:fix-websocket-frame-ordering
Open

fix(typescript): sequence async websocket decompression to prevent ou…#5845
rohanranjan0902 wants to merge 1 commit into
clockworklabs:masterfrom
rohanranjan0902:fix-websocket-frame-ordering

Conversation

@rohanranjan0902

Copy link
Copy Markdown

Description of Changes

This PR fixes a bug in the TypeScript SDK where compressed WebSocket frames could be delivered out of order to the DbConnection.

Previously, WebsocketDecompressAdapter bound an async handler directly to ws.onmessage. Because decompression time scales with payload size, a small frame could finish decompressing before a larger frame that arrived earlier, resulting in out-of-order delivery and silent client cache corruption.

To fix this, this PR decouples the concurrent decompression step from the delivery callback by sequencing the deliveries through a Promise chain (tail). The decompression itself still occurs concurrently, but the hand-off to the SDK is strictly ordered by the socket arrival sequence.

Fixes #5730

API and ABI breaking changes

None. This is an internal fix to the WebSocket adapter.

Expected complexity level and risk

2

The change modifies the asynchronous delivery logic of the WebSocket adapter. While the logic is well-contained, Promise chaining can be a bit subtle. We made sure to properly handle rejections so that decompression errors (e.g. "Incomplete compressed input") don't surface as unhandled rejections and will still correctly close the socket.

Testing

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Rohan Ranjan Prasad seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

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.

TypeScript SDK: WebSocket frames are delivered out of order under compression, silently corrupting the client cache

2 participants