]> granicus.if.org Git - apache/commitdiff
mod_proxy_balancer: clear slotmem slots' inuse flags from persisted files.
authorYann Ylavic <ylavic@apache.org>
Sun, 20 May 2018 13:08:13 +0000 (13:08 +0000)
committerYann Ylavic <ylavic@apache.org>
Sun, 20 May 2018 13:08:13 +0000 (13:08 +0000)
Otherwise, when BalancerPersist is enabled, we might fail (re)starting with a
saved slotmem if a BalancerMember was renamed (e.g. PR 62308's port change).
This is because the renamed member is considered a new one, while the old name
still reserves a slot, so we end up missing one room. The overall number of
members does not change so the sizes check succeeds thus the persisted slotmem
is not invalidated. Yet the slomem is not really compatible.

By clearing inuse flags, we still allow for slots to be reused if their index
did not change (thanks to ap_proxy_find_balancershm() and slotmem_fgrab() at
the given index), but will also invalidate renamed slots which don't match the
index. We now have the correct behaviour by slot and the server (re)starts in
any case.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1831938 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_balancer.c

index 42fd97b125d0974c6e23b42cc88a95467b8dedc4..347481a3231c9bea55ba7492e90d362aa929b6c8 100644 (file)
@@ -908,7 +908,7 @@ static int balancer_post_config(apr_pool_t *pconf, apr_pool_t *plog,
             continue;
         }
         if (conf->bal_persist) {
-            type = AP_SLOTMEM_TYPE_PERSIST;
+            type = AP_SLOTMEM_TYPE_PERSIST | AP_SLOTMEM_TYPE_CLEARINUSE;
         } else {
             type = 0;
         }