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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7132
diff changeset
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
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7132
diff changeset
72 void mail_index_sync_ext_init(struct mail_index_sync_map_ctx *ctx,
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7132
diff changeset
73 const char *name, bool fix_size,
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7132
diff changeset
74 uint32_t *ext_map_idx_r);
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7132
diff changeset
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