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

Event stream protocol implementation #121

Open
12 of 27 tasks
rcoh opened this issue Jan 13, 2021 · 0 comments
Open
12 of 27 tasks

Event stream protocol implementation #121

rcoh opened this issue Jan 13, 2021 · 0 comments
Labels
Milestone

Comments

@rcoh
Copy link
Collaborator

rcoh commented Jan 13, 2021

  • Event Stream frame encoding/decoding (Implement Event Stream message frame ser/de in smithy-eventstream #609)
  • http::Response -> operation::Response refactoring in smithy-http (Refactor middleware to use new operation::Response instead of http::Response<SdkBody> #635)
  • Refactor sigv4 to sign arbitrary data rather than http::Request
  • Track the initial signature in the property bag
  • Rust implementation for Event Stream sender in input
  • Rust implementation for Event Stream receiver in output
  • Codegen
    • Event Stream input sender w/ signing
    • Event Stream output receiver
    • Event Stream traits
    • Selection of HTTP protocol version via Smithy traits (e.g., @restXml)
      • Current service models aren't using these correctly, and some operations actually require HTTP 1 for bidirectional event streaming
      • For now: error out if there's an operation that doesn't specify HTTP 2 for bidirectional streaming, and customize models for known bad operations to specify HTTP 2
    • Events marked with @error are terminal; should filter them out of the event stream union and handle them as actual SdkErrors
    • Make Event Stream recv() errors compatible with other SdkErrors when using the ? operator
    • Non-HTTP bound protocols like AWS JSON send initial members as a struct embedded in a first event frame
    • Generate new error type for Event Stream recv() since it's not 1-to-1 with the operation errors
  • Testing
    • Record bidirectional traffic against all supported protocols:
      • restJson1
      • awsJson1 and awsJson1_1
      • awsQuery
      • ec2Query
      • restXml
    • Exercise all event stream header types
    • Exercise all event stream payload types (blob, string, struct, union)
    • Write replay tests
  • Test the developer experience when the Event Stream input stream yields an error (where does the error go?)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants