Skip to content
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

[protocol v2] RFC PROTOCOL V2 #111

Merged
merged 27 commits into from
May 17, 2024
Merged

[protocol v2] RFC PROTOCOL V2 #111

merged 27 commits into from
May 17, 2024

Conversation

masad-frost
Copy link
Member

@masad-frost masad-frost commented May 9, 2024

Why

Currently half-closes initiated by the server are not documented and sort of undefined behavior in the implementation. This is critical to adding INVALID_REQUEST errors.

What changed

  • Document Error type more explicitly
  • Document Result type more explicitly
  • Document Control type more explicitly
  • Propose protocol errors
  • Proposed changes for server initiated closes
    • These can either be normal closure or a protocol error closure
  • Document reader and writer semantics

The changes should be somewhat backwards compatible, existing servers should be able to serve new clients with the exception of server initiated closes/protocol errors, I don't anticipate us needing to do a crazy migration to handle these changes.

Versioning

  • Breaking protocol change
  • Breaking ts/js API change

@masad-frost masad-frost requested a review from a team as a code owner May 9, 2024 19:55
@masad-frost masad-frost requested review from bradymadden97 and removed request for a team May 9, 2024 19:55
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
PROTOCOL.md Outdated Show resolved Hide resolved
masad-frost and others added 3 commits May 9, 2024 14:43
Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
PROTOCOL.md Outdated Show resolved Hide resolved
@masad-frost masad-frost changed the title RFC PROTOCOL V2 (with errors and one way close) RFC PROTOCOL V2 (with errors and server initiated closes) May 10, 2024
@masad-frost
Copy link
Member Author

masad-frost commented May 10, 2024

@jackyzha0 @lhchavez I updated the document and the PR description. We now allow half-closes, mostly convinced by the fact that uploads are kinda wonky without 2 way close, adding another control message or flag for that didn't feel right.

@masad-frost masad-frost changed the base branch from main to protocolv2 May 11, 2024 01:34
PROTOCOL.md Outdated

`Control` is a payload that is wrapped with `TransportMessage`.

??? TODO Faris: there's no differentiation between a `Control` in the protocol and an `Input` message with the the same schema. Yikes. Should probably fix this in this protocol bump.
Copy link
Member Author

Choose a reason for hiding this comment

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

Resolved on slack
image

Suggested change
??? TODO Faris: there's no differentiation between a `Control` in the protocol and an `Input` message with the the same schema. Yikes. Should probably fix this in this protocol bump.

@masad-frost masad-frost changed the title RFC PROTOCOL V2 (with errors and server initiated closes) [protocol v2] RFC PROTOCOL V2 (with errors and server initiated closes) May 11, 2024
@masad-frost masad-frost changed the title [protocol v2] RFC PROTOCOL V2 (with errors and server initiated closes) [protocol v2] RFC PROTOCOL V2 May 16, 2024
@masad-frost masad-frost merged commit f86f5a9 into protocolv2 May 17, 2024
3 checks passed
@masad-frost masad-frost deleted the fm-protocol-v2 branch May 17, 2024 23:55
masad-frost added a commit that referenced this pull request May 18, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
This was referenced May 19, 2024
masad-frost added a commit that referenced this pull request May 21, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request May 21, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request May 29, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request May 31, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Jun 6, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Jun 11, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Jun 13, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Jun 20, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Jun 24, 2024
* Update PROTOCOL.md

* Update PROTOCOL.md

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>

* Update PROTOCOL.md

* half-close semantics

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* fmt

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Update PROTOCOL.md

* Include reader-writer semantics

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
masad-frost added a commit that referenced this pull request Aug 16, 2024
All the changes are documented in `Protocol.md` but here's a summary:
- Handle invalid client requests by sending a close with an error back
- This was the main motivation for the change. While we could sort-of
implement this error response without the other changes, things are
setup in such a way where it is very hard to implement correctly without
deeper changes in how we handle closing.
- Add more robust closing mechanics
  - Half-close states
  - Close signals from read end of the pipes
  - Abort full-closure (for errors and cancellation)
- Switch from `Pushable` and `AsyncIterator` APIs to a `ReadStream` and
`WriteStream`
- All procedures have `init` and some have `input`

While the changes are not strictly backwards compatible, hence the major
protocol bump, the system can still operate across versions to some
extent.

See PRs linked below for more information on the above

# TODOs
- [x] Define protocol and update doc #111 
- [x] Design stream abstractions #118 
  - [x] Redsigned in #249 
- [x] Implement stream abstractions
  - [x] ReadStream #130
  - [x] WriteStream #132
- [x] All streams have init, some have input.
  - [x] Protocol change documented in #153
  - [x] Implementation change #159  
- [x] Use stream abstractions & implement protocol closing semantics
  - [x] Protocol: Implement close requests from readers #165 
  - [x] Protocol: Implement half-close
    - [x] Client #162 
    - [x] Server #163 
  - [x] Simple s/Pushable/Stream replacement
    - [x] Client #136 
    - [x] Server #137 
- [x] Make `Input` iterator on the server use `Result` so we can signal
stream closes, client disconnects, and aborts #172
- [x] Add Abort mechanism
  - [x] Docs update #175
  - [x] Implement abort
    - [x] Client #193
    - [x] Server #200
  - [x] Add `INVALID_REQUEST` to schema #107
- [x] Handle/send back `INVALID_REQUEST` errors with an abort bit #203
  - [x] Handle/send back `INTERNAL_RIVER_ERROR` with an abort bit #203 
  - [x] Send abort bit with `UNCAUGHT_ERROR` #201 
  - [x] Abort tombstones #204

- [ ] Try to find uncovered areas to test
   - [ ] `undefined` value for `init`, `input`, & `output`. 
- [ ] Update docs
- [ ] Changelog

---------

Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
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.

3 participants