annotate src/lib-index/mail-index-view-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 3f352534af56
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: 6377
diff changeset
1 #ifndef MAIL_INDEX_VIEW_PRIVATE_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 6377
diff changeset
2 #define MAIL_INDEX_VIEW_PRIVATE_H
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "mail-index-private.h"
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
5653
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
6 struct mail_index_view_log_sync_area {
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4358
diff changeset
7 uint32_t log_file_seq;
5653
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
8 unsigned int length;
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4358
diff changeset
9 uoff_t log_file_offset;
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4358
diff changeset
10 };
5653
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
11 ARRAY_DEFINE_TYPE(view_log_sync_area, struct mail_index_view_log_sync_area);
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4358
diff changeset
12
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
13 struct mail_index_view_vfuncs {
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2050
diff changeset
14 void (*close)(struct mail_index_view *view);
2904
642ba9cd3dac Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
Timo Sirainen <tss@iki.fi>
parents: 2892
diff changeset
15 uint32_t (*get_messages_count)(struct mail_index_view *view);
2892
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
16 const struct mail_index_header *
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
17 (*get_header)(struct mail_index_view *view);
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
18 const struct mail_index_record *
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
19 (*lookup_full)(struct mail_index_view *view, uint32_t seq,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
20 struct mail_index_map **map_r, bool *expunged_r);
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
21 void (*lookup_uid)(struct mail_index_view *view, uint32_t seq,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
22 uint32_t *uid_r);
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
23 void (*lookup_seq_range)(struct mail_index_view *view,
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
24 uint32_t first_uid, uint32_t last_uid,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
25 uint32_t *first_seq_r, uint32_t *last_seq_r);
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
26 void (*lookup_first)(struct mail_index_view *view,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
27 enum mail_flags flags, uint8_t flags_mask,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
28 uint32_t *seq_r);
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7932
diff changeset
29 void (*lookup_keywords)(struct mail_index_view *view, uint32_t seq,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7932
diff changeset
30 ARRAY_TYPE(keyword_indexes) *keyword_idx);
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
31 void (*lookup_ext_full)(struct mail_index_view *view, uint32_t seq,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
32 uint32_t ext_id, struct mail_index_map **map_r,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
33 const void **data_r, bool *expunged_r);
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
34 void (*get_header_ext)(struct mail_index_view *view,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
35 struct mail_index_map *map, uint32_t ext_id,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
36 const void **data_r, size_t *data_size_r);
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
37 bool (*ext_get_reset_id)(struct mail_index_view *view,
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
38 struct mail_index_map *map,
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 5855
diff changeset
39 uint32_t ext_id, uint32_t *reset_id_r);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2050
diff changeset
40 };
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2050
diff changeset
41
5453
a0a1432bb4e8 Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 4678
diff changeset
42 union mail_index_view_module_context {
a0a1432bb4e8 Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 4678
diff changeset
43 struct mail_index_module_register *reg;
a0a1432bb4e8 Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 4678
diff changeset
44 };
a0a1432bb4e8 Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 4678
diff changeset
45
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 struct mail_index_view {
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 14920
diff changeset
47 struct mail_index_view *prev, *next;
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2877
diff changeset
48 int refcount;
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2877
diff changeset
49
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
50 struct mail_index_view_vfuncs v;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 struct mail_index *index;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 struct mail_transaction_log_view *log_view;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
54 uint32_t indexid;
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
55 unsigned int inconsistency_id;
7932
91758686277a View syncing: Keep track of highest modseq in views. If we lose transaction
Timo Sirainen <tss@iki.fi>
parents: 7623
diff changeset
56 uint64_t highest_modseq;
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6277
diff changeset
57
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 struct mail_index_map *map;
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
59 /* All mappings where we have returned records. They need to be kept
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
60 valid until view is synchronized. */
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14896
diff changeset
61 ARRAY(struct mail_index_map *) map_refs;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
5767
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
63 /* expunge <= head */
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
64 uint32_t log_file_expunge_seq, log_file_head_seq;
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
65 uoff_t log_file_expunge_offset, log_file_head_offset;
5747
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
66
4358
414cd456e7de We used "already synced log positions in view" array to store locations of
Timo Sirainen <tss@iki.fi>
parents: 4244
diff changeset
67 /* Transaction log offsets which we don't want to return in view sync */
5653
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
68 ARRAY_TYPE(view_log_sync_area) syncs_hidden;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
5453
a0a1432bb4e8 Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 4678
diff changeset
70 /* Module-specific contexts. */
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14896
diff changeset
71 ARRAY(union mail_index_view_module_context *) module_contexts;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
72
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 14920
diff changeset
73 struct mail_index_transaction *transactions_list;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 int transactions;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 unsigned int inconsistent:1;
4678
6272561fa12d After saving messages the mailbox wasn't synced, which caused deliver to
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
77 /* this view was created by mail_index_sync_begin() */
6272561fa12d After saving messages the mailbox wasn't synced, which caused deliver to
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
78 unsigned int index_sync_view:1;
6272561fa12d After saving messages the mailbox wasn't synced, which caused deliver to
Timo Sirainen <tss@iki.fi>
parents: 4453
diff changeset
79 /* this view is being synced */
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 unsigned int syncing:1;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5653
diff changeset
83 struct mail_index_view *
5854
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
84 mail_index_view_open_with_map(struct mail_index *index,
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
85 struct mail_index_map *map);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2050
diff changeset
86 void mail_index_view_clone(struct mail_index_view *dest,
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2050
diff changeset
87 const struct mail_index_view *src);
14896
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 8549
diff changeset
88 struct mail_index_view *
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 8549
diff changeset
89 mail_index_view_dup_private(const struct mail_index_view *src);
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2877
diff changeset
90 void mail_index_view_ref(struct mail_index_view *view);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2224
diff changeset
91 void mail_index_view_unref_maps(struct mail_index_view *view);
4358
414cd456e7de We used "already synced log positions in view" array to store locations of
Timo Sirainen <tss@iki.fi>
parents: 4244
diff changeset
92 void mail_index_view_add_hidden_transaction(struct mail_index_view *view,
414cd456e7de We used "already synced log positions in view" array to store locations of
Timo Sirainen <tss@iki.fi>
parents: 4244
diff changeset
93 uint32_t log_file_seq,
5653
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
94 uoff_t log_file_offset,
965e401fcb7b mail_index_view_add_hidden_transaction() takes now a whole area parameter so
Timo Sirainen <tss@iki.fi>
parents: 5453
diff changeset
95 unsigned int length);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96
3140
9810fafd04ff Keep index pointer in dummy views.
Timo Sirainen <tss@iki.fi>
parents: 3114
diff changeset
97 struct mail_index_view *mail_index_dummy_view_open(struct mail_index *index);
3114
7c7299d1acfe Instead of using separate transaction sorting code for syncing, just put the
Timo Sirainen <tss@iki.fi>
parents: 2904
diff changeset
98
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 #endif