Mercurial > dovecot > core-2.2
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 |
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 | 84 mail_index_view_open_with_map(struct mail_index *index, |
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 |