annotate src/lib-index/mail-cache.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 a6f1f04b70e4
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: 5735
diff changeset
1 #ifndef MAIL_CACHE_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5735
diff changeset
2 #define MAIL_CACHE_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.h"
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
3316
62d31be5ae60 s/PREFIX/SUFFIX/ for .cache and .log filename suffixes..
Timo Sirainen <tss@iki.fi>
parents: 3278
diff changeset
6 #define MAIL_CACHE_FILE_SUFFIX ".cache"
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 struct mail_cache;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 struct mail_cache_view;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 struct mail_cache_transaction_ctx;
17905
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
11 struct mail_cache_compress_lock;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
2298
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
13 enum mail_cache_decision_type {
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
14 /* Not needed currently */
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
15 MAIL_CACHE_DECISION_NO = 0x00,
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
16 /* Needed only for new mails. Drop when compressing. */
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
17 MAIL_CACHE_DECISION_TEMP = 0x01,
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
18 /* Needed. */
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
19 MAIL_CACHE_DECISION_YES = 0x02,
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
20
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
21 /* This decision has been forced manually, don't change it. */
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
22 MAIL_CACHE_DECISION_FORCED = 0x80
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
23 };
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
24
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
25 enum mail_cache_field_type {
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
26 MAIL_CACHE_FIELD_FIXED_SIZE,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
27 MAIL_CACHE_FIELD_VARIABLE_SIZE,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
28 MAIL_CACHE_FIELD_STRING,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
29 MAIL_CACHE_FIELD_BITMASK,
4722
b0cf3e4d6c96 If cache file contains broken field type or decision type mark the cache
Timo Sirainen <tss@iki.fi>
parents: 4261
diff changeset
30 MAIL_CACHE_FIELD_HEADER,
b0cf3e4d6c96 If cache file contains broken field type or decision type mark the cache
Timo Sirainen <tss@iki.fi>
parents: 4261
diff changeset
31
b0cf3e4d6c96 If cache file contains broken field type or decision type mark the cache
Timo Sirainen <tss@iki.fi>
parents: 4261
diff changeset
32 MAIL_CACHE_FIELD_COUNT
1956
d6941cd8afdc Added support for setting dirty flags for messages (TODO: undirty..)
Timo Sirainen <tss@iki.fi>
parents: 1915
diff changeset
33 };
d6941cd8afdc Added support for setting dirty flags for messages (TODO: undirty..)
Timo Sirainen <tss@iki.fi>
parents: 1915
diff changeset
34
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
35 struct mail_cache_field {
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
36 const char *name;
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
37 unsigned int idx;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
39 enum mail_cache_field_type type;
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
40 unsigned int field_size;
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
41 enum mail_cache_decision_type decision;
13842
ce29836e369e lib-index: Allow updating cache's last_used field with mail_cache_register_fields()
Timo Sirainen <tss@iki.fi>
parents: 13509
diff changeset
42 /* If higher than the current last_used field, update it */
ce29836e369e lib-index: Allow updating cache's last_used field with mail_cache_register_fields()
Timo Sirainen <tss@iki.fi>
parents: 13509
diff changeset
43 time_t last_used;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
2200
97bb7b127617 Beginnings of getting cache file working again. Easy to break currently, but
Timo Sirainen <tss@iki.fi>
parents: 1956
diff changeset
46 struct mail_cache *mail_cache_open_or_create(struct mail_index *index);
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
47 void mail_cache_free(struct mail_cache **cache);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
10338
d7e946e3c0c4 mail_cache_register_fields(): Update caching decisions from input fields.
Timo Sirainen <tss@iki.fi>
parents: 9620
diff changeset
49 /* Register fields. fields[].idx is updated to contain field index.
d7e946e3c0c4 mail_cache_register_fields(): Update caching decisions from input fields.
Timo Sirainen <tss@iki.fi>
parents: 9620
diff changeset
50 If field already exists and its caching decision is NO, the decision is
d7e946e3c0c4 mail_cache_register_fields(): Update caching decisions from input fields.
Timo Sirainen <tss@iki.fi>
parents: 9620
diff changeset
51 updated to the input field's decision. */
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
52 void mail_cache_register_fields(struct mail_cache *cache,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
53 struct mail_cache_field *fields,
3278
df372eecc5d0 Several size_t -> unsigned int changes. Try to keep "unsigned int" for
Timo Sirainen <tss@iki.fi>
parents: 3129
diff changeset
54 unsigned int fields_count);
15904
d3cf06639864 Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents: 14083
diff changeset
55 /* Returns registered field index, or UINT_MAX if not found. */
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
56 unsigned int
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
57 mail_cache_register_lookup(struct mail_cache *cache, const char *name);
12316
f170b3e39a34 lib-index: Added mail_cache_register_get_field().
Timo Sirainen <tss@iki.fi>
parents: 11988
diff changeset
58 /* Returns specified field */
f170b3e39a34 lib-index: Added mail_cache_register_get_field().
Timo Sirainen <tss@iki.fi>
parents: 11988
diff changeset
59 const struct mail_cache_field *
f170b3e39a34 lib-index: Added mail_cache_register_get_field().
Timo Sirainen <tss@iki.fi>
parents: 11988
diff changeset
60 mail_cache_register_get_field(struct mail_cache *cache, unsigned int field_idx);
3461
b7ce2532250a Added mail_cache_register_get_list() to get a list of all registered fields
Timo Sirainen <tss@iki.fi>
parents: 3316
diff changeset
61 /* Returns a list of all registered fields */
21427
658d7731b125 lib-index: Unconstify mail_cache_register_get_list
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20559
diff changeset
62 struct mail_cache_field *
3461
b7ce2532250a Added mail_cache_register_get_list() to get a list of all registered fields
Timo Sirainen <tss@iki.fi>
parents: 3316
diff changeset
63 mail_cache_register_get_list(struct mail_cache *cache, pool_t pool,
b7ce2532250a Added mail_cache_register_get_list() to get a list of all registered fields
Timo Sirainen <tss@iki.fi>
parents: 3316
diff changeset
64 unsigned int *count_r);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65
2247
2d51bb58a070 Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents: 2238
diff changeset
66 /* Returns TRUE if cache should be compressed. */
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3461
diff changeset
67 bool mail_cache_need_compress(struct mail_cache *cache);
17905
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
68 /* Compress cache file. Offsets are updated to given transaction. The cache
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
69 compression lock should be kept until the transaction is committed.
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
70 mail_cache_compress_unlock() needs to be called afterwards. The lock doesn't
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
71 prevent updates to the cache while it's held, it only prevents another cache
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
72 compression. */
5652
9404d2c41cb2 When compressing cache file, update the cache file offsets using the
Timo Sirainen <tss@iki.fi>
parents: 4722
diff changeset
73 int mail_cache_compress(struct mail_cache *cache,
17905
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
74 struct mail_index_transaction *trans,
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
75 struct mail_cache_compress_lock **lock_r);
51f5680d4108 lib-index: Delay unlocking cache compression until changes to transaction log are committed.
Timo Sirainen <tss@iki.fi>
parents: 17900
diff changeset
76 void mail_cache_compress_unlock(struct mail_cache_compress_lock **lock);
13335
11ff6a7eb576 lib-index: Added mail_cache_exists()
Timo Sirainen <tss@iki.fi>
parents: 13328
diff changeset
77 /* Returns TRUE if there is at least something in the cache. */
11ff6a7eb576 lib-index: Added mail_cache_exists()
Timo Sirainen <tss@iki.fi>
parents: 13328
diff changeset
78 bool mail_cache_exists(struct mail_cache *cache);
14083
21c3ce1b21cd lib-index: mail_cache_open_and_verify() is now public.
Timo Sirainen <tss@iki.fi>
parents: 13842
diff changeset
79 /* Open and read cache header. Returns 0 if ok, -1 if error/corrupted. */
21c3ce1b21cd lib-index: mail_cache_open_and_verify() is now public.
Timo Sirainen <tss@iki.fi>
parents: 13842
diff changeset
80 int mail_cache_open_and_verify(struct mail_cache *cache);
1915
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 struct mail_cache_view *
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 mail_cache_view_open(struct mail_cache *cache, struct mail_index_view *iview);
13339
b355309955f4 lib-index: Changed mail_cache_view_close() API to take pointer-to-pointer.
Timo Sirainen <tss@iki.fi>
parents: 13335
diff changeset
84 void mail_cache_view_close(struct mail_cache_view **view);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
13328
4a19aea565f7 lib-index: Added mail_cache_view_update_cache_decisions()
Timo Sirainen <tss@iki.fi>
parents: 12993
diff changeset
86 /* Normally cache decisions are updated on lookup/add. Use this function to
4a19aea565f7 lib-index: Added mail_cache_view_update_cache_decisions()
Timo Sirainen <tss@iki.fi>
parents: 12993
diff changeset
87 enable/disable this (useful for precaching data). */
4a19aea565f7 lib-index: Added mail_cache_view_update_cache_decisions()
Timo Sirainen <tss@iki.fi>
parents: 12993
diff changeset
88 void mail_cache_view_update_cache_decisions(struct mail_cache_view *view,
4a19aea565f7 lib-index: Added mail_cache_view_update_cache_decisions()
Timo Sirainen <tss@iki.fi>
parents: 12993
diff changeset
89 bool update);
4a19aea565f7 lib-index: Added mail_cache_view_update_cache_decisions()
Timo Sirainen <tss@iki.fi>
parents: 12993
diff changeset
90
21428
d64bd3f11bdf lib-index: Add mail_cache_decisions_copy
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21427
diff changeset
91 /* Copy caching decisions */
d64bd3f11bdf lib-index: Add mail_cache_decisions_copy
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21427
diff changeset
92 void mail_cache_decisions_copy(struct mail_index_transaction *itrans,
d64bd3f11bdf lib-index: Add mail_cache_decisions_copy
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21427
diff changeset
93 struct mail_cache *src,
d64bd3f11bdf lib-index: Add mail_cache_decisions_copy
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21427
diff changeset
94 struct mail_cache *dst);
d64bd3f11bdf lib-index: Add mail_cache_decisions_copy
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21427
diff changeset
95
2277
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
96 /* Get index transaction specific cache transaction. */
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
97 struct mail_cache_transaction_ctx *
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
98 mail_cache_get_transaction(struct mail_cache_view *view,
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
99 struct mail_index_transaction *t);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100
9620
a0b8777ac846 More fixes to cache changes.
Timo Sirainen <tss@iki.fi>
parents: 6455
diff changeset
101 void mail_cache_transaction_reset(struct mail_cache_transaction_ctx *ctx);
6455
5ad7a36ca8c3 mail_cache_transaction_commit()/rollback() API is now public and takes a **
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
102 int mail_cache_transaction_commit(struct mail_cache_transaction_ctx **ctx);
5ad7a36ca8c3 mail_cache_transaction_commit()/rollback() API is now public and takes a **
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
103 void mail_cache_transaction_rollback(struct mail_cache_transaction_ctx **ctx);
5ad7a36ca8c3 mail_cache_transaction_commit()/rollback() API is now public and takes a **
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
104
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 /* Add new field to given record. Updates are not allowed. Fixed size fields
2277
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
106 must be exactly the expected size. */
41e56f28d085 Cache updating is done now by first reserving space where to write, and then
Timo Sirainen <tss@iki.fi>
parents: 2276
diff changeset
107 void mail_cache_add(struct mail_cache_transaction_ctx *ctx, uint32_t seq,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
108 unsigned int field_idx, const void *data, size_t data_size);
4261
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
109 /* Returns TRUE if field is wanted to be added and it doesn't already exist.
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
110 If current caching decisions say not to cache this field, FALSE is returned.
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
111 If seq is 0, the existence isn't checked. */
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
112 bool mail_cache_field_want_add(struct mail_cache_transaction_ctx *ctx,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
113 uint32_t seq, unsigned int field_idx);
4261
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
114 /* Like mail_cache_field_want_add(), but in caching decisions FALSE is
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
115 returned only if the decision is a forced no. */
8fd5dfa271ef Added mail_cache_field_want_add() and mail_cache_field_can_add()
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3879
diff changeset
116 bool mail_cache_field_can_add(struct mail_cache_transaction_ctx *ctx,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
117 uint32_t seq, unsigned int field_idx);
22442
a6f1f04b70e4 lib-index: Add mail_cache_close_mail() to smartly drop cached data with INDEX=MEMORY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22033
diff changeset
118 /* Notify cache that the mail is now closed. Any records added with
a6f1f04b70e4 lib-index: Add mail_cache_close_mail() to smartly drop cached data with INDEX=MEMORY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22033
diff changeset
119 mail_cache_add() are unlikely to be required again. This mainly tells
a6f1f04b70e4 lib-index: Add mail_cache_close_mail() to smartly drop cached data with INDEX=MEMORY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22033
diff changeset
120 INDEX=MEMORY that it can free up the memory used by the mail. */
a6f1f04b70e4 lib-index: Add mail_cache_close_mail() to smartly drop cached data with INDEX=MEMORY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22033
diff changeset
121 void mail_cache_close_mail(struct mail_cache_transaction_ctx *ctx,
a6f1f04b70e4 lib-index: Add mail_cache_close_mail() to smartly drop cached data with INDEX=MEMORY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22033
diff changeset
122 uint32_t seq);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
12993
45f6d523b1a1 lib-index: Added mail_cache_field_exists_any()
Timo Sirainen <tss@iki.fi>
parents: 12316
diff changeset
124 /* Returns 1 if field exists, 0 if not, -1 if error. */
2298
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
125 int mail_cache_field_exists(struct mail_cache_view *view, uint32_t seq,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
126 unsigned int field_idx);
12993
45f6d523b1a1 lib-index: Added mail_cache_field_exists_any()
Timo Sirainen <tss@iki.fi>
parents: 12316
diff changeset
127 /* Returns TRUE if something is cached for the message, FALSE if not. */
45f6d523b1a1 lib-index: Added mail_cache_field_exists_any()
Timo Sirainen <tss@iki.fi>
parents: 12316
diff changeset
128 bool mail_cache_field_exists_any(struct mail_cache_view *view, uint32_t seq);
2298
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
129 /* Returns current caching decision for given field. */
5beb0c20b6e8 Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents: 2279
diff changeset
130 enum mail_cache_decision_type
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
131 mail_cache_field_get_decision(struct mail_cache *cache, unsigned int field_idx);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 /* Set data_r and size_r to point to wanted field in cache file.
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
134 Returns 1 if field was found, 0 if not, -1 if error. */
2279
ed0bb4c12f03 Cache API updates. Don't return direct pointers to mmaped cache file anymore.
Timo Sirainen <tss@iki.fi>
parents: 2277
diff changeset
135 int mail_cache_lookup_field(struct mail_cache_view *view, buffer_t *dest_buf,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
136 uint32_t seq, unsigned int field_idx);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137
2327
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
138 /* Return specified cached headers. Returns 1 if all fields were found,
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
139 0 if not, -1 if error. dest is updated only if all fields were found. */
7d02e2a7672d Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents: 2298
diff changeset
140 int mail_cache_lookup_headers(struct mail_cache_view *view, string_t *dest,
5735
5763c2548153 s/field/field_idx/
Timo Sirainen <tss@iki.fi>
parents: 5652
diff changeset
141 uint32_t seq, unsigned int field_idxs[],
3278
df372eecc5d0 Several size_t -> unsigned int changes. Try to keep "unsigned int" for
Timo Sirainen <tss@iki.fi>
parents: 3129
diff changeset
142 unsigned int fields_count);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 /* "Error in index cache file %s: ...". */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 void mail_cache_set_corrupted(struct mail_cache *cache, const char *fmt, ...)
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
146 ATTR_FORMAT(2, 3);
22033
03b5a6dfd3ba lib-index: Add mail_cache_set_seq_corrupted_reason
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21428
diff changeset
147 void mail_cache_set_seq_corrupted_reason(struct mail_cache_view *cache_view,
03b5a6dfd3ba lib-index: Add mail_cache_set_seq_corrupted_reason
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 21428
diff changeset
148 uint32_t seq, const char *reason);
11988
117053f20528 lib-index: Added mail_cache_reset().
Timo Sirainen <tss@iki.fi>
parents: 10338
diff changeset
149 /* Delete the cache file. */
117053f20528 lib-index: Added mail_cache_reset().
Timo Sirainen <tss@iki.fi>
parents: 10338
diff changeset
150 void mail_cache_reset(struct mail_cache *cache);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151
20559
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
152 /* Returns human-readable reason for why a cached field is missing for
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
153 the specified mail. This is mainly for debugging purposes, so the exact
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
154 field doesn't matter here. */
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
155 const char *
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
156 mail_cache_get_missing_reason(struct mail_cache_view *view, uint32_t seq);
ad24699d4138 lib-index: Added mail_cache_get_missing_reason()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19916
diff changeset
157
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 #endif