Mercurial > dovecot > core-2.2
annotate src/director/user-directory.h @ 21076:ef9d8f4c6c67
director: Code cleanup - moved username_hash generation to director.h
It's not really user_directory specific. This is especially important
in the following patches that add per-tag user_directories. It's also not
always known which tag the username_hash refers to, so there can't be
different tag-specific username_hash generators.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 20 Oct 2016 20:31:33 +0300 |
parents | 9d4039e2ae25 |
children | 6d37f4dd198d |
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 |
20986
410eacd7ad40
director: Code cleanup - added USER_IS_BEING_KILLED() macro
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20985
diff
changeset
|
4 #define USER_IS_BEING_KILLED(user) \ |
20988
9d4039e2ae25
director: Moved all user killing state to struct director_kill_context
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20986
diff
changeset
|
5 ((user)->kill_ctx != NULL) |
20986
410eacd7ad40
director: Code cleanup - added USER_IS_BEING_KILLED() macro
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20985
diff
changeset
|
6 |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 struct user { |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 /* sorted by time */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 struct user *prev, *next; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 /* 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
|
12 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
|
13 redirected to same server */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 unsigned int username_hash; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 unsigned int timestamp; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 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
|
18 |
20988
9d4039e2ae25
director: Moved all user killing state to struct director_kill_context
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20986
diff
changeset
|
19 /* If non-NULL, don't allow new connections until all |
13045
79f9dce5d5fd
director: Added support for moving user to another server with "doveadm director move".
Timo Sirainen <tss@iki.fi>
parents:
11321
diff
changeset
|
20 directors have killed the user's connections. */ |
20988
9d4039e2ae25
director: Moved all user killing state to struct director_kill_context
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20986
diff
changeset
|
21 struct director_kill_context *kill_ctx; |
14310
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
22 |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
23 /* 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
|
24 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
|
25 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
|
26 unsigned int weak:1; |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 }; |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 /* 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
|
30 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
|
31 struct user_directory * |
21076
ef9d8f4c6c67
director: Code cleanup - moved username_hash generation to director.h
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20988
diff
changeset
|
32 user_directory_init(unsigned int timeout_secs, |
20988
9d4039e2ae25
director: Moved all user killing state to struct director_kill_context
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20986
diff
changeset
|
33 void (*user_free_hook)(struct user *)); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 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
|
35 |
18664
502755a1af5f
director: Include useful statistics in process title.
Timo Sirainen <tss@iki.fi>
parents:
16621
diff
changeset
|
36 /* 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
|
37 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
|
38 /* 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
|
39 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
|
40 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
|
41 /* 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
|
42 struct user * |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 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
|
44 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
|
45 /* Refresh user's timestamp */ |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 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
|
47 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 /* 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
|
49 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
|
50 struct mail_host *host); |
16621
5ef62caea61b
director: Update existing users' timestamps during handshake.
Timo Sirainen <tss@iki.fi>
parents:
14487
diff
changeset
|
51 /* 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
|
52 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
|
53 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
|
54 |
14310
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
55 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
|
56 struct user *user); |
7a26c427fc78
director: Avoid user getting redirected to different servers near its expiration.
Timo Sirainen <tss@iki.fi>
parents:
14292
diff
changeset
|
57 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
|
58 struct user *user); |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
20976
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20974
diff
changeset
|
60 /* Iterate through users in the directory. It's safe to modify user directory |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20974
diff
changeset
|
61 while iterators are running. The moved/removed users will just be skipped |
39d96d2dad95
director: HOST-RESET-USERS moves users more slowly now.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20974
diff
changeset
|
62 over. */ |
11321
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 struct user_directory_iter * |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 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
|
65 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
|
66 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
|
67 |
5f350b5ff6d9
Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 #endif |