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

HTTPRoute Timeouts #2164

Open
mpstefan opened this issue Jun 20, 2024 · 1 comment
Open

HTTPRoute Timeouts #2164

mpstefan opened this issue Jun 20, 2024 · 1 comment
Labels
area/httproute/extended Relates to all extended features of HTTPRoute epic Represents an epic. Contains sub-issues
Milestone

Comments

@mpstefan
Copy link
Collaborator

mpstefan commented Jun 20, 2024

As a user of NGF
I want to specify timeouts per request for my HTTPRoutes
So that my client applications can get quick feedback that the request will not complete

Background:

NGINX provides the following directives for timeouts:

All of these timeouts are based on packet transfer to the upstream instead of the individual requests. As such, we will need to create an NJS module to support a "true" HTTP timeout that will time out individual requests based on the request itself instead of measuring when a packet was last received from the upstream for any request.

This feature is defined in the Gateway API here as an extended feature.

Acceptance

  • The user can define a "request" duration for a timeout in an HTTPRoute rule and functions as defined here:

    Request specifies the maximum duration for a gateway to respond to an HTTP request. If the gateway has not been able to respond before this deadline is met, the gateway MUST return a timeout error.

    For example, setting the rules.timeouts.request field to the value 10s in an HTTPRoute will cause a timeout if a client request is taking longer than 10 seconds to complete.

    Setting a timeout to the zero duration (e.g. “0s”) SHOULD disable the timeout completely. Implementations that cannot completely disable the timeout MUST instead interpret the zero duration as the longest possible value to which the timeout can be set.

    This timeout is intended to cover as close to the whole request-response transaction as possible although an implementation MAY choose to start the timeout after the entire request stream has been received instead of immediately after the transaction is initiated by the client.

    The value of Request is a Gateway API Duration string as defined by GEP-2257. When this field is unspecified, request timeout behavior is implementation-specific.

  • The user can define a "backendRequest" duration for a timeout in an HTTPRoute rule and functions as defined here:

    BackendRequest specifies a timeout for an individual request from the gateway to a backend. This covers the time from when the request first starts being sent from the gateway to when the full response has been received from the backend.

    Setting a timeout to the zero duration (e.g. “0s”) SHOULD disable the timeout completely. Implementations that cannot completely disable the timeout MUST instead interpret the zero duration as the longest possible value to which the timeout can be set.

    An entire client HTTP transaction with a gateway, covered by the Request timeout, may result in more than one call from the gateway to the destination backend, for example, if automatic retries are supported.

    The value of BackendRequest must be a Gateway API Duration string as defined by GEP-2257. When this field is unspecified, its behavior is implementation-specific; when specified, the value of BackendRequest must be no more than the value of the Request timeout (since the Request timeout encompasses the BackendRequest timeout).

@mpstefan mpstefan added area/nginx-configuration Relates to nginx configuration epic Represents an epic. Contains sub-issues labels Jun 20, 2024
@mpstefan mpstefan added this to the v2.4.0 milestone Jun 20, 2024
@mpstefan mpstefan modified the milestones: v2.3.0, v2.2.0 Aug 7, 2024
@mpstefan mpstefan modified the milestones: v2.3.0, v2.2.0 Sep 3, 2024
@mpstefan mpstefan changed the title Connection Timeouts HTTP Timeouts Sep 3, 2024
@chrisakker
Copy link

chrisakker commented Sep 11, 2024

None of these timeouts are packet based. They are all TCP connections, or HTTP request/response timeouts, and LB selection timeouts. For further review, read the actual text of the Directives that you linked to. There is no need for NJS, Nginx core does this by default.

@mpstefan mpstefan modified the milestones: v2.2.0, v2.3.0, v2.4.0, v2.5.0 Oct 10, 2024
@mpstefan mpstefan added area/httproute/extended Relates to all extended features of HTTPRoute and removed area/nginx-configuration Relates to nginx configuration labels Dec 16, 2024
@mpstefan mpstefan changed the title HTTP Timeouts HTTPRoute Timeouts Dec 16, 2024
@mpstefan mpstefan modified the milestones: v2.5.0, v2.0.0, v2.1.0 Dec 16, 2024
@mpstefan mpstefan modified the milestones: v2.1.0, v2.2.0 Jan 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/httproute/extended Relates to all extended features of HTTPRoute epic Represents an epic. Contains sub-issues
Projects
Status: 🆕 New
Development

No branches or pull requests

2 participants