Skip to content

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

Draft
jessicayuen wants to merge 2 commits intoenvoyproxy:mainfrom
jessicayuen:recv-timeout
Draft

Introduce upstream stream send/recv min/max timeouts#225
jessicayuen wants to merge 2 commits intoenvoyproxy:mainfrom
jessicayuen:recv-timeout

Conversation

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

Signed-off-by: Jess Yuen <jyuen@lyft.com>
Signed-off-by: Jess Yuen <jyuen@lyft.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.

1 participant