]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Show in process title how many users are being kicked.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 5 Nov 2017 21:27:36 +0000 (23:27 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 6 Nov 2017 18:09:13 +0000 (20:09 +0200)
src/director/director.c
src/director/director.h
src/director/main.c

index 722a2ba08a24d2ee337ade06e479e55e9179c0a7..ceab94cc4d68c36814875de5c4a148e955d8b1e7 100644 (file)
@@ -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;
index 1272c0d7c1ca87713c7b9ab34833f3056f2c30df..71cb4041f8a8bac2b760eb2f68e79a4628799513 100644 (file)
@@ -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;
 
index d45b25b1d9ec2c19886a50da27ee2ac1973b17ae..09b4023e7f9788fcf3b17dceeb7253fa79c65a4c 100644 (file)
@@ -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",