From: Timo Sirainen Date: Sun, 5 Nov 2017 21:27:36 +0000 (+0200) Subject: director: Show in process title how many users are being kicked. X-Git-Tag: 2.3.0.rc1~556 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5754fa860405e9af20c38981942f6aa97ce3158d;p=thirdparty%2Fdovecot%2Fcore.git director: Show in process title how many users are being kicked. --- diff --git a/src/director/director.c b/src/director/director.c index 722a2ba08a..ceab94cc4d 100644 --- a/src/director/director.c +++ b/src/director/director.c @@ -980,6 +980,9 @@ static void director_kill_user_callback(enum ipc_client_cmd_state state, break; } + i_assert(ctx->dir->users_kicking_count > 0); + ctx->dir->users_kicking_count--; + ctx->callback_pending = FALSE; user = user_directory_lookup(ctx->tag->users, ctx->username_hash); @@ -1058,6 +1061,7 @@ void director_kill_user(struct director *dir, struct director_host *src, cmd = t_strdup_printf("proxy\t*\tKICK-DIRECTOR-HASH\t%u", user->username_hash); ctx->callback_pending = TRUE; + dir->users_kicking_count++; ipc_client_cmd(dir->ipc_proxy, cmd, director_kill_user_callback, ctx); } else { @@ -1139,13 +1143,18 @@ void director_move_user(struct director *dir, struct director_host *src, static void director_kick_user_callback(enum ipc_client_cmd_state state, - const char *data, void *context ATTR_UNUSED) + const char *data, void *context) { + struct director *dir = context; + if (state == IPC_CLIENT_CMD_STATE_REPLY) { /* shouldn't get here. the command reply isn't finished yet. */ i_error("login process sent unexpected reply to kick: %s", data); + return; } + i_assert(dir->users_kicking_count > 0); + dir->users_kicking_count--; } void director_kick_user(struct director *dir, struct director_host *src, @@ -1155,8 +1164,9 @@ void director_kick_user(struct director *dir, struct director_host *src, str_append(cmd, "proxy\t*\tKICK\t"); str_append_tabescaped(cmd, username); + dir->users_kicking_count++; ipc_client_cmd(dir->ipc_proxy, str_c(cmd), - director_kick_user_callback, (void *)NULL); + director_kick_user_callback, dir); if (orig_src == NULL) { orig_src = dir->self_host; @@ -1180,8 +1190,9 @@ void director_kick_user_alt(struct director *dir, struct director_host *src, str_append_tabescaped(cmd, field); str_append_c(cmd, '\t'); str_append_tabescaped(cmd, value); + dir->users_kicking_count++; ipc_client_cmd(dir->ipc_proxy, str_c(cmd), - director_kick_user_callback, (void *)NULL); + director_kick_user_callback, dir); if (orig_src == NULL) { orig_src = dir->self_host; @@ -1206,8 +1217,9 @@ void director_kick_user_hash(struct director *dir, struct director_host *src, cmd = t_strdup_printf("proxy\t*\tKICK-DIRECTOR-HASH\t%u\t%s", username_hash, net_ip2addr(except_ip)); + dir->users_kicking_count++; ipc_client_cmd(dir->ipc_proxy, cmd, - director_kick_user_callback, (void *)NULL); + director_kick_user_callback, dir); if (orig_src == NULL) { orig_src = dir->self_host; diff --git a/src/director/director.h b/src/director/director.h index 1272c0d7c1..71cb4041f8 100644 --- a/src/director/director.h +++ b/src/director/director.h @@ -121,6 +121,8 @@ struct director { struct mail_host_list *orig_config_hosts; /* Number of users currently being moved */ unsigned int users_moving_count; + /* Number of users currently being kicked */ + unsigned int users_kicking_count; /* Number of requests currently delayed */ unsigned int requests_delayed_count; diff --git a/src/director/main.c b/src/director/main.c index d45b25b1d9..09b4023e7f 100644 --- a/src/director/main.c +++ b/src/director/main.c @@ -61,6 +61,8 @@ static void director_refresh_proctitle_timeout(void *context ATTR_UNUSED) str_printfa(str, ", %u delayed", director->requests_delayed_count); if (director->users_moving_count > 0) str_printfa(str, ", %u moving", director->users_moving_count); + if (director->users_kicking_count > 0) + str_printfa(str, ", %u kicking", director->users_kicking_count); str_printfa(str, ", %"PRIu64" req/s", director->num_requests - prev_requests); str_printfa(str, ", %"PRIu64"+%"PRIu64" kB/s",