]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Add director_max_parallel_moves/kicks settings
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 7 Nov 2017 15:36:05 +0000 (17:36 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 7 Nov 2017 23:43:48 +0000 (01:43 +0200)
The director_max_parallel_moves setting controls the default limit, which
can still be increased by explicitly using the doveadm director flush
--max-parallel" parameter.

src/director/director-settings.c
src/director/director-settings.h
src/director/doveadm-connection.c

index 94bb9c884d88b2b9e6479a05c0c0b61e0f740e33..4b0fd58e5fc8a37fd9089998fd1e79cfdc9d3d26 100644 (file)
@@ -76,6 +76,8 @@ static const struct setting_define director_setting_defines[] = {
        DEF(SET_TIME, director_user_kick_delay),
        DEF(SET_IN_PORT, director_doveadm_port),
        DEF(SET_BOOL, director_consistent_hashing),
+       DEF(SET_TIME, director_max_parallel_moves),
+       DEF(SET_TIME, director_max_parallel_kicks),
        DEF(SET_SIZE, director_output_buffer_size),
 
        SETTING_DEFINE_LIST_END
@@ -91,6 +93,8 @@ const struct director_settings director_default_settings = {
        .director_user_expire = 60*15,
        .director_user_kick_delay = 2,
        .director_doveadm_port = 0,
+       .director_max_parallel_moves = 100,
+       .director_max_parallel_kicks = 100,
        .director_output_buffer_size = 10 * 1024 * 1024,
 };
 
index f579ef935a2202c45382f3cce74510cade5f462b..703cd1860d50c5d78911627045e77f0b32500637 100644 (file)
@@ -15,6 +15,8 @@ struct director_settings {
        unsigned int director_user_kick_delay;
        in_port_t director_doveadm_port;
        bool director_consistent_hashing;
+       unsigned int director_max_parallel_moves;
+       unsigned int director_max_parallel_kicks;
        uoff_t director_output_buffer_size;
 };
 
index 8f5ee2a35a14c4f1755d27f64120232520762bd6..a8cfe02e44949967da69f26d687d5fa5fdca0715 100644 (file)
@@ -25,8 +25,6 @@
 #define DOVEADM_HANDSHAKE "VERSION\tdirector-doveadm\t1\t0\n"
 
 #define MAX_VALID_VHOST_COUNT 1000
-#define DEFAULT_MAX_MOVING_USERS 100
-#define DEFAULT_MAX_KICKING_USERS 100
 
 #define DOVEADM_CONNECTION_RING_SYNC_TIMEOUT_MSECS (30*1000)
 
@@ -602,7 +600,8 @@ doveadm_cmd_host_reset_users(struct doveadm_connection *conn,
        struct ip_addr ip;
        struct mail_host *const *hosts;
        unsigned int i = 0, count;
-       unsigned int max_moving_users = DEFAULT_MAX_MOVING_USERS;
+       unsigned int max_moving_users =
+               conn->dir->set->director_max_parallel_moves;
 
        if (args[0] != NULL && args[1] != NULL &&
            (str_to_uint(args[1], &max_moving_users) < 0 ||
@@ -790,7 +789,8 @@ static void doveadm_kick_cmd_free(struct director_kick_cmd **_cmd)
 
 static bool doveadm_cmd_user_kick_run(struct director_kick_cmd *cmd)
 {
-       if (cmd->dir->users_kicking_count >= DEFAULT_MAX_KICKING_USERS)
+       if (cmd->dir->users_kicking_count >=
+           cmd->dir->set->director_max_parallel_kicks)
                return FALSE;
 
        if (cmd->alt)