[PATCH] Asynchronous close event handling for single peer upstreams
J Carter
jordanc.carter at outlook.com
Fri May 12 00:11:34 UTC 2023
On Sun, 7 May 2023 21:55:19 +0100
J Carter <jordanc.carter at outlook.com> wrote:
> # HG changeset patch
> # User jordanc.carter at outlook.com
> # Date 1683491710 -3600
> # Sun May 07 21:35:10 2023 +0100
> # Node ID e1ec9971da677b763c7576c729576d6f906631ae
> # Parent b71e69247483631bd8fc79a47cc32b762625b1fb
> Asynchronous close event handling for single peer upstreams
>
> Prevents additional upstream tries when consecutive asynchronous close
> errors are encountered for single peer upstreams utilizing keepalive
> connections.
>
> This replaces the current behavior of unlimited retries.
>
> diff -r b71e69247483 -r e1ec9971da67 src/event/ngx_event_connect.h
> --- a/src/event/ngx_event_connect.h Mon May 01 19:16:05 2023
> +0400 +++ b/src/event/ngx_event_connect.h Sun May 07 21:35:10
> 2023 +0100 @@ -17,6 +17,7 @@
> #define NGX_PEER_KEEPALIVE 1
> #define NGX_PEER_NEXT 2
> #define NGX_PEER_FAILED 4
> +#define NGX_PEER_ASYNC_FAILED 8
>
>
> typedef struct ngx_peer_connection_s ngx_peer_connection_t;
> @@ -64,6 +65,7 @@
> unsigned transparent:1;
> unsigned so_keepalive:1;
> unsigned down:1;
> + unsigned async_failed:1;
>
> /* ngx_connection_log_error_e */
> unsigned log_error:2;
> diff -r b71e69247483 -r e1ec9971da67 src/http/ngx_http_upstream.c
> --- a/src/http/ngx_http_upstream.c Mon May 01 19:16:05 2023
> +0400 +++ b/src/http/ngx_http_upstream.c Sun May 07 21:35:10
> 2023 +0100 @@ -4317,6 +4317,9 @@
> {
> state = NGX_PEER_NEXT;
>
> + } else if (u->peer.cached && ft_type ==
> NGX_HTTP_UPSTREAM_FT_ERROR) {
> + state = NGX_PEER_FAILED | NGX_PEER_ASYNC_FAILED;
> +
> } else {
> state = NGX_PEER_FAILED;
> }
> @@ -4330,11 +4333,6 @@
> "upstream timed out");
> }
>
> - if (u->peer.cached && ft_type == NGX_HTTP_UPSTREAM_FT_ERROR) {
> - /* TODO: inform balancer instead */
> - u->peer.tries++;
> - }
> -
> switch (ft_type) {
>
> case NGX_HTTP_UPSTREAM_FT_TIMEOUT:
> diff -r b71e69247483 -r e1ec9971da67
> src/http/ngx_http_upstream_round_robin.c ---
> a/src/http/ngx_http_upstream_round_robin.c Mon May 01 19:16:05
> 2023 +0400 +++ b/src/http/ngx_http_upstream_round_robin.c Sun
> May 07 21:35:10 2023 +0100 @@ -623,6 +623,12 @@
> ngx_http_upstream_rr_peers_unlock(rrp->peers);
> pc->tries = 0;
> +
> + if (state & NGX_PEER_ASYNC_FAILED && !pc->async_failed) {
> + pc->async_failed = 1;
> + pc->tries = 1;
> + }
> +
> return;
> }
Hello,
any opinions or suggestions for this patch?
More information about the nginx-devel
mailing list