Skip to content

drpc: enable stream multiplexing#58

Merged
shubhamdhama merged 1 commit into
cockroachdb:mainfrom
shubhamdhama:stream-multiplexing-to-main
May 14, 2026
Merged

drpc: enable stream multiplexing#58
shubhamdhama merged 1 commit into
cockroachdb:mainfrom
shubhamdhama:stream-multiplexing-to-main

Conversation

@shubhamdhama

@shubhamdhama shubhamdhama commented May 11, 2026

Copy link
Copy Markdown

Squashed result of the upstream/stream-multiplexing branch. See the merged PRs for granular history:

A connection now runs multiple concurrent client and server streams over a single transport. Frames carry stream IDs and are interleaved on the wire by a shared MuxWriter. Each stream owns its own packet ring buffer, Finished signal, and goroutine, and the manager tracks live streams in an activeStreams registry.

New: drpcwire.MuxWriter, drpcwire.PacketAssembler, drpcstream.ringBuffer, drpcmanager.activeStreams.

Removed: the drpccache package, drpcwire/writer (now MuxWriter), drpcstream/pktbuf (now ringBuffer), drpcmanager/streambuf (now activeStreams), drpcmanager.Options.InactivityTimeout, and the drpcconn shared write buffer plus stats infrastructure (CollectStats, Stats, drpcstats wiring).

Squashed result of the upstream stream-multiplexing branch. See the
merged PRs for granular history:

- cockroachdb#39 drpcmanager: fix race between manageReader and stream creation
- cockroachdb#42 *: move frame assembly from reader to stream
- cockroachdb#43 *: extract PacketAssembler for frame-to-packet assembly
- cockroachdb#44 drpcmanager: replace manageStreams loop with per-stream goroutines
- cockroachdb#45 *: use per-stream Finished signal instead of shared sfin channel
- cockroachdb#46 drpcmanager: use atomic counter for client stream ID generation
- cockroachdb#47 drpcmanager: replace streamBuffer with a streams registry
- cockroachdb#51 drpc: enable stream multiplexing

A connection now runs multiple concurrent client and server streams
over a single transport. Frames carry stream IDs and are interleaved
on the wire by a shared MuxWriter. Each stream owns its own packet
ring buffer, Finished signal, and goroutine, and the manager tracks
live streams in an activeStreams registry.

New: drpcwire.MuxWriter, drpcwire.PacketAssembler,
drpcstream.ringBuffer, drpcmanager.activeStreams.

Removed: the drpccache package, drpcwire/writer (now MuxWriter),
drpcstream/pktbuf (now ringBuffer), drpcmanager/streambuf (now
activeStreams), drpcmanager.Options.InactivityTimeout, and the
drpcconn shared write buffer plus stats infrastructure (CollectStats,
Stats, drpcstats wiring).
@cthumuluru-crdb cthumuluru-crdb self-requested a review May 12, 2026 15:16

@cthumuluru-crdb cthumuluru-crdb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since all these changes are previously reviewed on the stream multiplexing branch you can proceed with the commit. LGTM!

@shubhamdhama shubhamdhama merged commit bea82b2 into cockroachdb:main May 14, 2026
4 checks passed
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.

rpc/drpc: merge stream multiplexing into DRPC main

2 participants