Skip to content

chore: add backed reader, writer and pipe implementation #19147

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

ibetitsmike
Copy link
Contributor

@ibetitsmike ibetitsmike commented Aug 4, 2025

Fixes: #18101

This PR introduces a new backedpipe package that provides reliable bidirectional byte streams over unreliable network connections. The implementation includes:

  • BackedPipe: Orchestrates a reader and writer to provide transparent reconnection and data replay
  • BackedReader: Handles reading with automatic reconnection, blocking reads when disconnected
  • BackedWriter: Maintains a ring buffer of recent writes for replay during reconnection
  • RingBuffer: Efficient circular buffer implementation for storing data

The package enables resilient connections by tracking sequence numbers and replaying missed data after reconnection. It handles connection failures gracefully, automatically reconnecting and resuming data transfer from the appropriate point.

Copy link
Contributor Author

ibetitsmike commented Aug 4, 2025

@ibetitsmike ibetitsmike changed the title backed reader, writer and pipe implementation chore: add backed reader, writer and pipe implementation Aug 5, 2025
@ibetitsmike ibetitsmike force-pushed the mike/immortal-streams-backed-base branch from 9dd9c4a to 3223bf9 Compare August 5, 2025 08:46
@ibetitsmike ibetitsmike requested a review from spikecurtis August 5, 2025 09:36
@ibetitsmike ibetitsmike force-pushed the mike/immortal-streams-backed-base branch 2 times, most recently from d2ee08d to 27da7ef Compare August 7, 2025 11:18
@ibetitsmike ibetitsmike force-pushed the mike/immortal-streams-backed-base branch 2 times, most recently from e5be506 to 77e912f Compare August 12, 2025 12:32
Copy link
Contributor

@spikecurtis spikecurtis left a comment

Choose a reason for hiding this comment

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

Not done with my review, but taking a break and wanted to send you comments so far.

Copy link
Contributor

@spikecurtis spikecurtis left a comment

Choose a reason for hiding this comment

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

Another batch of comments.

I haven't really looked at BackedPipe yet, but I think maybe it would be better to wait for the comments I've made so far to be resolved.

require.NoError(t, err)
}

func TestBackedWriter_ConcurrentWrites(t *testing.T) {
Copy link
Contributor

Choose a reason for hiding this comment

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

The backed writer doesn't currently support concurrent writes (since it releases the mutex while writing).

But, it doesn't need to support writes concurrent with other writes --- we're only ever going to call write serially to send data we get from the reliable stream.

What we do need to care about is writes that are concurrent with Close and Reconnect.

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.

Indestructible IDE Connections (No disconnects when you re-open laptop)
2 participants