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
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 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