Mercurial > dovecot > core-2.2
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 |
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 |