<div dir="ltr"># HG changeset patch<br># User Yugo Horie <<a href="mailto:u5.horie@gmail.com">u5.horie@gmail.com</a>><br># Date 1696144340 -32400<br>#      Sun Oct 01 16:12:20 2023 +0900<br># Node ID f8f6290d60615a4dfe2d8b26246891228f19aa5d<br># Parent  3db945fda515014d220151046d02f3960bcfca0a<br>Fixed stucking cache status into UPDATING.<br><br>Fixed issue-2162's stucking cache status to<br>introduce `last_updating_time` to record at<br>the time to start the item last update.<br><a href="https://trac.nginx.org/nginx/ticket/2162#comment:6">https://trac.nginx.org/nginx/ticket/2162#comment:6</a><br><br>diff -r 3db945fda515 -r f8f6290d6061 src/http/modules/ngx_http_proxy_module.c<br>--- a/src/http/modules/ngx_http_proxy_module.c  Fri Sep 22 19:23:57 2023 +0400<br>+++ b/src/http/modules/ngx_http_proxy_module.c  Sun Oct 01 16:12:20 2023 +0900<br>@@ -564,6 +564,13 @@<br>       offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_use_stale),<br>       &ngx_http_proxy_next_upstream_masks },<br><br>+    { ngx_string("proxy_cache_updating_timeout"),<br>+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,<br>+      ngx_conf_set_msec_slot,<br>+      NGX_HTTP_LOC_CONF_OFFSET,<br>+      offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_updating_timeout),<br>+      NULL },<br>+<br>     { ngx_string("proxy_cache_methods"),<br>       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,<br>       ngx_conf_set_bitmask_slot,<br>@@ -3388,6 +3395,7 @@<br>     conf->upstream.no_cache = NGX_CONF_UNSET_PTR;<br>     conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;<br>     conf->upstream.cache_lock = NGX_CONF_UNSET;<br>+    conf->upstream.cache_updating_timeout = NGX_CONF_UNSET_MSEC;<br>     conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;<br>     conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;<br>     conf->upstream.cache_revalidate = NGX_CONF_UNSET;<br><div>diff -r 3db945fda515 -r f8f6290d6061 src/http/ngx_http_cache.h<br>--- a/src/http/ngx_http_cache.h Fri Sep 22 19:23:57 2023 +0400<br>+++ b/src/http/ngx_http_cache.h Sun Oct 01 16:12:20 2023 +0900<br>@@ -59,6 +59,7 @@<br>     size_t                           body_start;<br>     off_t                            fs_size;<br>     ngx_msec_t                       lock_time;<br>+    ngx_msec_t                       last_updating_time;<br> } ngx_http_file_cache_node_t;<br><br><br>@@ -122,6 +123,8 @@<br><br>     unsigned                         stale_updating:1;<br>     unsigned                         stale_error:1;<br>+<br>+    ngx_msec_t                       updating_timeout;<br> };<br>diff -r 3db945fda515 -r f8f6290d6061 src/http/ngx_http_file_cache.c<br>--- a/src/http/ngx_http_file_cache.c    Fri Sep 22 19:23:57 2023 +0400<br>+++ b/src/http/ngx_http_file_cache.c    Sun Oct 01 16:12:20 2023 +0900<br>@@ -643,6 +643,10 @@<br>         ngx_shmtx_lock(&cache->shpool->mutex);<br><br>         if (c->node->updating) {<br>+            if (c->updating_timeout != NGX_CONF_UNSET_MSEC<br>+                && ngx_current_msec - c->node->last_updating_time > c->updating_<br>timeout) {<br>+                c->node->updating = 0;<br>+            }<br>             rc = NGX_HTTP_CACHE_UPDATING;<br><br>         } else {<br>@@ -1377,6 +1381,10 @@<br><br>     cache = c->file_cache;<br><br>+    ngx_shmtx_lock(&cache->shpool->mutex);<br>+    c->node->last_updating_time = ngx_current_msec;<br>+    ngx_shmtx_unlock(&cache->shpool->mutex);<br>+<br>     c->updated = 1;<br>     c->updating = 0;<br></div><div>diff -r 3db945fda515 -r f8f6290d6061 src/http/ngx_http_upstream.c<br>--- a/src/http/ngx_http_upstream.c      Fri Sep 22 19:23:57 2023 +0400<br>+++ b/src/http/ngx_http_upstream.c      Sun Oct 01 16:12:20 2023 +0900<br>@@ -877,6 +877,7 @@<br>         c->body_start = u->conf->buffer_size;<br>         c->min_uses = u->conf->cache_min_uses;<br>         c->file_cache = cache;<br>+        c->updating_timeout = u->conf->cache_updating_timeout;<br><br>         switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {<br><br>diff -r 3db945fda515 -r f8f6290d6061 src/http/ngx_http_upstream.h<br>--- a/src/http/ngx_http_upstream.h      Fri Sep 22 19:23:57 2023 +0400<br>+++ b/src/http/ngx_http_upstream.h      Sun Oct 01 16:12:20 2023 +0900<br>@@ -199,6 +199,8 @@<br>     ngx_uint_t                       cache_use_stale;<br>     ngx_uint_t                       cache_methods;<br><br>+    ngx_msec_t                       cache_updating_timeout;<br>+<br>     off_t                            cache_max_range_offset;<br><br>     ngx_flag_t                       cache_lock;<br></div></div>