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
Copy link
Copy Markdown

@shubhamdhama shubhamdhama commented May 11, 2026

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
Copy link
Copy Markdown

@cthumuluru-crdb cthumuluru-crdb left a comment

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 added a commit to shubhamdhama/cockroach that referenced this pull request May 13, 2026
Bumps DRPC to pick up stream multiplexing from cockroachdb/drpc#58,
where a single transport connection can carry multiple concurrent
streams.

The multiplexing dial path is guarded by
COCKROACH_EXPERIMENTAL_DRPC_MUX_ENABLED, defaulted to false. With the
gate off, DialDRPC keeps using drpcpool, which checks out a connection
per active stream and dials a new one when none is idle. The upgraded
multiplexing-capable library is therefore exercised on every connection,
but the multiplexing capability itself stays unused: every stream still
ends up on its own underlying connection, matching the prior behavior.

This keeps the initial scope small. The dial-mux path is in place so
it can be turned on for validation, with a follow-up to flip the
default once we are confident.

Both paths now share the same dial-option setup, so the mux path also
picks up the client metrics and the request-recording gate that the
pool path was already attaching.

Release note: None
Epic: none
@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