Mercurial > dovecot > core-2.2
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 |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 |