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

Introduce upstream stream send/recv min/max timeouts #225

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

Conversation

jessicayuen
Copy link
Member

@jessicayuen jessicayuen commented Jan 25, 2021

WIP/POC.

  • Add concept of upstream gRPC stream Send / Recv timeouts.
  • Send timeouts (from the proto):
      // Optional. Maximum timeout for blocked gRPC sends.
      // If this timeout is reached, the stream will be disconnected and re-opened.
      //
      // The value of gRPC send timeout is generally,
      // min(stream_timeout - stream_open_duration, stream_send_max_timeout)
      //
      // A stream_send_min_timeout buffer is added for short final send timeout values to prevent
      // scenarios where the stream deadline is reached too quickly. The complete accuracy of the
      // value is therefore,
      // stream send timeout = max(stream_send_min_timeout, min(stream_timeout - stream_open_duration, stream_send_max_timeout))
      //
      // If unset, the stream_timeout value is used.
      //
      // Examples:
      //
      // Ex 1:
      //   stream_timeout = 15m
      //   stream_send_max_timeout = 5m
      //   stream_send_min_timeout = 1m
      //   ... 1m in send blocks
      //       final send timeout = max(1m, min(15m - 1m, 5m)) = 5m
      //   ... 11m in send blocks
      //       final send timeout = max(1m, min(15m - 11m, 5m)) = 4m
      //   ... 14.5m in send blocks
      //       A 1m buffer is added for short final send timeout values to prevent scenarios where
      //       the stream deadline is reached too quickly.
      //       final send timeout = max(1m, min(15m - 14.5m, 5m)) = 1m
      //
      // Ex 2:
      //   stream_timeout = 5m
      //   stream_send_max_timeout = 10m
      //   stream_send_min_timeout = "" // not configured
      //   ... 1m in send blocks
      //       final send timeout = min(5m - 1m, 10m) = 4m
      //   ... 4m in send blocks
      //       final send timeout = min(5m - 4m, 10m) = 1m
      //   ... > 5m in send blocks will never occur because of the 5m stream timeout
      //
      // Ex 3:
      //   stream_timeout = "" // not configured
      //   stream_send_max_timeout = 5m
      //   stream_send_min_timeout = 4m
      //   ... in all send block scenarios,
      //       final send timeout = max(4m, 5m) = 5m
      //
      // Ex 4:
      //   stream_timeout = 10m
      //   stream_send_max_timeout = "" // not configured
      //   stream_send_min_timeout = 1m
      //   ... in all send block scenarios,
      //       final send timeout = max(1m, 10m) = 10m
      //
    
  • Introduce a NACK from xds-relay -> upstream server on gRPC Recv timeouts
    in the form of code 4, DEADLINE_EXCEEDED

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.

1 participant