From: Christopher Faulet Date: Tue, 16 May 2023 16:07:51 +0000 (+0200) Subject: MEDIUM: checks: Stop scheduling healthchecks during stopping stage X-Git-Tag: v2.8-dev12~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8bca3cc8c766cada51805631fb1f72475b89bc44;p=thirdparty%2Fhaproxy.git MEDIUM: checks: Stop scheduling healthchecks during stopping stage When the process is stopping, the health-checks are suspended. However the task is still periodically woken up for nothing. If there is a huge number of health-checks and if they are woken up in same time, it may lead to a noticeable CPU consumption for no reason. To avoid this extra CPU cost, we stop to schedule the health-check tasks when the proxy is disabled or stopped. This patch should partially solve the issue #2145. --- diff --git a/src/check.c b/src/check.c index a440185daa..786c1c61cc 100644 --- a/src/check.c +++ b/src/check.c @@ -1327,8 +1327,13 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state) } reschedule: - while (tick_is_expired(t->expire, now_ms)) - t->expire = tick_add(t->expire, MS_TO_TICKS(check->inter)); + if (proxy->flags & (PR_FL_DISABLED|PR_FL_STOPPED)) + t->expire = TICK_ETERNITY; + else { + while (tick_is_expired(t->expire, now_ms)) + t->expire = tick_add(t->expire, MS_TO_TICKS(check->inter)); + } + out_unlock: if (check->server) HA_SPIN_UNLOCK(SERVER_LOCK, &check->server->lock);