[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