annotate src/director/mail-host.h @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 7163028a9f90
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef MAIL_HOST_H
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define MAIL_HOST_H
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
15187
02451e967a06 Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents: 11353
diff changeset
4 #include "net.h"
21077
b2418f9c5a54 director: Code cleanup - Reorder includes
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21072
diff changeset
5 #include "user-directory.h"
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
7 struct mail_host_list;
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
8
21079
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
9 struct mail_vhost {
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
10 unsigned int hash;
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
11 struct mail_host *host;
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
12 };
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
13
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
14 /* mail_tags aren't removed/freed before mail_hosts_deinit(), so it's safe
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
15 to add pointers to them. */
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
16 struct mail_tag {
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
17 /* "" = no tag */
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
18 char *name;
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
19 ARRAY(struct mail_vhost) vhosts;
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
20 /* temporary user -> host associations */
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
21 struct user_directory *users;
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
22 };
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
23 ARRAY_DEFINE_TYPE(mail_tag, struct mail_tag *);
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
24
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 struct mail_host {
19407
39cfca637d60 director: Code cleanup - make most mail_host_*() list parameters unnecessary.
Timo Sirainen <tss@iki.fi>
parents: 19310
diff changeset
26 struct mail_host_list *list;
39cfca637d60 director: Code cleanup - make most mail_host_*() list parameters unnecessary.
Timo Sirainen <tss@iki.fi>
parents: 19310
diff changeset
27
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 unsigned int user_count;
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 unsigned int vhost_count;
18729
0ee3e734249a director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents: 18067
diff changeset
30 /* server up/down. down=TRUE has effectively the same result as if
0ee3e734249a director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents: 18067
diff changeset
31 vhost_count=0. */
0ee3e734249a director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents: 18067
diff changeset
32 bool down;
0ee3e734249a director: Added "up" vs "down" states and doveadm director up/down commands.
Timo Sirainen <tss@iki.fi>
parents: 18067
diff changeset
33 time_t last_updown_change;
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 struct ip_addr ip;
22641
7163028a9f90 director: Add mail_host.ip_str
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22538
diff changeset
36 char *ip_str;
19310
7f718c840aff director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 19291
diff changeset
37 char *hostname;
19411
0e05efd14b39 director: Fixed backend selection when multiple tags were used.
Timo Sirainen <tss@iki.fi>
parents: 19409
diff changeset
38 struct mail_tag *tag;
19287
0f9d4f1a083d director: Don't become desynced if two directors change the same backend in incompatible ways.
Timo Sirainen <tss@iki.fi>
parents: 18729
diff changeset
39
0f9d4f1a083d director: Don't become desynced if two directors change the same backend in incompatible ways.
Timo Sirainen <tss@iki.fi>
parents: 18729
diff changeset
40 /* host was recently changed and ring hasn't synced yet since */
0f9d4f1a083d director: Don't become desynced if two directors change the same backend in incompatible ways.
Timo Sirainen <tss@iki.fi>
parents: 18729
diff changeset
41 unsigned int desynced:1;
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 ARRAY_DEFINE_TYPE(mail_host, struct mail_host *);
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
45 struct mail_host *
18067
a7e830b9b967 director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents: 18065
diff changeset
46 mail_host_add_ip(struct mail_host_list *list, const struct ip_addr *ip,
19409
11a913488054 director: Code cleanup - rename tag to tag_name in mail_host_*() parameters.
Timo Sirainen <tss@iki.fi>
parents: 19408
diff changeset
47 const char *tag_name);
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
48 struct mail_host *
19310
7f718c840aff director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 19291
diff changeset
49 mail_host_add_hostname(struct mail_host_list *list, const char *hostname,
19409
11a913488054 director: Code cleanup - rename tag to tag_name in mail_host_*() parameters.
Timo Sirainen <tss@iki.fi>
parents: 19408
diff changeset
50 const struct ip_addr *ip, const char *tag_name);
19310
7f718c840aff director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 19291
diff changeset
51 struct mail_host *
22538
0819f28fc76b director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 21842
diff changeset
52 mail_host_add_hostname(struct mail_host_list *list, const char *hostname,
0819f28fc76b director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 21842
diff changeset
53 const struct ip_addr *ip, const char *tag);
0819f28fc76b director: Remember backends' hostnames and send them in login reply.
Timo Sirainen <tss@iki.fi>
parents: 21842
diff changeset
54 struct mail_host *
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
55 mail_host_lookup(struct mail_host_list *list, const struct ip_addr *ip);
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
56 struct mail_host *
18067
a7e830b9b967 director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents: 18065
diff changeset
57 mail_host_get_by_hash(struct mail_host_list *list, unsigned int hash,
19409
11a913488054 director: Code cleanup - rename tag to tag_name in mail_host_*() parameters.
Timo Sirainen <tss@iki.fi>
parents: 19408
diff changeset
58 const char *tag_name);
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
60 int mail_hosts_parse_and_add(struct mail_host_list *list,
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
61 const char *hosts_string);
21072
f670c77eafcb director: const mail_host in mail_host_get_tag
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 19411
diff changeset
62 const char *mail_host_get_tag(const struct mail_host *host);
19409
11a913488054 director: Code cleanup - rename tag to tag_name in mail_host_*() parameters.
Timo Sirainen <tss@iki.fi>
parents: 19408
diff changeset
63 void mail_host_set_tag(struct mail_host *host, const char *tag_name);
21842
86e52ff70044 director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 21079
diff changeset
64 void mail_host_set_down(struct mail_host *host, bool down, time_t timestamp,
86e52ff70044 director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 21079
diff changeset
65 const char *log_prefix);
86e52ff70044 director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 21079
diff changeset
66 void mail_host_set_vhost_count(struct mail_host *host, unsigned int vhost_count,
86e52ff70044 director: Log vhost count changes and HOST-UP/DOWN
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 21079
diff changeset
67 const char *log_prefix);
19407
39cfca637d60 director: Code cleanup - make most mail_host_*() list parameters unnecessary.
Timo Sirainen <tss@iki.fi>
parents: 19310
diff changeset
68 void mail_host_remove(struct mail_host *host);
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
19287
0f9d4f1a083d director: Don't become desynced if two directors change the same backend in incompatible ways.
Timo Sirainen <tss@iki.fi>
parents: 18729
diff changeset
70 void mail_hosts_set_synced(struct mail_host_list *list);
19291
eb9b9519db7a director: Added mail_hosts_hash(), which identifies the current mail_hosts configuration.
Timo Sirainen <tss@iki.fi>
parents: 19287
diff changeset
71 unsigned int mail_hosts_hash(struct mail_host_list *list);
18067
a7e830b9b967 director: Added support for backend cluster "tags".
Timo Sirainen <tss@iki.fi>
parents: 18065
diff changeset
72 bool mail_hosts_have_usable(struct mail_host_list *list);
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
73 const ARRAY_TYPE(mail_host) *mail_hosts_get(struct mail_host_list *list);
19411
0e05efd14b39 director: Fixed backend selection when multiple tags were used.
Timo Sirainen <tss@iki.fi>
parents: 19409
diff changeset
74 bool mail_hosts_have_tags(struct mail_host_list *list);
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75
21079
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
76 const ARRAY_TYPE(mail_tag) *mail_hosts_get_tags(struct mail_host_list *list);
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
77 struct mail_tag *
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
78 mail_tag_find(struct mail_host_list *list, const char *tag_name);
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
79 struct user *
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
80 mail_hosts_find_user(struct mail_host_list *list, const char *tag_name,
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
81 unsigned int username_hash);
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
82
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
83 struct mail_host_list *
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
84 mail_hosts_init(unsigned int user_expire_secs, bool consistent_hashing,
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
85 user_free_hook_t *user_free_hook);
11352
19336bddada2 director: Code cleanup - keep mail hosts in a struct rather than in static variables.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
86 void mail_hosts_deinit(struct mail_host_list **list);
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87
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
88 struct mail_host_list *mail_hosts_dup(const struct mail_host_list *src);
21079
d6f399a7f672 director: Keep per-tag directory
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21077
diff changeset
89 void mail_hosts_sort_users(struct mail_host_list *list);
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
90
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 #endif