Mercurial > dovecot > core-2.2
annotate src/director/user-directory.h @ 18664:502755a1af5f
director: Include useful statistics in process title.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 13 May 2015 04:11:34 +0300 |
parents | 5ef62caea61b |
children | 51ee438392c7 |
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 USER_DIRECTORY_H |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 #define USER_DIRECTORY_H |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
4 enum user_kill_state { |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
5 /* User isn't being killed */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
6 USER_KILL_STATE_NONE, |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
7 /* We're still killing the user's connections */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
8 USER_KILL_STATE_KILLING, |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
9 /* Like above, but our left side already announced it was finished |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
10 with killing its user connections */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
11 USER_KILL_STATE_KILLING_NOTIFY_RECEIVED, |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
12 /* We're done killing, but we have to wait for the left side to |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
13 finish killing its user connections before sending USER-KILLED to |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
14 our right side */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
15 USER_KILL_STATE_KILLED_WAITING_FOR_NOTIFY, |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
16 /* We're done killing, but waiting for USER-KILLED-EVERYWHERE |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
17 notification until this state gets reset. */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
18 USER_KILL_STATE_KILLED_WAITING_FOR_EVERYONE, |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
19 /* Wait for a while for the user connections to actually die */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
20 USER_KILL_STATE_DELAY |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
21 }; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
22 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 struct user { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 /* sorted by time */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 struct user *prev, *next; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 /* first 32 bits of MD5(username). collisions are quite unlikely, but |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 even if they happen it doesn't matter - the users are just |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 redirected to same server */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 unsigned int username_hash; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 unsigned int timestamp; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 struct mail_host *host; |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
34 |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
35 /* Move timeout to make sure user's connections won't silently hang |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
36 indefinitely if there is some trouble moving it. */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
37 struct timeout *to_move; |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
38 /* If not USER_KILL_STATE_NONE, don't allow new connections until all |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
39 directors have killed the user's connections. */ |
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
40 enum user_kill_state kill_state; |
14310
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
41 |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
42 /* TRUE, if the user's timestamp was close to being expired and we're |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
43 now doing a ring-wide sync for this user to make sure we don't |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
44 assign conflicting hosts to it */ |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
45 unsigned int weak:1; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 }; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 /* Create a new directory. Users are dropped if their time gets older |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 than timeout_secs. */ |
14292
817ef4c9f1f3
Added director_username_hash setting to specify what part of the username is hashed.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
50 struct user_directory * |
817ef4c9f1f3
Added director_username_hash setting to specify what part of the username is hashed.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
51 user_directory_init(unsigned int timeout_secs, const char *username_hash_fmt); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 void user_directory_deinit(struct user_directory **dir); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 |
18664
502755a1af5f
director: Include useful statistics in process title.
Timo Sirainen <tss@iki.fi>
parents:
16621
diff
changeset
|
54 /* Returns the number of users currently in directory. */ |
502755a1af5f
director: Include useful statistics in process title.
Timo Sirainen <tss@iki.fi>
parents:
16621
diff
changeset
|
55 unsigned int user_directory_count(struct user_directory *dir); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 /* Look up username from directory. Returns NULL if not found. */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 struct user *user_directory_lookup(struct user_directory *dir, |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 unsigned int username_hash); |
14487
45be27ff3414
director: Removed special (time_t)-1 code, it's not actually needed.
Timo Sirainen <tss@iki.fi>
parents:
14468
diff
changeset
|
59 /* Add a user to directory and return it. */ |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 struct user * |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 user_directory_add(struct user_directory *dir, unsigned int username_hash, |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 struct mail_host *host, time_t timestamp); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 /* Refresh user's timestamp */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 void user_directory_refresh(struct user_directory *dir, struct user *user); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 /* Remove all users that have pointers to given host */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 void user_directory_remove_host(struct user_directory *dir, |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 struct mail_host *host); |
16621
5ef62caea61b
director: Update existing users' timestamps during handshake.
Timo Sirainen <tss@iki.fi>
parents:
14487
diff
changeset
|
69 /* Sort users based on the timestamp. This is called only after updating |
5ef62caea61b
director: Update existing users' timestamps during handshake.
Timo Sirainen <tss@iki.fi>
parents:
14487
diff
changeset
|
70 timestamps based on remote director's user list after handshake. */ |
5ef62caea61b
director: Update existing users' timestamps during handshake.
Timo Sirainen <tss@iki.fi>
parents:
14487
diff
changeset
|
71 void user_directory_sort(struct user_directory *dir); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 |
14292
817ef4c9f1f3
Added director_username_hash setting to specify what part of the username is hashed.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
73 unsigned int user_directory_get_username_hash(struct user_directory *dir, |
817ef4c9f1f3
Added director_username_hash setting to specify what part of the username is hashed.
Timo Sirainen <tss@iki.fi>
parents:
13045
diff
changeset
|
74 const char *username); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 |
14310
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
76 bool user_directory_user_is_recently_updated(struct user_directory *dir, |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
77 struct user *user); |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
78 bool user_directory_user_is_near_expiring(struct user_directory *dir, |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
79 struct user *user); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 struct user_directory_iter * |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 user_directory_iter_init(struct user_directory *dir); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 struct user *user_directory_iter_next(struct user_directory_iter *iter); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 void user_directory_iter_deinit(struct user_directory_iter **iter); |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 #endif |