Mercurial > dovecot > core-2.2
annotate src/lib-storage/list/mailbox-list-index.h @ 21131:a93530968d51
lib-storage: Fix invalid parents in LAYOUT=index
Previously it just kept complaining without fixing the errors.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 16 Nov 2016 01:03:20 +0200 |
parents | de3d25050d97 |
children | 6bdcc7190a55 |
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 '~' |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
33 #define MAILBOX_LIST_INDEX_PREFIX "dovecot.list.index" |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 #define INDEX_LIST_CONTEXT(obj) \ |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
36 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
|
37 |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
38 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
|
39 struct mailbox_index_vsize; |
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, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
46 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
47 /* set during syncing for mailboxes that still exist */ |
13590
6912969d94e8
mailbox list indexes: Code cleanups.
Timo Sirainen <tss@iki.fi>
parents:
13589
diff
changeset
|
48 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
|
49 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
50 |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
51 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
|
52 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
|
53 /* 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
|
54 }; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
55 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
56 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
|
57 /* 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
|
58 uint32_t name_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
59 /* 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
|
60 uint32_t parent_uid; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
61 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
62 /* 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
|
63 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
|
64 |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
12650
diff
changeset
|
65 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
|
66 uint32_t uid_validity; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
67 }; |
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 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
|
70 uint32_t messages; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
71 uint32_t unseen; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
72 uint32_t recent; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
73 uint32_t uidnext; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
74 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
75 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
76 struct mailbox_list_index_node { |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
77 struct mailbox_list_index_node *parent; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
78 struct mailbox_list_index_node *next; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
79 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
|
80 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
81 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
|
82 enum mailbox_list_index_flags flags; |
21131
a93530968d51
lib-storage: Fix invalid parents in LAYOUT=index
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21129
diff
changeset
|
83 /* parent_uid is corrupted on disk - need to update it */ |
a93530968d51
lib-storage: Fix invalid parents in LAYOUT=index
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21129
diff
changeset
|
84 bool corrupted_parent; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
85 const char *name; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
86 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
87 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
88 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
|
89 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
|
90 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
91 const char *path; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
92 struct mail_index *index; |
15027
fcd480c4a0db
NOTIFY: Implemented SubscriptionChange
Timo Sirainen <tss@iki.fi>
parents:
14923
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
97 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
|
98 /* 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
|
99 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
|
100 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
|
101 |
16842
ab341f7509b5
LAYOUT=index: Fixed race condition during mailbox creation.
Timo Sirainen <tss@iki.fi>
parents:
16506
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 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
|
106 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
|
107 |
14923
96fd2c3bf932
Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents:
14918
diff
changeset
|
108 /* 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
|
109 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
|
110 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
|
111 |
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
|
112 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
|
113 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
|
114 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
|
115 unsigned int updating_status:1; |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
116 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
|
117 unsigned int index_last_check_changed:1; |
21129
de3d25050d97
lib-storage: If LAYOUT=index loses mailbox names, write the generated ones to index.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19421
diff
changeset
|
118 unsigned int corrupted:1; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
121 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
|
122 struct mailbox_list_iterate_context ctx; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 struct mailbox_list_iterate_context *backend_ctx; |
16427
e90e9a7c4ff8
layout=index: Allow mailbox create/delete/rename during mailbox list iteration.
Timo Sirainen <tss@iki.fi>
parents:
15864
diff
changeset
|
124 pool_t mailbox_pool; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 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
|
127 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
|
128 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
129 unsigned int parent_len; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
130 string_t *path; |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
131 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
|
132 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 unsigned int failed:1; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
136 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
|
137 &mailbox_list_module_register); |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 |
13589
75679aca405a
mailbox list indexes: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents:
13588
diff
changeset
|
139 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
|
140 struct mailbox_list_index_node * |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
141 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
|
142 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
|
143 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
|
144 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
|
145 char sep, string_t *str); |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
146 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
|
147 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
|
148 |
17152
346981286d20
lib-storage: Fixed assert-crash in mailbox rename with layout=index
Timo Sirainen <tss@iki.fi>
parents:
16842
diff
changeset
|
149 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
|
150 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
|
151 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
|
152 /* 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
|
153 (= within this same ioloop run) */ |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
154 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
|
155 /* 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
|
156 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
|
157 void mailbox_list_index_refresh_later(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
|
158 |
13588
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
159 struct mailbox_list_index_node * |
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
160 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
|
161 const char *name); |
940ddec22822
mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13587
diff
changeset
|
162 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
|
163 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
|
164 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
|
165 |
13587
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
166 struct mailbox_list_iterate_context * |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
167 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
|
168 const char *const *patterns, |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
169 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
|
170 const struct mailbox_info * |
cd7b56e965d2
mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
13586
diff
changeset
|
171 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
|
172 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
|
173 |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 |
14898
a16d77a075bb
lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
14342
diff
changeset
|
185 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
|
186 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
|
187 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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 |
15167
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
195 void mailbox_list_index_status_init_mailbox(struct mailbox *box); |
0fa075f2e85a
lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents:
15081
diff
changeset
|
196 void mailbox_list_index_backend_init_mailbox(struct mailbox *box); |
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
|
197 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
|
198 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 #endif |