[PATCH] proxy_cache_lock: Make lock timer configurable

Roy Teeuwen roy at teeuwen.be
Sat Apr 27 15:51:12 UTC 2024


Any update on getting this PR merged? I'm also facing the same issue

> On 21 Mar 2024, at 08:30, Nejc Lovrencic <nejc.lovrencic at gmail.com> wrote:
> 
> # HG changeset patch
> # User Nejc Lovrencic <nejc.lovrencic at gmail.com>
> # Date 1711005111 -3600
> #      Thu Mar 21 08:11:51 2024 +0100
> # Node ID 8d38e6642e82bb219bb5b586f1dcca5222a036e8
> # Parent  89bff782528a91ad123b63b624f798e6fd9c8e68
> proxy_cache_lock: Make lock timer configurable
> 
> Default timer is set to 500ms. This in a worst-case scenario adds 500ms latency to MISS requests. This commit adds proxy_cache_lock_wait_time directive, which makes the timer configurable.
> 
> diff -r 89bff782528a -r 8d38e6642e82 src/http/modules/ngx_http_proxy_module.c
> --- a/src/http/modules/ngx_http_proxy_module.c	Wed Feb 14 20:03:00 2024 +0400
> +++ b/src/http/modules/ngx_http_proxy_module.c	Thu Mar 21 08:11:51 2024 +0100
> @@ -592,6 +592,12 @@
>       offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock_age),
>       NULL },
> 
> +    { ngx_string("proxy_cache_lock_wait_time"),
> +      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
> +      ngx_conf_set_msec_slot,
> +      NGX_HTTP_LOC_CONF_OFFSET,
> +      offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock_wait_time),
> +      NULL },
>     { ngx_string("proxy_cache_revalidate"),
>       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
>       ngx_conf_set_flag_slot,
> @@ -3390,6 +3396,7 @@
>     conf->upstream.cache_lock = NGX_CONF_UNSET;
>     conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
>     conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
> +    conf->upstream.cache_lock_wait_time = NGX_CONF_UNSET_MSEC;
>     conf->upstream.cache_revalidate = NGX_CONF_UNSET;
>     conf->upstream.cache_convert_head = NGX_CONF_UNSET;
>     conf->upstream.cache_background_update = NGX_CONF_UNSET;
> @@ -3705,6 +3712,9 @@
>     ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
>                               prev->upstream.cache_lock_age, 5000);
> 
> +    ngx_conf_merge_msec_value(conf->upstream.cache_lock_wait_time,
> +                              prev->upstream.cache_lock_wait_time, 500);
> +
>     ngx_conf_merge_value(conf->upstream.cache_revalidate,
>                               prev->upstream.cache_revalidate, 0);
> 
> diff -r 89bff782528a -r 8d38e6642e82 src/http/ngx_http_cache.h
> --- a/src/http/ngx_http_cache.h	Wed Feb 14 20:03:00 2024 +0400
> +++ b/src/http/ngx_http_cache.h	Thu Mar 21 08:11:51 2024 +0100
> @@ -103,6 +103,7 @@
>     ngx_msec_t                       lock_timeout;
>     ngx_msec_t                       lock_age;
>     ngx_msec_t                       lock_time;
> +    ngx_msec_t                       lock_wait_time;
>     ngx_msec_t                       wait_time;
> 
>     ngx_event_t                      wait_event;
> diff -r 89bff782528a -r 8d38e6642e82 src/http/ngx_http_file_cache.c
> --- a/src/http/ngx_http_file_cache.c	Wed Feb 14 20:03:00 2024 +0400
> +++ b/src/http/ngx_http_file_cache.c	Thu Mar 21 08:11:51 2024 +0100
> @@ -452,7 +452,10 @@
> 
>     timer = c->wait_time - now;
> 
> -    ngx_add_timer(&c->wait_event, (timer > 500) ? 500 : timer);
> +    ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
> +                   "http file cache lock timer tm:%M lwt:%M", timer, c->lock_wait_time);
> +
> +    ngx_add_timer(&c->wait_event, (timer > c->lock_wait_time) ? c->lock_wait_time : timer);
> 
>     r->main->blocked++;
> 
> @@ -531,7 +534,7 @@
>     ngx_shmtx_unlock(&cache->shpool->mutex);
> 
>     if (wait) {
> -        ngx_add_timer(&c->wait_event, (timer > 500) ? 500 : timer);
> +        ngx_add_timer(&c->wait_event, (timer > c->lock_wait_time) ? c->lock_wait_time : timer);
>         return NGX_AGAIN;
>     }
> 
> diff -r 89bff782528a -r 8d38e6642e82 src/http/ngx_http_upstream.c
> --- a/src/http/ngx_http_upstream.c	Wed Feb 14 20:03:00 2024 +0400
> +++ b/src/http/ngx_http_upstream.c	Thu Mar 21 08:11:51 2024 +0100
> @@ -894,6 +894,7 @@
>         c->lock = u->conf->cache_lock;
>         c->lock_timeout = u->conf->cache_lock_timeout;
>         c->lock_age = u->conf->cache_lock_age;
> +        c->lock_wait_time = u->conf->cache_lock_wait_time;
> 
>         u->cache_status = NGX_HTTP_CACHE_MISS;
>     }
> diff -r 89bff782528a -r 8d38e6642e82 src/http/ngx_http_upstream.h
> --- a/src/http/ngx_http_upstream.h	Wed Feb 14 20:03:00 2024 +0400
> +++ b/src/http/ngx_http_upstream.h	Thu Mar 21 08:11:51 2024 +0100
> @@ -204,6 +204,7 @@
>     ngx_flag_t                       cache_lock;
>     ngx_msec_t                       cache_lock_timeout;
>     ngx_msec_t                       cache_lock_age;
> +    ngx_msec_t                       cache_lock_wait_time;
> 
>     ngx_flag_t                       cache_revalidate;
>     ngx_flag_t                       cache_convert_head;
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-devel


More information about the nginx-devel mailing list