[PATCH] Upstream: limited next_upstream time and tries when resolving DNS

Ruslan Ermilov ru at nginx.com
Mon Oct 27 11:41:39 UTC 2014


On Mon, Oct 27, 2014 at 03:27:03PM +0800, Gu Feng wrote:
> # HG changeset patch
> # User Gu Feng <flygoast at 126.com>
> # Date 1414394704 -28800
> #      Mon Oct 27 15:25:04 2014 +0800
> # Node ID a7d62f0f3000d156477f556e5cb307f229fe6301
> # Parent  973fded4f461f3a397779b3a1dc80881b1b34974
> Upstream: limited next_upstream time and tries when resolving DNS.
> 
> When got multiple upstream IP addresses using DNS resolving, the number of
> upstreams tries and the maxinum time spent for these tries were not affected.
> This patch fixed it.
> 
> diff -r 973fded4f461 -r a7d62f0f3000 src/http/ngx_http_upstream.c
> --- a/src/http/ngx_http_upstream.c	Wed Oct 15 22:57:23 2014 +0400
> +++ b/src/http/ngx_http_upstream.c	Mon Oct 27 15:25:04 2014 +0800
> @@ -613,6 +613,14 @@ ngx_http_upstream_init_request(ngx_http_
>                  return;
>              }
>  
> +            u->peer.start_time = ngx_current_msec;
> +
> +            if (u->conf->next_upstream_tries
> +                && u->peer.tries > u->conf->next_upstream_tries)
> +            {
> +                u->peer.tries = u->conf->next_upstream_tries;
> +            }
> +
>              ngx_http_upstream_connect(r, u);
>  
>              return;

This part of the patch shouldn't be necessary - it's for the
case when upstream is defined using variables but defines a
single IP literal.

> @@ -974,6 +982,14 @@ ngx_http_upstream_resolve_handler(ngx_re
>      ngx_resolve_name_done(ctx);
>      ur->ctx = NULL;
>  
> +    u->peer.start_time = ngx_current_msec;
> +
> +    if (u->conf->next_upstream_tries
> +        && u->peer.tries > u->conf->next_upstream_tries)
> +    {
> +        u->peer.tries = u->conf->next_upstream_tries;
> +    }
> +
>      ngx_http_upstream_connect(r, u);
>  
>  failed:



More information about the nginx-devel mailing list