annotate src/stats/client.h @ 22715:20415dd0b85a

dsync: Add per-mailbox sync lock that is always used. Both importing and exporting gets the lock before they even sync the mailbox. The lock is kept until the import/export finishes. This guarantees that no matter how dsync is run, two dsyncs can't be working on the same mailbox at the same time. This lock is in addition to the optional per-user lock enabled by the -l parameter. If the -l parameter is used, the same lock timeout is used for the per-mailbox lock. Otherwise 30s timeout is used. This should help to avoid email duplication when replication is enabled for public namespaces, and maybe in some other rare situations as well.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 28 Dec 2017 14:10:23 +0200
parents c51fbe64eae1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13294
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef CLIENT_H
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define CLIENT_H
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 struct client {
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 struct client *prev, *next;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 int fd;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 struct io *io;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 struct istream *input;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 struct ostream *output;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 struct timeout *to_pending;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 pool_t cmd_pool;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 struct client_export_cmd *cmd_export;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 int (*cmd_more)(struct client *client);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 /* command iterators. while non-NULL, they've increased the
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 struct's refcount so it won't be deleted during iteration */
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 unsigned int iter_count;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 struct mail_command *mail_cmd_iter;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 struct mail_session *mail_session_iter;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 struct mail_user *mail_user_iter;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 struct mail_domain *mail_domain_iter;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 struct mail_ip *mail_ip_iter;
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 };
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 struct client *client_create(int fd);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 void client_destroy(struct client **client);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 bool client_is_busy(struct client *client);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 void client_enable_io(struct client *client);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 void clients_destroy_all(void);
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
c51fbe64eae1 Initial implementation of statistics gathering daemon and plugins to feed it.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 #endif