summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faulet <cfaulet@haproxy.com>2023-05-16 18:07:51 +0200
committerChristopher Faulet <cfaulet@haproxy.com>2023-05-17 14:57:10 +0200
commit8bca3cc8c766cada51805631fb1f72475b89bc44 (patch)
tree86ed677b2a0d66949c8e8bd785c0bd8c91a72b85
parent8a46f986151375a314877040f52936a52a8ddcf5 (diff)
downloadhaproxy-8bca3cc8c766cada51805631fb1f72475b89bc44.tar.gz
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.
-rw-r--r--src/check.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/check.c b/src/check.c
index a440185da..786c1c61c 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);