Mercurial > dovecot > core-2.2
annotate src/lib-index/mail-index-sync-private.h @ 22576:707ae9de3812
lib: istream-multiplex - Minor code cleanup
Avoid propagating the error twice, and avoid any confusion about what "got"
actually contains.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 05 Oct 2017 20:24:11 +0300 |
parents | 3b909cd1264b |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6373
diff
changeset
|
1 #ifndef MAIL_INDEX_SYNC_PRIVATE_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6373
diff
changeset
|
2 #define MAIL_INDEX_SYNC_PRIVATE_H |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
11221
204bb387aeed
lib-index: mail_index_sync_ext_atomic_inc() does now better error checking.
Timo Sirainen <tss@iki.fi>
parents:
10380
diff
changeset
|
4 #include "mail-index-private.h" |
2954
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
5 #include "mail-transaction-log.h" |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
6 |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
7 struct uid_range { |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
8 uint32_t uid1, uid2; |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
9 }; |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
10 ARRAY_DEFINE_TYPE(uid_range, struct uid_range); |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
11 |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3191
diff
changeset
|
12 struct mail_index_sync_list { |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4279
diff
changeset
|
13 const ARRAY_TYPE(uid_range) *array; |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3191
diff
changeset
|
14 unsigned int idx; |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3253
diff
changeset
|
15 unsigned int keyword_idx:31; |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3253
diff
changeset
|
16 unsigned int keyword_remove:1; |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3191
diff
changeset
|
17 }; |
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3191
diff
changeset
|
18 |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
19 struct mail_index_expunge_handler { |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
20 mail_index_expunge_handler_t *handler; |
4490
56d17f2e1d66
Added support for calling expunge handler for an extension even if the
Timo Sirainen <tss@iki.fi>
parents:
4451
diff
changeset
|
21 void *context; |
56d17f2e1d66
Added support for calling expunge handler for an extension even if the
Timo Sirainen <tss@iki.fi>
parents:
4451
diff
changeset
|
22 void **sync_context; |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
23 uint32_t record_offset; |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
24 }; |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
25 |
2285
afb81e31b989
fixing crashes from last changes
Timo Sirainen <tss@iki.fi>
parents:
2276
diff
changeset
|
26 struct mail_index_sync_map_ctx { |
afb81e31b989
fixing crashes from last changes
Timo Sirainen <tss@iki.fi>
parents:
2276
diff
changeset
|
27 struct mail_index_view *view; |
7620 | 28 struct mail_index_modseq_sync *modseq_ctx; |
6348
ef1c7b2acc10
Only index extension indexes are now called "ext_id". For map extension
Timo Sirainen <tss@iki.fi>
parents:
6346
diff
changeset
|
29 uint32_t cur_ext_map_idx; |
20323
07f21d0fb517
lib-index: Fixes to handling resized records.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
14920
diff
changeset
|
30 uint32_t cur_ext_record_size; |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
31 |
5255
005d73928f8f
Don't set log sync position right after extension introduction, unless it's
Timo Sirainen <tss@iki.fi>
parents:
5065
diff
changeset
|
32 uint32_t ext_intro_seq; |
5777
a8926e90df2a
Update log_file_head_offset when replacing current syncing map.
Timo Sirainen <tss@iki.fi>
parents:
5769
diff
changeset
|
33 uoff_t ext_intro_offset, ext_intro_end_offset; |
5255
005d73928f8f
Don't set log sync position right after extension introduction, unless it's
Timo Sirainen <tss@iki.fi>
parents:
5065
diff
changeset
|
34 |
14920
a097ef0a9d6d
Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents:
14230
diff
changeset
|
35 ARRAY(struct mail_index_expunge_handler) expunge_handlers; |
a097ef0a9d6d
Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents:
14230
diff
changeset
|
36 ARRAY(void *) extra_contexts; |
6346
5dcd55d1a47f
Complain about unknown extension introduction IDs in log only once per sync.
Timo Sirainen <tss@iki.fi>
parents:
6167
diff
changeset
|
37 buffer_t *unknown_extensions; |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
38 |
2869
d2daf90c79f1
Cache invalidating needed to hook into view syncing as well.
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
39 enum mail_index_sync_handler_type type; |
d2daf90c79f1
Cache invalidating needed to hook into view syncing as well.
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
40 |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
41 unsigned int sync_handlers_initialized:1; |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
42 unsigned int expunge_handlers_set:1; |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
43 unsigned int expunge_handlers_used:1; |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
44 unsigned int cur_ext_ignore:1; |
6373
06818dd6a952
Make sure extensions updates don't modify keywords.
Timo Sirainen <tss@iki.fi>
parents:
6348
diff
changeset
|
45 unsigned int internal_update:1; /* used by keywords for ext_intro */ |
5820
e59892590a02
Handle losing index file better. Handle fsck better.
Timo Sirainen <tss@iki.fi>
parents:
5785
diff
changeset
|
46 unsigned int errors:1; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
2050
ee1095ccfd23
Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents:
2037
diff
changeset
|
49 extern struct mail_transaction_map_functions mail_index_map_sync_funcs; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
51 void mail_index_sync_map_init(struct mail_index_sync_map_ctx *sync_map_ctx, |
2869
d2daf90c79f1
Cache invalidating needed to hook into view syncing as well.
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
52 struct mail_index_view *view, |
d2daf90c79f1
Cache invalidating needed to hook into view syncing as well.
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
53 enum mail_index_sync_handler_type type); |
d2daf90c79f1
Cache invalidating needed to hook into view syncing as well.
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
54 void mail_index_sync_map_deinit(struct mail_index_sync_map_ctx *sync_map_ctx); |
5853
d9f319a9d6e0
mail_index_map now contains pointer to index, so all functions taking map
Timo Sirainen <tss@iki.fi>
parents:
5820
diff
changeset
|
55 int mail_index_sync_map(struct mail_index_map **map, |
21087
3b909cd1264b
lib-index: Improve error messages when transaction log is unexpectedly lost
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20323
diff
changeset
|
56 enum mail_index_sync_handler_type type, bool force, |
3b909cd1264b
lib-index: Improve error messages when transaction log is unexpectedly lost
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20323
diff
changeset
|
57 const char *sync_reason); |
2050
ee1095ccfd23
Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents:
2037
diff
changeset
|
58 |
2762
a1c7e92c1839
New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
59 int mail_index_sync_record(struct mail_index_sync_map_ctx *ctx, |
a1c7e92c1839
New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
60 const struct mail_transaction_header *hdr, |
a1c7e92c1839
New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
61 const void *data); |
a1c7e92c1839
New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
62 |
5689
c2362f144f15
Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents:
5643
diff
changeset
|
63 struct mail_index_map * |
c2362f144f15
Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents:
5643
diff
changeset
|
64 mail_index_sync_get_atomic_map(struct mail_index_sync_map_ctx *ctx); |
2954
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
65 |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
66 void mail_index_sync_init_expunge_handlers(struct mail_index_sync_map_ctx *ctx); |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
67 void |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
68 mail_index_sync_deinit_expunge_handlers(struct mail_index_sync_map_ctx *ctx); |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
69 void mail_index_sync_init_handlers(struct mail_index_sync_map_ctx *ctx); |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
70 void mail_index_sync_deinit_handlers(struct mail_index_sync_map_ctx *ctx); |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
71 |
7620 | 72 void mail_index_sync_ext_init(struct mail_index_sync_map_ctx *ctx, |
73 const char *name, bool fix_size, | |
74 uint32_t *ext_map_idx_r); | |
75 | |
2954
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
76 int mail_index_sync_ext_intro(struct mail_index_sync_map_ctx *ctx, |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
77 const struct mail_transaction_ext_intro *u); |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
78 int mail_index_sync_ext_reset(struct mail_index_sync_map_ctx *ctx, |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
79 const struct mail_transaction_ext_reset *u); |
10380
8b3c802556a9
mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
80 int mail_index_sync_ext_hdr_update(struct mail_index_sync_map_ctx *ctx, |
8b3c802556a9
mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
81 uint32_t offset, uint32_t size, |
8b3c802556a9
mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
82 const void *data); |
2954
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
83 int |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
84 mail_index_sync_ext_rec_update(struct mail_index_sync_map_ctx *ctx, |
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
85 const struct mail_transaction_ext_rec_update *u); |
8929
9c50e7303513
Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
86 int |
9c50e7303513
Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
87 mail_index_sync_ext_atomic_inc(struct mail_index_sync_map_ctx *ctx, |
9c50e7303513
Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
88 const struct mail_transaction_ext_atomic_inc *u); |
2954
9dc7a7b06781
Moved extension syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents:
2869
diff
changeset
|
89 |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2954
diff
changeset
|
90 int mail_index_sync_keywords(struct mail_index_sync_map_ctx *ctx, |
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2954
diff
changeset
|
91 const struct mail_transaction_header *hdr, |
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2954
diff
changeset
|
92 const struct mail_transaction_keyword_update *rec); |
3138
fbe844061fe2
Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents:
3134
diff
changeset
|
93 int |
fbe844061fe2
Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents:
3134
diff
changeset
|
94 mail_index_sync_keywords_reset(struct mail_index_sync_map_ctx *ctx, |
fbe844061fe2
Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents:
3134
diff
changeset
|
95 const struct mail_transaction_header *hdr, |
fbe844061fe2
Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents:
3134
diff
changeset
|
96 const struct mail_transaction_keyword_reset *r); |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2954
diff
changeset
|
97 |
4279
ca5008de2921
If we're synchronizing a view (and not index itself) from transaction log,
Timo Sirainen <tss@iki.fi>
parents:
4244
diff
changeset
|
98 void mail_index_sync_set_corrupted(struct mail_index_sync_map_ctx *ctx, |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
99 const char *fmt, ...) ATTR_FORMAT(2, 3); |
4279
ca5008de2921
If we're synchronizing a view (and not index itself) from transaction log,
Timo Sirainen <tss@iki.fi>
parents:
4244
diff
changeset
|
100 |
5785
bcf58c66a099
DEBUG: Verify header counters/lowwaters more often.
Timo Sirainen <tss@iki.fi>
parents:
5777
diff
changeset
|
101 #ifdef DEBUG |
bcf58c66a099
DEBUG: Verify header counters/lowwaters more often.
Timo Sirainen <tss@iki.fi>
parents:
5777
diff
changeset
|
102 void mail_index_map_check(struct mail_index_map *map); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 #endif |
5785
bcf58c66a099
DEBUG: Verify header counters/lowwaters more often.
Timo Sirainen <tss@iki.fi>
parents:
5777
diff
changeset
|
104 |
bcf58c66a099
DEBUG: Verify header counters/lowwaters more often.
Timo Sirainen <tss@iki.fi>
parents:
5777
diff
changeset
|
105 #endif |