Mercurial > dovecot > core-2.2
annotate src/director/doveadm-connection.c @ 22631:53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Previously the host was shown only once, regardless of how many connections
it had. This especially helps when there are just two directors, but also
can be useful when showing incoming/outgoing connections that are still
in handshaking phase.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 26 Oct 2017 13:56:25 +0300 |
parents | 0170e1657f4d |
children | 6e235143e177 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21312
diff
changeset
|
1 /* Copyright (c) 2010-2017 Dovecot authors, see the included COPYING file */ |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "ioloop.h" |
15187
02451e967a06
Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents:
14682
diff
changeset
|
5 #include "net.h" |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "istream.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "ostream.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "array.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "str.h" |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
10 #include "strescape.h" |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "llist.h" |
11373
26cfc1c3a4b1
director: Update connection count when client disconnects.
Timo Sirainen <tss@iki.fi>
parents:
11355
diff
changeset
|
12 #include "master-service.h" |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include "user-directory.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 #include "mail-host.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include "director.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 #include "director-host.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 #include "director-request.h" |
13320
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
18 #include "director-connection.h" |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 #include "doveadm-connection.h" |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 #include <unistd.h> |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11373
diff
changeset
|
23 #define DOVEADM_PROTOCOL_VERSION_MAJOR 1 |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11373
diff
changeset
|
24 #define DOVEADM_HANDSHAKE "VERSION\tdirector-doveadm\t1\t0\n" |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 #define MAX_VALID_VHOST_COUNT 1000 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
27 #define DEFAULT_MAX_MOVING_USERS 100 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
28 #define DOVEADM_CONNECTION_RING_SYNC_TIMEOUT_MSECS (30*1000) |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
29 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
30 enum doveadm_director_cmd_ret { |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
31 DOVEADM_DIRECTOR_CMD_RET_FAIL = -1, |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
32 DOVEADM_DIRECTOR_CMD_RET_UNFINISHED = 0, |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
33 DOVEADM_DIRECTOR_CMD_RET_OK = 1, |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
34 DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK, |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
35 }; |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
36 |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
37 enum doveadm_director_cmd_flag { |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
38 DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC = 0x01, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
39 }; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
40 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
41 typedef void |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
42 doveadm_connection_ring_sync_callback_t(struct doveadm_connection *); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
43 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
44 struct director_reset_cmd { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
45 struct director_reset_cmd *prev, *next; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
46 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
47 struct director *dir; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
48 struct doveadm_connection *_conn; |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
49 struct director_user_iter *iter; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
50 unsigned int host_idx, hosts_count; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
51 unsigned int max_moving_users; |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
52 bool users_killed; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
53 }; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 struct doveadm_connection { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 struct doveadm_connection *prev, *next; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 int fd; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 struct io *io; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 struct istream *input; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 struct ostream *output; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 struct director *dir; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
64 struct timeout *to_ring_sync_abort; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
65 struct director_reset_cmd *reset_cmd; |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
66 doveadm_connection_ring_sync_callback_t *ring_sync_callback; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
67 |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
68 const char **cmd_pending_args; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
69 unsigned int cmd_pending_idx; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
70 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 unsigned int handshaked:1; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 }; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 static struct doveadm_connection *doveadm_connections; |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
75 static struct doveadm_connection *doveadm_ring_sync_pending_connections; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
76 static struct director_reset_cmd *reset_cmds = NULL; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
78 static void doveadm_connection_set_io(struct doveadm_connection *conn); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 static void doveadm_connection_deinit(struct doveadm_connection **_conn); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
80 static void |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
81 doveadm_connection_ring_sync_list_move(struct doveadm_connection *conn); |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
82 static void doveadm_connection_cmd_run_synced(struct doveadm_connection *conn); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
84 static enum doveadm_director_cmd_ret |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
85 doveadm_cmd_host_list(struct doveadm_connection *conn, |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
86 const char *const *args ATTR_UNUSED) |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 struct mail_host *const *hostp; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 string_t *str = t_str_new(1024); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 |
11352
19336bddada2
director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents:
11351
diff
changeset
|
91 array_foreach(mail_hosts_get(conn->dir->mail_hosts), hostp) { |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
92 str_printfa(str, "%s\t%u\t%u\t", |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 net_ip2addr(&(*hostp)->ip), (*hostp)->vhost_count, |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 (*hostp)->user_count); |
19408
7e47f561ad49
director: Code cleanup - access host->tag via mail_host_get_tag()
Timo Sirainen <tss@iki.fi>
parents:
19407
diff
changeset
|
95 str_append_tabescaped(str, mail_host_get_tag(*hostp)); |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
96 str_printfa(str, "\t%c\t%ld", (*hostp)->down ? 'D' : 'U', |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
97 (long)(*hostp)->last_updown_change); |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
98 str_append_c(str, '\n'); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 str_append_c(str, '\n'); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
101 o_stream_nsend(conn->output, str_data(str), str_len(str)); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
102 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
105 static enum doveadm_director_cmd_ret |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
106 doveadm_cmd_host_list_removed(struct doveadm_connection *conn, |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
107 const char *const *args ATTR_UNUSED) |
12986
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
108 { |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
109 struct mail_host_list *orig_hosts_list; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
110 struct mail_host *const *orig_hosts, *const *cur_hosts; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
111 unsigned int i, j, orig_hosts_count, cur_hosts_count; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
112 string_t *str = t_str_new(1024); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
113 int ret; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
114 |
21079
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
115 orig_hosts_list = mail_hosts_init(conn->dir->set->director_user_expire, |
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
116 conn->dir->set->director_consistent_hashing, |
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
117 NULL); |
12986
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
118 (void)mail_hosts_parse_and_add(orig_hosts_list, |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
119 conn->dir->set->director_mail_servers); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
120 |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
121 orig_hosts = array_get(mail_hosts_get(orig_hosts_list), |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
122 &orig_hosts_count); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
123 cur_hosts = array_get(mail_hosts_get(conn->dir->mail_hosts), |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
124 &cur_hosts_count); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
125 |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
126 /* the hosts are sorted by IP */ |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
127 for (i = j = 0; i < orig_hosts_count && j < cur_hosts_count; ) { |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
128 ret = net_ip_cmp(&orig_hosts[i]->ip, &cur_hosts[j]->ip); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
129 if (ret == 0) |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
130 i++, j++; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
131 else if (ret > 0) |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
132 j++; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
133 else { |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
134 str_printfa(str, "%s\n", |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
135 net_ip2addr(&orig_hosts[i]->ip)); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
136 i++; |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
137 } |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
138 } |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
139 for (; i < orig_hosts_count; i++) |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
140 str_printfa(str, "%s\n", net_ip2addr(&orig_hosts[i]->ip)); |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
141 str_append_c(str, '\n'); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
142 o_stream_nsend(conn->output, str_data(str), str_len(str)); |
12986
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
143 |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
144 mail_hosts_deinit(&orig_hosts_list); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
145 return DOVEADM_DIRECTOR_CMD_RET_OK; |
12986
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
146 } |
c838d40bd38e
doveadm: Added "director dump" command.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
147 |
22631
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
148 static void |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
149 doveadm_director_host_append_status(const struct director_host *host, |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
150 const char *type, string_t *str) |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
151 { |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
152 time_t last_failed = I_MAX(host->last_network_failure, |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
153 host->last_protocol_failure); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
154 str_printfa(str, "%s\t%u\t%s\t%ld\t", |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
155 net_ip2addr(&host->ip), host->port, type, |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
156 (long)last_failed); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
157 } |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
158 |
18062
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
159 static void doveadm_director_append_status(struct director *dir, string_t *str) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
160 { |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
161 if (!dir->ring_handshaked) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
162 str_append(str, "handshaking"); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
163 else if (dir->ring_synced) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
164 str_append(str, "synced"); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
165 else { |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
166 str_printfa(str, "syncing - last sync %d secs ago", |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
167 (int)(ioloop_time - dir->ring_last_sync_time)); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
168 } |
22630
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
169 str_printfa(str, "\t%u", dir->last_sync_msecs); |
18062
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
170 } |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
171 |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
172 static void |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
173 doveadm_director_connection_append_status(struct director_connection *conn, |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
174 string_t *str) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
175 { |
22630
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
176 struct director_connection_status status; |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
177 |
18062
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
178 if (!director_connection_is_handshaked(conn)) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
179 str_append(str, "handshaking"); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
180 else if (director_connection_is_synced(conn)) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
181 str_append(str, "synced"); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
182 else |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
183 str_append(str, "syncing"); |
22630
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
184 |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
185 director_connection_get_status(conn, &status); |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
186 str_printfa(str, "\t%u\t%"PRIuUOFF_T"\t%"PRIuUOFF_T"\t%zu\t%zu\t" |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
187 "%ld\t%ld", status.last_ping_msecs, |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
188 status.bytes_read, status.bytes_sent, |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
189 status.bytes_buffered, status.peak_bytes_buffered, |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
190 (long)status.last_input.tv_sec, |
0170e1657f4d
doveadm director ring status: Add more fields related to connection status
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22571
diff
changeset
|
191 (long)status.last_output.tv_sec); |
18062
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
192 } |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
193 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
194 static enum doveadm_director_cmd_ret |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
195 doveadm_cmd_director_list(struct doveadm_connection *conn, |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
196 const char *const *args ATTR_UNUSED) |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 { |
13320
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
198 struct director *dir = conn->dir; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 struct director_host *const *hostp; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 string_t *str = t_str_new(1024); |
13320
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
201 const char *type; |
22631
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
202 struct director_connection *const *connp; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
203 ARRAY(struct director_host *) hosts; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
204 |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
205 t_array_init(&hosts, array_count(&dir->dir_hosts)); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
206 array_append_array(&hosts, &dir->dir_hosts); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
207 |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
208 /* show each individual connection */ |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
209 array_foreach(&dir->connections, connp) { |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
210 const struct director_host *host = |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
211 director_connection_get_host(*connp); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
212 /* NOTE: for incoming connections host is initially NULL */ |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 |
22631
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
214 array_foreach(&hosts, hostp) { |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
215 if (*hostp == host) { |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
216 array_delete(&hosts, |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
217 array_foreach_idx(&hosts, hostp), 1); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
218 break; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
219 } |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
220 } |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
221 if (*connp == dir->left) |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
222 type = "left"; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
223 else if (*connp == dir->right) |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
224 type = "right"; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
225 else if (director_connection_is_incoming(*connp)) |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
226 type = "in"; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
227 else |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
228 type = "out"; |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
229 |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
230 if (host != NULL) |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
231 doveadm_director_host_append_status(host, type, str); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
232 doveadm_director_connection_append_status(*connp, str); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
233 str_append_c(str, '\n'); |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
234 } |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
235 |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
236 /* show the rest of the hosts that don't have any connections */ |
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
237 array_foreach(&hosts, hostp) { |
13320
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
238 const struct director_host *host = *hostp; |
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
239 |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
240 if (host->removed) |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
241 type = "removed"; |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
242 else if (dir->self_host == host) |
13320
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
243 type = "self"; |
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
244 else |
63680f6e21a2
director: Updated DIRECTOR-LIST doveadm command.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
245 type = ""; |
14432
366b9e5fc85c
director: Don't communicate with directors that recently sent invalid input.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
246 |
22631
53082f1df8a6
director: Show each director connection in doveadm DIRECTOR-LIST
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22630
diff
changeset
|
247 doveadm_director_host_append_status(host, type, str); |
18062
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
248 if (dir->self_host == host) |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
249 doveadm_director_append_status(dir, str); |
ade6dcace5cd
doveadm director ring status shows now more information
Timo Sirainen <tss@iki.fi>
parents:
17725
diff
changeset
|
250 str_append_c(str, '\n'); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 str_append_c(str, '\n'); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
253 o_stream_nsend(conn->output, str_data(str), str_len(str)); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
254 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
255 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
256 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
257 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
258 doveadm_cmd_director_add(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
259 const char *const *args) |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
260 { |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
261 struct director_host *host; |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
262 struct ip_addr ip; |
19035
aabfe48db1cf
Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents:
18729
diff
changeset
|
263 in_port_t port = conn->dir->self_port; |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
264 |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
265 if (args[0] == NULL || |
20968
2a7e47e01509
director: Make sure IP address parsing works in DIRECTOR-ADD/REMOVE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20967
diff
changeset
|
266 net_addr2ip(args[0], &ip) < 0 || |
19035
aabfe48db1cf
Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents:
18729
diff
changeset
|
267 (args[1] != NULL && net_str2port(args[1], &port) < 0)) { |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
268 i_error("doveadm sent invalid DIRECTOR-ADD parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
269 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
270 } |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
271 |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
272 if (director_host_lookup(conn->dir, &ip, port) == NULL) { |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
273 host = director_host_add(conn->dir, &ip, port); |
22562
3af1ba6b5248
director: Log info line whenever a director is added/removed from ring
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22559
diff
changeset
|
274 director_notify_ring_added(host, conn->dir->self_host, TRUE); |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
275 } |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
276 o_stream_nsend(conn->output, "OK\n", 3); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
277 return DOVEADM_DIRECTOR_CMD_RET_OK; |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
278 } |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
279 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
280 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
281 doveadm_cmd_director_remove(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
282 const char *const *args) |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
283 { |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
284 struct director_host *host; |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
285 struct ip_addr ip; |
19035
aabfe48db1cf
Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents:
18729
diff
changeset
|
286 in_port_t port = 0; |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
287 |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
288 if (args[0] == NULL || |
20968
2a7e47e01509
director: Make sure IP address parsing works in DIRECTOR-ADD/REMOVE
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20967
diff
changeset
|
289 net_addr2ip(args[0], &ip) < 0 || |
19035
aabfe48db1cf
Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents:
18729
diff
changeset
|
290 (args[1] != NULL && net_str2port(args[1], &port) < 0)) { |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
291 i_error("doveadm sent invalid DIRECTOR-REMOVE parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
292 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
293 } |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
294 |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
295 host = port != 0 ? |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
296 director_host_lookup(conn->dir, &ip, port) : |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
297 director_host_lookup_ip(conn->dir, &ip); |
22571
4057b92ed502
director: Don't crash on doveadm director ring remove for unknown director
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22569
diff
changeset
|
298 if (host == NULL) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
299 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22571
4057b92ed502
director: Don't crash on doveadm director ring remove for unknown director
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22569
diff
changeset
|
300 return DOVEADM_DIRECTOR_CMD_RET_OK; |
4057b92ed502
director: Don't crash on doveadm director ring remove for unknown director
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22569
diff
changeset
|
301 } else { |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
302 director_ring_remove(host, conn->dir->self_host); |
22571
4057b92ed502
director: Don't crash on doveadm director ring remove for unknown director
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22569
diff
changeset
|
303 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
4057b92ed502
director: Don't crash on doveadm director ring remove for unknown director
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22569
diff
changeset
|
304 } |
14571
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
305 } |
42cca8a1d179
director: Implemented ability to remove directors from a running ring.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
306 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
307 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
308 doveadm_cmd_host_set_or_update(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
309 const char *const *args, bool update) |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
310 { |
11352
19336bddada2
director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents:
11351
diff
changeset
|
311 struct director *dir = conn->dir; |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
312 const char *ip_str, *tag = ""; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 struct mail_host *host; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
314 struct ip_addr ip; |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
315 unsigned int vhost_count = UINT_MAX; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
316 |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
317 ip_str = args[0]; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
318 if (ip_str != NULL) { |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
319 tag = strchr(ip_str, '@'); |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
320 if (tag == NULL) |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
321 tag = ""; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
322 else |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
323 ip_str = t_strdup_until(ip_str, tag++); |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
324 } |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
325 if (ip_str == NULL || net_addr2ip(ip_str, &ip) < 0 || |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
326 (args[1] != NULL && str_to_uint(args[1], &vhost_count) < 0) || |
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
327 (args[1] == NULL && update)) { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
328 i_error("doveadm sent invalid %s parameters", |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
329 update ? "HOST-UPDATE" : "HOST-SET"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
330 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
331 } |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
332 if (vhost_count > MAX_VALID_VHOST_COUNT && vhost_count != UINT_MAX) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
333 o_stream_nsend_str(conn->output, "vhost count too large\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
334 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
335 } |
11352
19336bddada2
director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents:
11351
diff
changeset
|
336 host = mail_host_lookup(dir->mail_hosts, &ip); |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
337 if (host == NULL) { |
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
338 if (update) { |
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
339 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
340 return DOVEADM_DIRECTOR_CMD_RET_OK; |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
341 } |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
342 host = mail_host_add_ip(dir->mail_hosts, &ip, tag); |
19497
1d2999cfe0a4
director: If doveadm attempts to change tag for an existing host, return error.
Timo Sirainen <tss@iki.fi>
parents:
19437
diff
changeset
|
343 } else if (tag[0] != '\0' && strcmp(mail_host_get_tag(host), tag) != 0) { |
1d2999cfe0a4
director: If doveadm attempts to change tag for an existing host, return error.
Timo Sirainen <tss@iki.fi>
parents:
19437
diff
changeset
|
344 o_stream_nsend_str(conn->output, "host tag can't be changed\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
345 return DOVEADM_DIRECTOR_CMD_RET_OK; |
19288
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
346 } else if (host->desynced) { |
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
347 o_stream_nsend_str(conn->output, |
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
348 "host is already being updated - try again later\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
349 return DOVEADM_DIRECTOR_CMD_RET_OK; |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
350 } |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
351 if (vhost_count != UINT_MAX) |
21842
86e52ff70044
director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21443
diff
changeset
|
352 mail_host_set_vhost_count(host, vhost_count, "doveadm: "); |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
353 /* NOTE: we don't support changing a tag for an existing host. |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
354 it needs to be removed first. otherwise it would be a bit ugly to |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
355 handle. */ |
11629
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
356 director_update_host(dir, dir->self_host, NULL, host); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
357 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
358 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
361 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
362 doveadm_cmd_host_set(struct doveadm_connection *conn, const char *const *args) |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
363 { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
364 return doveadm_cmd_host_set_or_update(conn, args, FALSE); |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
365 } |
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
366 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
367 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
368 doveadm_cmd_host_update(struct doveadm_connection *conn, const char *const *args) |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
369 { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
370 return doveadm_cmd_host_set_or_update(conn, args, TRUE); |
19078
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
371 } |
7ac9ec913a39
doveadm director update command added.
Timo Sirainen <tss@iki.fi>
parents:
19035
diff
changeset
|
372 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
373 static enum doveadm_director_cmd_ret |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
374 doveadm_cmd_host_updown(struct doveadm_connection *conn, bool down, |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
375 const char *const *args) |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
376 { |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
377 struct mail_host *host; |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
378 struct ip_addr ip; |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
379 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
380 if (args[0] == NULL || net_addr2ip(args[0], &ip) < 0) { |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
381 i_error("doveadm sent invalid %s parameters: %s", |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
382 down ? "HOST-DOWN" : "HOST-UP", |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
383 args[0] == NULL ? "" : args[0]); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
384 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
385 } |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
386 host = mail_host_lookup(conn->dir->mail_hosts, &ip); |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
387 if (host == NULL) { |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
388 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
389 return DOVEADM_DIRECTOR_CMD_RET_OK; |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
390 } |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
391 if (host->down == down) { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
392 o_stream_nsend_str(conn->output, "OK\n"); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
393 return DOVEADM_DIRECTOR_CMD_RET_OK; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
394 } else if (host->desynced) { |
19288
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
395 o_stream_nsend_str(conn->output, |
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
396 "host is already being updated - try again later\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
397 return DOVEADM_DIRECTOR_CMD_RET_OK; |
19288
5939512ff017
director: Don't allow doveadm to update backend's state if the state is already being changed.
Timo Sirainen <tss@iki.fi>
parents:
19078
diff
changeset
|
398 } else { |
21842
86e52ff70044
director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21443
diff
changeset
|
399 mail_host_set_down(host, down, ioloop_time, "doveadm: "); |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
400 director_update_host(conn->dir, conn->dir->self_host, |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
401 NULL, host); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
402 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
18729
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
403 } |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
404 } |
0ee3e734249a
director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents:
18709
diff
changeset
|
405 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
406 static enum doveadm_director_cmd_ret |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
407 doveadm_cmd_host_up(struct doveadm_connection *conn, |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
408 const char *const *args) |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
409 { |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
410 return doveadm_cmd_host_updown(conn, FALSE, args); |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
411 } |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
412 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
413 static enum doveadm_director_cmd_ret |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
414 doveadm_cmd_host_down(struct doveadm_connection *conn, |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
415 const char *const *args) |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
416 { |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
417 return doveadm_cmd_host_updown(conn, TRUE, args); |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
418 } |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
419 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
420 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
421 doveadm_cmd_host_remove(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
422 const char *const *args) |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
423 { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
424 struct mail_host *host; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
425 struct ip_addr ip; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
426 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
427 if (args[0] == NULL || net_addr2ip(args[0], &ip) < 0) { |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
428 i_error("doveadm sent invalid HOST-REMOVE parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
429 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
430 } |
11352
19336bddada2
director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents:
11351
diff
changeset
|
431 host = mail_host_lookup(conn->dir->mail_hosts, &ip); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
432 if (host == NULL) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
433 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
434 return DOVEADM_DIRECTOR_CMD_RET_OK; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
435 } else { |
11629
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
436 director_remove_host(conn->dir, conn->dir->self_host, |
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
437 NULL, host); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
438 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
439 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
440 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
441 |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
442 static void |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
443 doveadm_cmd_host_flush_all(struct doveadm_connection *conn) |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
444 { |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
445 struct mail_host *const *hostp; |
17725
bd381e882485
director: Log a warning when using "director host flush" for all hosts.
Timo Sirainen <tss@iki.fi>
parents:
17418
diff
changeset
|
446 unsigned int total_user_count = 0; |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
447 |
11629
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
448 array_foreach(mail_hosts_get(conn->dir->mail_hosts), hostp) { |
17725
bd381e882485
director: Log a warning when using "director host flush" for all hosts.
Timo Sirainen <tss@iki.fi>
parents:
17418
diff
changeset
|
449 total_user_count += (*hostp)->user_count; |
11629
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
450 director_flush_host(conn->dir, conn->dir->self_host, |
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
451 NULL, *hostp); |
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
452 } |
17725
bd381e882485
director: Log a warning when using "director host flush" for all hosts.
Timo Sirainen <tss@iki.fi>
parents:
17418
diff
changeset
|
453 i_warning("Flushed all backend hosts with %u users. This is an unsafe " |
bd381e882485
director: Log a warning when using "director host flush" for all hosts.
Timo Sirainen <tss@iki.fi>
parents:
17418
diff
changeset
|
454 "operation and may cause the same users to end up in multiple backends.", |
bd381e882485
director: Log a warning when using "director host flush" for all hosts.
Timo Sirainen <tss@iki.fi>
parents:
17418
diff
changeset
|
455 total_user_count); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
456 o_stream_nsend(conn->output, "OK\n", 3); |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
457 } |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
458 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
459 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
460 doveadm_cmd_host_flush(struct doveadm_connection *conn, const char *const *args) |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
461 { |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
462 struct mail_host *host; |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
463 struct ip_addr ip; |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
464 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
465 if (args[0] == NULL || args[0][0] == '\0') { |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
466 doveadm_cmd_host_flush_all(conn); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
467 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
468 } |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
469 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
470 if (net_addr2ip(args[0], &ip) < 0) { |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
471 i_error("doveadm sent invalid HOST-FLUSH parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
472 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
473 } |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
474 host = mail_host_lookup(conn->dir->mail_hosts, &ip); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
475 if (host == NULL) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
476 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
477 return DOVEADM_DIRECTOR_CMD_RET_OK; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
478 } else { |
11629
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
479 director_flush_host(conn->dir, conn->dir->self_host, |
a07aa85f68c9
director: Lots of fixes. It should be pretty stable now.
Timo Sirainen <tss@iki.fi>
parents:
11585
diff
changeset
|
480 NULL, host); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
481 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
11355
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
482 } |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
483 } |
ef1de95396d4
Added doveadm director flush command for dropping user associations from memory.
Timo Sirainen <tss@iki.fi>
parents:
11353
diff
changeset
|
484 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
485 static void doveadm_reset_cmd_free(struct director_reset_cmd *cmd) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
486 { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
487 DLLIST_REMOVE(&reset_cmds, cmd); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
488 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
489 if (cmd->iter != NULL) |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
490 director_iterate_users_deinit(&cmd->iter); |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
491 if (cmd->_conn != NULL) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
492 cmd->_conn->reset_cmd = NULL; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
493 i_free(cmd); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
494 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
495 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
496 static bool |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
497 director_host_reset_users(struct director_reset_cmd *cmd, |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
498 struct mail_host *host) |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
499 { |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
500 struct director *dir = cmd->dir; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
501 struct user *user; |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
502 struct mail_host *new_host; |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
503 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
504 if (dir->users_moving_count >= cmd->max_moving_users) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
505 return FALSE; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
506 |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
507 if (dir->right != NULL) |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
508 director_connection_cork(dir->right); |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
509 |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
510 if (cmd->iter == NULL) { |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
511 cmd->iter = director_iterate_users_init(dir); |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
512 cmd->users_killed = FALSE; |
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
513 } |
21079
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
514 |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
515 while ((user = director_iterate_users_next(cmd->iter)) != NULL) { |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
516 if (user->host != host) |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
517 continue; |
22506
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
518 |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
519 new_host = mail_host_get_by_hash(dir->mail_hosts, |
19408
7e47f561ad49
director: Code cleanup - access host->tag via mail_host_get_tag()
Timo Sirainen <tss@iki.fi>
parents:
19407
diff
changeset
|
520 user->username_hash, |
7e47f561ad49
director: Code cleanup - access host->tag via mail_host_get_tag()
Timo Sirainen <tss@iki.fi>
parents:
19407
diff
changeset
|
521 mail_host_get_tag(host)); |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
522 if (new_host != host) T_BEGIN { |
22506
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
523 if (new_host != NULL) { |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
524 director_move_user(dir, dir->self_host, NULL, |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
525 user->username_hash, new_host); |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
526 } else { |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
527 /* there are no more available backends. |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
528 kick the user instead. */ |
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
529 director_kill_user(dir, dir->self_host, user, |
22510
3c4348ffe0d6
director: Fix flush to kick the user also when all backends are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22506
diff
changeset
|
530 user->host->tag, user->host, |
3c4348ffe0d6
director: Fix flush to kick the user also when all backends are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22506
diff
changeset
|
531 TRUE); |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
532 cmd->users_killed = TRUE; |
22506
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
533 } |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
534 } T_END; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
535 if (dir->users_moving_count >= cmd->max_moving_users) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
536 break; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
537 } |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
538 if (user == NULL) { |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
539 director_iterate_users_deinit(&cmd->iter); |
22552
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
540 if (cmd->users_killed) { |
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
541 /* no more backends. we already sent kills. now remove |
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
542 the users entirely from the host. */ |
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
543 director_flush_host(dir, dir->self_host, NULL, host); |
7b8e95de2bff
director: Fix HOST-RESET-USERS when all hosts are down
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22537
diff
changeset
|
544 } |
22506
3afbfedcdd31
director: Fix crash when flush is run and all backends are down.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21842
diff
changeset
|
545 } |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
546 if (dir->right != NULL) |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
547 director_connection_uncork(dir->right); |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
548 return user == NULL; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
549 } |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
550 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
551 static bool |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
552 director_reset_cmd_run(struct director_reset_cmd *cmd) |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
553 { |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
554 struct mail_host *const *hosts; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
555 unsigned int count; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
556 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
557 hosts = array_get(mail_hosts_get(cmd->dir->mail_hosts), &count); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
558 if (count > cmd->hosts_count) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
559 count = cmd->hosts_count; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
560 while (cmd->host_idx < count) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
561 if (!director_host_reset_users(cmd, hosts[cmd->host_idx])) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
562 return FALSE; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
563 cmd->host_idx++; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
564 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
565 if (cmd->_conn != NULL) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
566 struct doveadm_connection *conn = cmd->_conn; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
567 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
568 o_stream_nsend(conn->output, "OK\n", 3); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
569 if (conn->io == NULL) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
570 doveadm_connection_set_io(conn); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
571 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
572 doveadm_reset_cmd_free(cmd); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
573 return TRUE; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
574 } |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
575 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
576 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
577 doveadm_cmd_host_reset_users(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
578 const char *const *args) |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
579 { |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
580 struct director_reset_cmd *cmd; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
581 struct ip_addr ip; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
582 struct mail_host *const *hosts; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
583 unsigned int i = 0, count; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
584 unsigned int max_moving_users = DEFAULT_MAX_MOVING_USERS; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
585 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
586 if (args[0] != NULL && args[1] != NULL && |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
587 str_to_uint(args[1], &max_moving_users) < 0) { |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
588 i_error("doveadm sent invalid HOST-RESET-USERS parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
589 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
590 } |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
591 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
592 hosts = array_get(mail_hosts_get(conn->dir->mail_hosts), &count); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
593 if (args[0] != NULL && args[0][0] != '\0') { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
594 if (net_addr2ip(args[0], &ip) < 0) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
595 i_error("doveadm sent invalid HOST-RESET-USERS ip: %s", |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
596 args[0]); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
597 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
598 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
599 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
600 for (i = 0; i < count; i++) { |
20984
d3f2fc420d2b
director: Fix HOST-RESET-USERS with host parameter.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20976
diff
changeset
|
601 if (net_ip_compare(&hosts[i]->ip, &ip)) |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
602 break; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
603 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
604 if (i == count) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
605 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
606 return DOVEADM_DIRECTOR_CMD_RET_OK; |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
607 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
608 count = i+1; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
609 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
610 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
611 conn->reset_cmd = cmd = i_new(struct director_reset_cmd, 1); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
612 cmd->dir = conn->dir; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
613 cmd->_conn = conn; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
614 cmd->max_moving_users = max_moving_users; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
615 cmd->host_idx = i; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
616 cmd->hosts_count = count; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
617 DLLIST_PREPEND(&reset_cmds, cmd); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
618 |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
619 if (!director_reset_cmd_run(cmd)) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
620 /* we still have work to do. don't handle any more doveadm |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
621 input until we're finished. */ |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
622 io_remove(&conn->io); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
623 return DOVEADM_DIRECTOR_CMD_RET_UNFINISHED; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
624 } |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
625 return DOVEADM_DIRECTOR_CMD_RET_OK; |
18709
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
626 } |
618c8d76bc5d
director: Added HOST-RESET-USERS command to move users to their hash-assigned hosts.
Timo Sirainen <tss@iki.fi>
parents:
18541
diff
changeset
|
627 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
628 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
629 doveadm_cmd_user_lookup(struct doveadm_connection *conn, |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
630 const char *const *args) |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
631 { |
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
632 struct user *user; |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
633 struct mail_host *host; |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
634 const char *username, *tag; |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
635 unsigned int username_hash; |
21079
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
636 struct mail_tag *mail_tag; |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
637 string_t *str = t_str_new(256); |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
638 |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
639 if (args[0] == NULL) { |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
640 username = ""; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
641 tag = ""; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
642 } else { |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
643 username = args[0]; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
644 tag = args[1] != NULL ? args[1] : ""; |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
645 } |
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
646 if (str_to_uint(username, &username_hash) < 0) |
21076
ef9d8f4c6c67
director: Code cleanup - moved username_hash generation to director.h
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21075
diff
changeset
|
647 username_hash = director_get_username_hash(conn->dir, username); |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
648 |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
649 /* get user's current host */ |
21079
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
650 mail_tag = mail_tag_find(conn->dir->mail_hosts, tag); |
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
651 user = mail_tag == NULL ? NULL : |
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
652 user_directory_lookup(mail_tag->users, username_hash); |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
653 if (user == NULL) |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
654 str_append(str, "\t0"); |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
655 else { |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
656 str_printfa(str, "%s\t%u", net_ip2addr(&user->host->ip), |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
657 user->timestamp + |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
658 conn->dir->set->director_user_expire); |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
659 } |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
660 |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
661 /* get host if it wasn't in user directory */ |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
662 host = mail_host_get_by_hash(conn->dir->mail_hosts, username_hash, tag); |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
663 if (host == NULL) |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
664 str_append(str, "\t"); |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
665 else |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
666 str_printfa(str, "\t%s", net_ip2addr(&host->ip)); |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
667 |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
668 /* get host with default configuration */ |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
669 host = mail_host_get_by_hash(conn->dir->orig_config_hosts, |
18067
a7e830b9b967
director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents:
18065
diff
changeset
|
670 username_hash, tag); |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
671 if (host == NULL) |
19437
ac30316bed82
director: Fixed "doveadm director status user@domain" not to hang due to missing LF.
Timo Sirainen <tss@iki.fi>
parents:
19408
diff
changeset
|
672 str_append(str, "\t\n"); |
11353
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
673 else |
1bc3d5589c5a
doveadm director status user: Show more ways of what user's potential hosts are.
Timo Sirainen <tss@iki.fi>
parents:
11352
diff
changeset
|
674 str_printfa(str, "\t%s\n", net_ip2addr(&host->ip)); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
675 o_stream_nsend(conn->output, str_data(str), str_len(str)); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
676 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11351
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
677 } |
c57c1ff9c5f1
doveadm director status username now returns which server the user is assigned to.
Timo Sirainen <tss@iki.fi>
parents:
11322
diff
changeset
|
678 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
679 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
680 doveadm_cmd_user_list(struct doveadm_connection *conn, const char *const *args) |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
681 { |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
682 struct director_user_iter *iter; |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
683 struct user *user; |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
684 struct ip_addr ip; |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
685 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
686 if (args[0] != NULL && args[0][0] != '\0') { |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
687 if (net_addr2ip(args[0], &ip) < 0) { |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
688 i_error("doveadm sent invalid USER-LIST parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
689 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
690 } |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
691 } else { |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
692 ip.family = 0; |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
693 } |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
694 |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
695 iter = director_iterate_users_init(conn->dir); |
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
696 while ((user = director_iterate_users_next(iter)) != NULL) { |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
697 if (ip.family == 0 || |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
698 net_ip_compare(&ip, &user->host->ip)) T_BEGIN { |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
699 unsigned int expire_time = user->timestamp + |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
700 conn->dir->set->director_user_expire; |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
701 |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
702 o_stream_nsend_str(conn->output, t_strdup_printf( |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
703 "%u\t%u\t%s\n", |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
704 user->username_hash, expire_time, |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
705 net_ip2addr(&user->host->ip))); |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
706 } T_END; |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
707 } |
21075
6a363cb51d7f
director: Code cleanup - added user director_iterate_users_*() wrappers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21074
diff
changeset
|
708 director_iterate_users_deinit(&iter); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
709 o_stream_nsend(conn->output, "\n", 1); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
710 return DOVEADM_DIRECTOR_CMD_RET_OK; |
11823
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
711 } |
4138737f41e6
doveadm: Added "director map" command to list user -> host mappings.
Timo Sirainen <tss@iki.fi>
parents:
11629
diff
changeset
|
712 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
713 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
714 doveadm_cmd_user_move(struct doveadm_connection *conn, const char *const *args) |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
715 { |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
716 unsigned int username_hash; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
717 struct user *user; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
718 struct mail_host *host; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
719 struct ip_addr ip; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
720 |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
721 if (args[0] == NULL || args[1] == NULL || |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
722 net_addr2ip(args[1], &ip) < 0) { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
723 i_error("doveadm sent invalid USER-MOVE parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
724 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
725 } |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
726 host = mail_host_lookup(conn->dir->mail_hosts, &ip); |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
727 if (host == NULL) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
728 o_stream_nsend_str(conn->output, "NOTFOUND\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
729 return DOVEADM_DIRECTOR_CMD_RET_OK; |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
730 } |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
731 |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
732 if (str_to_uint(args[0], &username_hash) < 0) |
21076
ef9d8f4c6c67
director: Code cleanup - moved username_hash generation to director.h
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21075
diff
changeset
|
733 username_hash = director_get_username_hash(conn->dir, args[0]); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
734 |
21079
d6f399a7f672
director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21076
diff
changeset
|
735 user = user_directory_lookup(host->tag->users, username_hash); |
20986
410eacd7ad40
director: Code cleanup - added USER_IS_BEING_KILLED() macro
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20984
diff
changeset
|
736 if (user != NULL && USER_IS_BEING_KILLED(user)) { |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
737 o_stream_nsend_str(conn->output, "TRYAGAIN\n"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
738 return DOVEADM_DIRECTOR_CMD_RET_OK; |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
739 } |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
740 |
21432
14e13ad7efde
director: Ignore doveadm user move if host is already the same.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
741 if (user == NULL || user->host != host) { |
14e13ad7efde
director: Ignore doveadm user move if host is already the same.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
742 director_move_user(conn->dir, conn->dir->self_host, NULL, |
14e13ad7efde
director: Ignore doveadm user move if host is already the same.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
743 username_hash, host); |
21443
2b9164c4299a
director: "doveadm director move" to same host now refreshes user's timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21432
diff
changeset
|
744 } else { |
2b9164c4299a
director: "doveadm director move" to same host now refreshes user's timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21432
diff
changeset
|
745 /* already the correct host. reset the user's timeout. */ |
2b9164c4299a
director: "doveadm director move" to same host now refreshes user's timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21432
diff
changeset
|
746 user_directory_refresh(host->tag->users, user); |
2b9164c4299a
director: "doveadm director move" to same host now refreshes user's timeout
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21432
diff
changeset
|
747 director_update_user(conn->dir, conn->dir->self_host, user); |
21432
14e13ad7efde
director: Ignore doveadm user move if host is already the same.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
748 } |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
749 o_stream_nsend(conn->output, "OK\n", 3); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
750 return DOVEADM_DIRECTOR_CMD_RET_OK; |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
751 } |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
12986
diff
changeset
|
752 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
753 static enum doveadm_director_cmd_ret |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
754 doveadm_cmd_user_kick(struct doveadm_connection *conn, const char *const *args) |
17418
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
755 { |
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
756 if (args[0] == NULL) { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
757 i_error("doveadm sent invalid USER-KICK parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
758 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
17418
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
759 } |
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
760 |
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
761 director_kick_user(conn->dir, conn->dir->self_host, NULL, args[0]); |
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
762 o_stream_nsend(conn->output, "OK\n", 3); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
763 return DOVEADM_DIRECTOR_CMD_RET_OK; |
17418
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
764 } |
64808a9703db
doveadm director kick command added.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
765 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
766 static enum doveadm_director_cmd_ret |
21312
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
767 doveadm_cmd_user_kick_alt(struct doveadm_connection *conn, const char *const *args) |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
768 { |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
769 if (str_array_length(args) < 2) { |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
770 i_error("doveadm sent invalid USER-KICK-ALT parameters"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
771 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
21312
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
772 } |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
773 |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
774 director_kick_user_alt(conn->dir, conn->dir->self_host, NULL, |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
775 args[0], args[1]); |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
776 o_stream_nsend(conn->output, "OK\n", 3); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
777 return DOVEADM_DIRECTOR_CMD_RET_OK; |
21312
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
778 } |
f9db0ad9001e
director: doveadm command handling was missing USER-KICK-ALT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21079
diff
changeset
|
779 |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
780 struct { |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
781 const char *name; |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
782 enum doveadm_director_cmd_ret (*cmd) |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
783 (struct doveadm_connection *conn, const char *const *args); |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
784 enum doveadm_director_cmd_flag flags; |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
785 } doveadm_director_commands[] = { |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
786 { "HOST-LIST", doveadm_cmd_host_list, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
787 { "HOST-LIST-REMOVED", doveadm_cmd_host_list_removed, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
788 { "DIRECTOR-LIST", doveadm_cmd_director_list, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
789 { "DIRECTOR-ADD", doveadm_cmd_director_add, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
790 { "DIRECTOR-REMOVE", doveadm_cmd_director_remove, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
791 { "HOST-SET", doveadm_cmd_host_set, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
792 { "HOST-UPDATE", doveadm_cmd_host_update, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
793 { "HOST-UP", doveadm_cmd_host_up, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
794 { "HOST-DOWN", doveadm_cmd_host_down, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
795 { "HOST-REMOVE", doveadm_cmd_host_remove, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
796 { "HOST-FLUSH", doveadm_cmd_host_flush, DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
797 { "HOST-RESET-USERS", doveadm_cmd_host_reset_users, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
798 { "USER-LOOKUP", doveadm_cmd_user_lookup, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
799 { "USER-LIST", doveadm_cmd_user_list, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
800 { "USER-MOVE", doveadm_cmd_user_move, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
801 { "USER-KICK", doveadm_cmd_user_kick, 0 }, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
802 { "USER-KICK-ALT", doveadm_cmd_user_kick_alt, 0 }, |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
803 }; |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
804 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
805 static void |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
806 doveadm_connection_ring_sync_timeout(struct doveadm_connection *conn) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
807 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
808 doveadm_connection_ring_sync_list_move(conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
809 o_stream_nsend_str(conn->output, "Ring sync timed out\n"); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
810 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
811 doveadm_connection_set_io(conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
812 io_set_pending(conn->io); |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
813 |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
814 i_free_and_null(conn->cmd_pending_args); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
815 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
816 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
817 static void |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
818 doveadm_connection_set_ring_sync_callback(struct doveadm_connection *conn, |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
819 doveadm_connection_ring_sync_callback_t *callback) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
820 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
821 i_assert(conn->ring_sync_callback == NULL); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
822 i_assert(conn->to_ring_sync_abort == NULL); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
823 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
824 conn->ring_sync_callback = callback; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
825 io_remove(&conn->io); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
826 DLLIST_REMOVE(&doveadm_connections, conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
827 DLLIST_PREPEND(&doveadm_ring_sync_pending_connections, conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
828 conn->to_ring_sync_abort = |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
829 timeout_add(DOVEADM_CONNECTION_RING_SYNC_TIMEOUT_MSECS, |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
830 doveadm_connection_ring_sync_timeout, conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
831 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
832 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
833 static void doveadm_connection_ret_ok(struct doveadm_connection *conn) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
834 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
835 o_stream_nsend(conn->output, "OK\n", 3); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
836 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
837 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
838 static enum doveadm_director_cmd_ret |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
839 doveadm_connection_cmd_run(struct doveadm_connection *conn, |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
840 const char *const *args, unsigned int i) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
841 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
842 enum doveadm_director_cmd_ret ret; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
843 |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
844 if ((doveadm_director_commands[i].flags & |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
845 DOVEADM_DIRECTOR_CMD_FLAG_PRE_RING_SYNC) != 0 && |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
846 !conn->dir->ring_synced) { |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
847 /* wait for ring to be synced before running the command */ |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
848 conn->cmd_pending_args = p_strarray_dup(default_pool, args); |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
849 conn->cmd_pending_idx = i; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
850 doveadm_connection_set_ring_sync_callback(conn, |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
851 doveadm_connection_cmd_run_synced); |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
852 return DOVEADM_DIRECTOR_CMD_RET_UNFINISHED; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
853 } |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
854 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
855 ret = doveadm_director_commands[i].cmd(conn, args); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
856 if (ret != DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
857 return ret; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
858 /* Delay sending OK until ring is synced. This way doveadm will know |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
859 whether the call actually succeeded or not. */ |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
860 if (conn->dir->ring_synced) { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
861 /* director is alone */ |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
862 i_assert(conn->dir->right == NULL && conn->dir->left == NULL); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
863 o_stream_nsend(conn->output, "OK\n", 3); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
864 return DOVEADM_DIRECTOR_CMD_RET_OK; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
865 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
866 doveadm_connection_set_ring_sync_callback(conn, doveadm_connection_ret_ok); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
867 return DOVEADM_DIRECTOR_CMD_RET_RING_SYNC_OK; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
868 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
869 |
22537
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
870 static void doveadm_connection_cmd_run_synced(struct doveadm_connection *conn) |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
871 { |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
872 const char **args = conn->cmd_pending_args; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
873 |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
874 conn->cmd_pending_args = NULL; |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
875 (void)doveadm_connection_cmd_run(conn, args, conn->cmd_pending_idx); |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
876 i_free(args); |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
877 } |
4e3e963c32f0
director: Run director/host changing doveadm commands only after ring is synced
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22536
diff
changeset
|
878 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
879 static enum doveadm_director_cmd_ret |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
880 doveadm_connection_cmd(struct doveadm_connection *conn, const char *line) |
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
881 { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
882 const char *cmd, *const *args; |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
883 |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
884 args = t_strsplit_tabescaped(line); |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
885 if (args[0] == NULL) { |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
886 i_error("doveadm sent empty command line"); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
887 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
888 } |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
889 cmd = args[0]; |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
890 args++; |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
891 |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
892 for (unsigned int i = 0; i < N_ELEMENTS(doveadm_director_commands); i++) { |
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
893 if (strcmp(doveadm_director_commands[i].name, cmd) == 0) |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
894 return doveadm_connection_cmd_run(conn, args, i); |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
895 } |
22534
30549d635210
director: Cleanup - Move all doveadm commands into an array.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22510
diff
changeset
|
896 i_error("doveadm sent unknown command: %s", line); |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
897 return DOVEADM_DIRECTOR_CMD_RET_FAIL; |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
898 } |
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
899 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
900 static void doveadm_connection_input(struct doveadm_connection *conn) |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
901 { |
20967
1be6845a989b
director: Code cleanup - moved command handling to its own function.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20963
diff
changeset
|
902 const char *line; |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
903 enum doveadm_director_cmd_ret ret = DOVEADM_DIRECTOR_CMD_RET_OK; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
904 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
905 if (!conn->handshaked) { |
11894
06a7435b6f53
director: If doveadm connection disconnects before handshake, don't loop forever.
Timo Sirainen <tss@iki.fi>
parents:
11823
diff
changeset
|
906 if ((line = i_stream_read_next_line(conn->input)) == NULL) { |
06a7435b6f53
director: If doveadm connection disconnects before handshake, don't loop forever.
Timo Sirainen <tss@iki.fi>
parents:
11823
diff
changeset
|
907 if (conn->input->eof || conn->input->stream_errno != 0) |
06a7435b6f53
director: If doveadm connection disconnects before handshake, don't loop forever.
Timo Sirainen <tss@iki.fi>
parents:
11823
diff
changeset
|
908 doveadm_connection_deinit(&conn); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
909 return; |
11894
06a7435b6f53
director: If doveadm connection disconnects before handshake, don't loop forever.
Timo Sirainen <tss@iki.fi>
parents:
11823
diff
changeset
|
910 } |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
911 |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11373
diff
changeset
|
912 if (!version_string_verify(line, "director-doveadm", |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11373
diff
changeset
|
913 DOVEADM_PROTOCOL_VERSION_MAJOR)) { |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
914 i_error("doveadm not compatible with this server " |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
915 "(mixed old and new binaries?)"); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
916 doveadm_connection_deinit(&conn); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
917 return; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
918 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
919 conn->handshaked = TRUE; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
920 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
921 |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
922 while ((line = i_stream_read_next_line(conn->input)) != NULL && |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
923 ret == DOVEADM_DIRECTOR_CMD_RET_OK) { |
20970
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
924 T_BEGIN { |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
925 ret = doveadm_connection_cmd(conn, line); |
d653bcdff8a2
director: Code cleanup - Give tab-unescaped args to all doveadm command handlers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20969
diff
changeset
|
926 } T_END; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
927 } |
22535
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
928 if (conn->input->eof || conn->input->stream_errno != 0 || |
2805abc195e1
director: Cleanup - Doveadm commands now return enum doveadm_director_cmd_ret
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22534
diff
changeset
|
929 ret == DOVEADM_DIRECTOR_CMD_RET_FAIL) |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
930 doveadm_connection_deinit(&conn); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
931 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
932 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
933 static void doveadm_connection_set_io(struct doveadm_connection *conn) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
934 { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
935 conn->io = io_add(conn->fd, IO_READ, doveadm_connection_input, conn); |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
936 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
937 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
938 struct doveadm_connection * |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
939 doveadm_connection_init(struct director *dir, int fd) |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
940 { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
941 struct doveadm_connection *conn; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
942 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
943 conn = i_new(struct doveadm_connection, 1); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
944 conn->fd = fd; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
945 conn->dir = dir; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
946 conn->input = i_stream_create_fd(conn->fd, 1024, FALSE); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
947 conn->output = o_stream_create_fd(conn->fd, (size_t)-1, FALSE); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
948 o_stream_set_no_error_handling(conn->output, TRUE); |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
949 doveadm_connection_set_io(conn); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14571
diff
changeset
|
950 o_stream_nsend_str(conn->output, DOVEADM_HANDSHAKE); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
951 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
952 DLLIST_PREPEND(&doveadm_connections, conn); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
953 return conn; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
954 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
955 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
956 static void doveadm_connection_deinit(struct doveadm_connection **_conn) |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
957 { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
958 struct doveadm_connection *conn = *_conn; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
959 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
960 *_conn = NULL; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
961 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
962 i_assert(conn->to_ring_sync_abort == NULL); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
963 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
964 if (conn->reset_cmd != NULL) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
965 /* finish the move even if doveadm disconnected */ |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
966 conn->reset_cmd->_conn = NULL; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
967 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
968 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
969 DLLIST_REMOVE(&doveadm_connections, conn); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
970 io_remove(&conn->io); |
11322 | 971 i_stream_unref(&conn->input); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
972 o_stream_unref(&conn->output); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
973 if (close(conn->fd) < 0) |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
974 i_error("close(doveadm connection) failed: %m"); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
975 i_free(conn); |
11373
26cfc1c3a4b1
director: Update connection count when client disconnects.
Timo Sirainen <tss@iki.fi>
parents:
11355
diff
changeset
|
976 |
26cfc1c3a4b1
director: Update connection count when client disconnects.
Timo Sirainen <tss@iki.fi>
parents:
11355
diff
changeset
|
977 master_service_client_connection_destroyed(master_service); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
978 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
979 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
980 static void |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
981 doveadm_connection_ring_sync_list_move(struct doveadm_connection *conn) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
982 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
983 timeout_remove(&conn->to_ring_sync_abort); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
984 DLLIST_REMOVE(&doveadm_ring_sync_pending_connections, conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
985 DLLIST_PREPEND(&doveadm_connections, conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
986 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
987 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
988 void doveadm_connections_deinit(void) |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
989 { |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
990 while (reset_cmds != NULL) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
991 doveadm_reset_cmd_free(reset_cmds); |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
992 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
993 unsigned int pending_count = 0; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
994 while (doveadm_ring_sync_pending_connections != NULL) { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
995 doveadm_connection_ring_sync_list_move(doveadm_ring_sync_pending_connections); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
996 pending_count++; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
997 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
998 if (pending_count > 0) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
999 i_warning("Shutting down while %u doveadm connections were waiting for ring sync", pending_count); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1000 while (doveadm_connections != NULL) { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1001 struct doveadm_connection *conn = doveadm_connections; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1002 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1003 doveadm_connection_deinit(&conn); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1004 } |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1005 } |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1006 |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1007 static void doveadm_connections_continue_reset_cmds(void) |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1008 { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1009 while (reset_cmds != NULL) { |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1010 if (!director_reset_cmd_run(reset_cmds)) |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1011 break; |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1012 } |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20970
diff
changeset
|
1013 } |
22536
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1014 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1015 void doveadm_connections_ring_synced(void) |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1016 { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1017 while (doveadm_ring_sync_pending_connections != NULL) { |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1018 struct doveadm_connection *conn = |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1019 doveadm_ring_sync_pending_connections; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1020 doveadm_connection_ring_sync_callback_t *callback = |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1021 conn->ring_sync_callback; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1022 |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1023 conn->ring_sync_callback = NULL; |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1024 doveadm_connection_ring_sync_list_move(conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1025 doveadm_connection_set_io(conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1026 io_set_pending(conn->io); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1027 callback(conn); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1028 } |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1029 doveadm_connections_continue_reset_cmds(); |
5f09f6aa089b
director: doveadm HOST-* commands now wait for ring sync before returning OK
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22535
diff
changeset
|
1030 } |