summaryrefslogtreecommitdiffstats
path: root/src/libserver/worker_util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-09-22 09:38:47 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-09-22 09:38:47 +0100
commit884a962a1ef82431b60ce66bc83416898db4ad24 (patch)
treef25b5f5f7d0a1c05f7dd5a76fe9ac11bf3cafe93 /src/libserver/worker_util.c
parent261c54963d3e48834100180125a2a17e1759cb61 (diff)
downloadrspamd-884a962a1ef82431b60ce66bc83416898db4ad24.tar.gz
rspamd-884a962a1ef82431b60ce66bc83416898db4ad24.zip
[Project] More work towards heartbeating logic implementation
Diffstat (limited to 'src/libserver/worker_util.c')
-rw-r--r--src/libserver/worker_util.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/libserver/worker_util.c b/src/libserver/worker_util.c
index 883e7e8a9..163b0a509 100644
--- a/src/libserver/worker_util.c
+++ b/src/libserver/worker_util.c
@@ -761,23 +761,23 @@ rspamd_main_heartbeat_cb (EV_P_ ev_timer *w, int revents)
-(wrk->hb.nbeats) >= rspamd_main->cfg->heartbeats_loss_max) {
- if (-(wrk->hb.nbeats) >= rspamd_main->cfg->heartbeats_loss_max + 1) {
- msg_err_main ("terminate worker type %s with pid %P, "
- "last beat on: %s; %L heartbeat loast",
+ if (-(wrk->hb.nbeats) > rspamd_main->cfg->heartbeats_loss_max + 1) {
+ msg_err_main ("force kill worker type %s with pid %P, "
+ "last beat on: %s; %L heartbeat lost",
g_quark_to_string (wrk->type),
wrk->pid,
timebuf,
-(wrk->hb.nbeats));
- kill (wrk->pid, SIGTERM);
+ kill (wrk->pid, SIGKILL);
}
else {
- msg_err_main ("force kill worker type %s with pid %P, "
- "last beat on: %s; %L heartbeat loast",
+ msg_err_main ("terminate worker type %s with pid %P, "
+ "last beat on: %s; %L heartbeat lost",
g_quark_to_string (wrk->type),
wrk->pid,
timebuf,
-(wrk->hb.nbeats));
- kill (wrk->pid, SIGKILL);
+ kill (wrk->pid, SIGTERM);
}
}
@@ -1363,10 +1363,21 @@ rspamd_check_termination_clause (struct rspamd_main *rspamd_main,
if (WIFEXITED (res) && WEXITSTATUS (res) == 0) {
/* Normal worker termination, do not fork one more */
- msg_info_main ("%s process %P terminated normally",
- g_quark_to_string (wrk->type),
- wrk->pid);
- need_refork = FALSE;
+
+ if (wrk->hb.nbeats < 0) {
+ msg_info_main ("%s process %P terminated normally, but lost %L "
+ "heartbeats, refork it",
+ g_quark_to_string (wrk->type),
+ wrk->pid,
+ -(wrk->hb.nbeats));
+ need_refork = TRUE;
+ }
+ else {
+ msg_info_main ("%s process %P terminated normally",
+ g_quark_to_string (wrk->type),
+ wrk->pid);
+ need_refork = FALSE;
+ }
}
else {
if (WIFSIGNALED (res)) {