Mercurial > dovecot > core-2.2
annotate src/lib-storage/list/mailbox-list-index.h @ 22698:bdb8b4e03f1b
lib-storage: Rebuild list index when doing doveadm force-resync
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 29 Nov 2017 15:14:02 +0200 |
parents | bc0c97a0c7d6 |
children | 3214091454e6 |
rev | line source |
---|---|
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
1 #ifndef MAILBOX_LIST_INDEX_H |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
2 #define MAILBOX_LIST_INDEX_H |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
13591
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
4 /* Mailbox list index basically contains: |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
5 |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
6 Header contains ID => name mapping. The name isn't the full mailbox name, |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
7 but rather each hierarchy level has its own ID and name. For example a |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
8 mailbox name "foo/bar" (with '/' as separator) would have separate IDs for |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
9 "foo" and "bar" names. |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
10 |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
11 The records contain { parent_uid, uid, name_id } field that can be used to |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
12 build the whole mailbox tree. parent_uid=0 means root, otherwise it's the |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
13 parent node's uid. |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
14 |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
15 Each record also contains GUID for each selectable mailbox. If a mailbox |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
16 is recreated using the same name, its GUID also changes. Note however that |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
17 the UID doesn't change, because the UID refers to the mailbox name, not to |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
18 the mailbox itself. |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
19 |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
20 The records may contain also extensions for allowing mailbox_get_status() |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
21 to return values directly from the mailbox list index. Storage backends |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
22 may also add their own extensions to figure out if a record is up to date. |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
23 */ |
612b8a73ada7
mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents:
13590
diff
changeset
|
24 |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
25 #include "module-context.h" |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
26 #include "mail-types.h" |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
27 #include "mail-storage.h" |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 #include "mailbox-list-private.h" |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 |
17955
93a3335ec0d5
Compiling fix for some systems.
Timo Sirainen <tss@iki.fi>
parents:
17910
diff
changeset
|
30 #include <sys/time.h> |
93a3335ec0d5
Compiling fix for some systems.
Timo Sirainen <tss@iki.fi>
parents:
17910
diff
changeset
|
31 |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
32 #define MAILBOX_LIST_INDEX_HIERARHCY_SEP '~' |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 #define INDEX_LIST_CONTEXT(obj) \ |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
35 MODULE_CONTEXT(obj, mailbox_list_index_module) |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
37 struct mail_index_view; |
18907
46cbde67f50b
lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
17955
diff
changeset
|
38 struct mailbox_index_vsize; |
21538
cbb4cb127366
lib-storage: Fix mailbox list index hook usage
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21532
diff
changeset
|
39 struct mailbox_vfuncs; |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
40 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
41 /* stored in mail_index_record.flags: */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
42 enum mailbox_list_index_flags { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
43 MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = MAIL_DELETED, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
44 MAILBOX_LIST_INDEX_FLAG_NOSELECT = MAIL_DRAFT, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
45 MAILBOX_LIST_INDEX_FLAG_NOINFERIORS = MAIL_ANSWERED, |
21137
6bdcc7190a55
LAYOUT=index: Don't write corrupted mailbox names to box-name header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21131
diff
changeset
|
46 MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME = MAIL_SEEN, |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
47 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
48 /* set during syncing for mailboxes that still exist */ |
13590
6912969d94e8
mailbox list indexes: Code cleanups.
Timo Sirainen <tss@iki.fi>
parents:
13589
diff
changeset
|
49 MAILBOX_LIST_INDEX_FLAG_SYNC_EXISTS = MAIL_FLAGGED |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
50 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
51 |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
52 struct mailbox_list_index_header { |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
53 uint8_t refresh_flag; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
54 /* array of { uint32_t id; char name[]; } */ |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
55 }; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
56 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
57 struct mailbox_list_index_record { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
58 /* points to given id in header */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
59 uint32_t name_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
60 /* parent mailbox's UID, 0 = root */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
61 uint32_t parent_uid; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
62 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
63 /* the following fields are temporarily zero while unknown, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
64 also permanently zero for \NoSelect and \Nonexistent mailboxes: */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
65 |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
12650
diff
changeset
|
66 guid_128_t guid; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
67 uint32_t uid_validity; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
68 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
69 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
70 struct mailbox_list_index_msgs_record { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
71 uint32_t messages; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
72 uint32_t unseen; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
73 uint32_t recent; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
74 uint32_t uidnext; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
75 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
76 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
77 struct mailbox_list_index_node { |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
78 struct mailbox_list_index_node *parent; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
79 struct mailbox_list_index_node *next; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
80 struct mailbox_list_index_node *children; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
81 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
82 uint32_t name_id, uid; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
83 enum mailbox_list_index_flags flags; |
21532
0754351f9f75
LAYOUT=index: Rename mailbox_list_index_node.corrupted_parent to corrupted_ext
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21322
diff
changeset
|
84 /* extension data is corrupted on disk - need to update it */ |
0754351f9f75
LAYOUT=index: Rename mailbox_list_index_node.corrupted_parent to corrupted_ext
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21322
diff
changeset
|
85 bool corrupted_ext; |
22058
57e28dbf5bc1
lib-storage: Fix mailbox list index records without guid having invalid flags
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21538
diff
changeset
|
86 /* flags are corrupted on disk - need to update it */ |
57e28dbf5bc1
lib-storage: Fix mailbox list index records without guid having invalid flags
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21538
diff
changeset
|
87 bool corrupted_flags; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
88 const char *name; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
89 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
90 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
91 struct mailbox_list_index { |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
92 union mailbox_list_module_context module_ctx; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
94 const char *path; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
95 struct mail_index *index; |
15027
fcd480c4a0db
NOTIFY: Implemented SubscriptionChange
Timo Sirainen <tss@iki.fi>
parents:
14923
diff
changeset
|
96 uint32_t ext_id, msgs_ext_id, hmodseq_ext_id, subs_hdr_ext_id; |
19421
82e6a3baa001
Added mailbox { autoexpunge } setting.
Timo Sirainen <tss@iki.fi>
parents:
18907
diff
changeset
|
97 uint32_t vsize_ext_id, first_saved_ext_id; |
17388
60d2cfdc3140
lib-storage: Avoid refreshing mailbox list index too often.
Timo Sirainen <tss@iki.fi>
parents:
17209
diff
changeset
|
98 struct timeval last_refresh_timeval; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
99 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
100 pool_t mailbox_pool; |
14923
96fd2c3bf932
Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents:
14918
diff
changeset
|
101 /* uin32_t id => name */ |
96fd2c3bf932
Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents:
14918
diff
changeset
|
102 HASH_TABLE(void *, char *) mailbox_names; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
103 uint32_t highest_name_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
104 |
16842
ab341f7509b5
LAYOUT=index: Fixed race condition during mailbox creation.
Timo Sirainen <tss@iki.fi>
parents:
16506
diff
changeset
|
105 struct mailbox_list_index_sync_context *sync_ctx; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
106 uint32_t sync_log_file_seq; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
107 uoff_t sync_log_file_offset; |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
108 uint32_t sync_stamp; |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
109 struct timeout *to_refresh; |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
110 |
14923
96fd2c3bf932
Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents:
14918
diff
changeset
|
111 /* uint32_t uid => node */ |
96fd2c3bf932
Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents:
14918
diff
changeset
|
112 HASH_TABLE(void *, struct mailbox_list_index_node *) mailbox_hash; |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
113 struct mailbox_list_index_node *mailbox_tree; |
14342
0274c4132052
mailbox_list_index=yes: Delay opening/creating the index until it's needed.
Timo Sirainen <tss@iki.fi>
parents:
14334
diff
changeset
|
114 |
15864
f703e1fd7c21
mailbox_list_index: Delay allocating the index so mbox can override the index path.
Timo Sirainen <tss@iki.fi>
parents:
15848
diff
changeset
|
115 unsigned int pending_init:1; |
14342
0274c4132052
mailbox_list_index=yes: Delay opening/creating the index until it's needed.
Timo Sirainen <tss@iki.fi>
parents:
14334
diff
changeset
|
116 unsigned int opened:1; |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
117 unsigned int syncing:1; |
15267
b5a5f5139148
lib-storage: Avoid assert-crashing when updating mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
15167
diff
changeset
|
118 unsigned int updating_status:1; |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
119 unsigned int has_backing_store:1; |
17209
6fd12fbe6848
lib-storage: Avoid rebuilding the whole mailbox list index when one mailbox changes.
Timo Sirainen <tss@iki.fi>
parents:
17152
diff
changeset
|
120 unsigned int index_last_check_changed:1; |
21222
60fee9dbcfb7
lib-storage: Rename mailbox_list_index.corrupted to corrupted_names_or_parents
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21137
diff
changeset
|
121 unsigned int corrupted_names_or_parents:1; |
21226
a4d4a5dffa09
lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21222
diff
changeset
|
122 unsigned int handling_corruption:1; |
a4d4a5dffa09
lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21222
diff
changeset
|
123 unsigned int call_corruption_callback:1; |
22697
bc0c97a0c7d6
LAYOUT=index: Rebuild list index if INBOX is missing on inbox=yes namespace
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22113
diff
changeset
|
124 unsigned int rebuild_on_missing_inbox:1; |
22698
bdb8b4e03f1b
lib-storage: Rebuild list index when doing doveadm force-resync
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22697
diff
changeset
|
125 unsigned int force_resynced:1; |
bdb8b4e03f1b
lib-storage: Rebuild list index when doing doveadm force-resync
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22697
diff
changeset
|
126 unsigned int force_resync_failed:1; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
129 struct mailbox_list_index_iterate_context { |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 struct mailbox_list_iterate_context ctx; |
16427
e90e9a7c4ff8
layout=index: Allow mailbox create/delete/rename during mailbox list iteration.
Timo Sirainen <tss@iki.fi>
parents:
15864
diff
changeset
|
131 pool_t mailbox_pool; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 struct mailbox_info info; |
14334
6cb102aa5d63
mailbox_list_index=yes iteration: Don't allocate returned mailbox names from data stack.
Timo Sirainen <tss@iki.fi>
parents:
14243
diff
changeset
|
134 pool_t info_pool; |
6cb102aa5d63
mailbox_list_index=yes iteration: Don't allocate returned mailbox names from data stack.
Timo Sirainen <tss@iki.fi>
parents:
14243
diff
changeset
|
135 |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21316
diff
changeset
|
136 size_t parent_len; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
137 string_t *path; |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
138 struct mailbox_list_index_node *next_node; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 unsigned int failed:1; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
143 extern MODULE_CONTEXT_DEFINE(mailbox_list_index_module, |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
144 &mailbox_list_module_register); |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 |
13589
75679aca405a
mailbox list indexes: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents:
13588
diff
changeset
|
146 void mailbox_list_index_set_index_error(struct mailbox_list *list); |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
147 struct mailbox_list_index_node * |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
148 mailbox_list_index_lookup(struct mailbox_list *list, const char *name); |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
149 struct mailbox_list_index_node * |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
150 mailbox_list_index_lookup_uid(struct mailbox_list_index *ilist, uint32_t uid); |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
151 void mailbox_list_index_node_get_path(const struct mailbox_list_index_node *node, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
152 char sep, string_t *str); |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
153 void mailbox_list_index_node_unlink(struct mailbox_list_index *ilist, |
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
154 struct mailbox_list_index_node *node); |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
155 |
17152
346981286d20
lib-storage: Fixed assert-crash in mailbox rename with layout=index
Timo Sirainen <tss@iki.fi>
parents:
16842
diff
changeset
|
156 int mailbox_list_index_index_open(struct mailbox_list *list); |
14243
ba2b4f8a1bb1
mailbox list indexes: Avoid unnecessary refresh flag writes.
Timo Sirainen <tss@iki.fi>
parents:
13591
diff
changeset
|
157 bool mailbox_list_index_need_refresh(struct mailbox_list_index *ilist, |
ba2b4f8a1bb1
mailbox list indexes: Avoid unnecessary refresh flag writes.
Timo Sirainen <tss@iki.fi>
parents:
13591
diff
changeset
|
158 struct mail_index_view *view); |
17910
96f79038038f
lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents:
17388
diff
changeset
|
159 /* Refresh the index, but only if it hasn't been refreshed "recently" |
96f79038038f
lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents:
17388
diff
changeset
|
160 (= within this same ioloop run) */ |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
161 int mailbox_list_index_refresh(struct mailbox_list *list); |
17910
96f79038038f
lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents:
17388
diff
changeset
|
162 /* Refresh the index regardless of when the last refresh was done. */ |
96f79038038f
lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents:
17388
diff
changeset
|
163 int mailbox_list_index_refresh_force(struct mailbox_list *list); |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
164 void mailbox_list_index_refresh_later(struct mailbox_list *list); |
21226
a4d4a5dffa09
lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21222
diff
changeset
|
165 int mailbox_list_index_handle_corruption(struct mailbox_list *list); |
a4d4a5dffa09
lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21222
diff
changeset
|
166 int mailbox_list_index_set_uncorrupted(struct mailbox_list *list); |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
167 |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
168 struct mailbox_list_index_node * |
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
169 mailbox_list_index_node_find_sibling(struct mailbox_list_index_node *node, |
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
170 const char *name); |
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
171 void mailbox_list_index_reset(struct mailbox_list_index *ilist); |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
172 int mailbox_list_index_parse(struct mailbox_list *list, |
13589
75679aca405a
mailbox list indexes: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents:
13588
diff
changeset
|
173 struct mail_index_view *view, bool force); |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
174 |
13587
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
175 struct mailbox_list_iterate_context * |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
176 mailbox_list_index_iter_init(struct mailbox_list *list, |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
177 const char *const *patterns, |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
178 enum mailbox_list_iter_flags flags); |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
179 const struct mailbox_info * |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
180 mailbox_list_index_iter_next(struct mailbox_list_iterate_context *ctx); |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
181 int mailbox_list_index_iter_deinit(struct mailbox_list_iterate_context *ctx); |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
182 |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
183 bool mailbox_list_index_status(struct mailbox_list *list, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
184 struct mail_index_view *view, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
185 uint32_t seq, enum mailbox_status_items items, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
186 struct mailbox_status *status_r, |
18907
46cbde67f50b
lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
17955
diff
changeset
|
187 uint8_t *mailbox_guid, |
46cbde67f50b
lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
17955
diff
changeset
|
188 struct mailbox_index_vsize *vsize_r); |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
189 void mailbox_list_index_status_set_info_flags(struct mailbox *box, uint32_t uid, |
12650
0cadba9597cb
lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents:
12645
diff
changeset
|
190 enum mailbox_info_flags *flags); |
15848
2529f4e12665
lib-storage: Fixed mailbox_update() when using mailbox_list_index=yes
Timo Sirainen <tss@iki.fi>
parents:
15412
diff
changeset
|
191 void mailbox_list_index_update_mailbox_index(struct mailbox *box, |
2529f4e12665
lib-storage: Fixed mailbox_update() when using mailbox_list_index=yes
Timo Sirainen <tss@iki.fi>
parents:
15412
diff
changeset
|
192 const struct mailbox_update *update); |
12650
0cadba9597cb
lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents:
12645
diff
changeset
|
193 |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
194 int mailbox_list_index_notify_init(struct mailbox_list *list, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
195 enum mailbox_list_notify_event mask, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
196 struct mailbox_list_notify **notify_r); |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
197 void mailbox_list_index_notify_deinit(struct mailbox_list_notify *notify); |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
198 int mailbox_list_index_notify_next(struct mailbox_list_notify *notify, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
199 const struct mailbox_list_notify_rec **rec_r); |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
200 void mailbox_list_index_notify_wait(struct mailbox_list_notify *notify, |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
201 void (*callback)(void *context), |
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
202 void *context); |
22081
c5eae96dcd71
lib-storage: Implement mailbox_list_notify_flush()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22058
diff
changeset
|
203 void mailbox_list_index_notify_flush(struct mailbox_list_notify *notify); |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
204 |
21538
cbb4cb127366
lib-storage: Fix mailbox list index hook usage
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21532
diff
changeset
|
205 void mailbox_list_index_status_init_mailbox(struct mailbox_vfuncs *v); |
cbb4cb127366
lib-storage: Fix mailbox list index hook usage
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21532
diff
changeset
|
206 void mailbox_list_index_backend_init_mailbox(struct mailbox *box, |
cbb4cb127366
lib-storage: Fix mailbox list index hook usage
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21532
diff
changeset
|
207 struct mailbox_vfuncs *v); |
15864
f703e1fd7c21
mailbox_list_index: Delay allocating the index so mbox can override the index path.
Timo Sirainen <tss@iki.fi>
parents:
15848
diff
changeset
|
208 void mailbox_list_index_status_init_finish(struct mailbox_list *list); |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 #endif |