Mercurial > dovecot > core-2.2
annotate src/lib-index/mail-cache-decisions.c @ 2342:fa529dd77176 HEAD
Fixes for big endian systems.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 20 Jul 2004 20:52:38 +0300 |
parents | 406692edc12d |
children | 604e9488a61b |
rev | line source |
---|---|
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 /* Copyright (C) 2004 Timo Sirainen */ |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
2259
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
3 /* |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
4 Users can be divided to three groups: |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
5 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
6 1. Most users will use only a single IMAP client which caches everything |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
7 locally. For these users it's quite pointless to do any kind of caching |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
8 as it only wastes disk space. That might also mean more disk I/O. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
9 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
10 2. Some users use multiple IMAP clients which cache everything locally. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
11 These could benefit from caching until all clients have fetched the |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
12 data. After that it's useless. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
13 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
14 3. Some clients don't do permanent local caching at all. For example |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
15 Pine and webmails. These clients would benefit from caching everything. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
16 Some locally caching clients might also access some data from server |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
17 again, such as when searching messages. They could benefit from caching |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
18 only these fields. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
19 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
20 After thinking about these a while, I figured out that people who care |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
21 about performance most will be using Dovecot optimized LDA anyway |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
22 which updates the indexes/cache immediately. In that case even the first |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
23 user group would benefit from caching the same way as second group. LDA |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
24 reads the mail anyway, so it might as well extract some information |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
25 about it and store them into cache. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
26 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
27 So, group 1. and 2. could be optimally implemented by keeping things |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
28 cached only for a while. I thought a week would be good. When cache file |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
29 is compressed, everything older than week will be dropped. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
30 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
31 But how to figure out if user is in group 3? One quite easy rule would |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
32 be to see if client is accessing messages older than a week. But with |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
33 only that rule we might have already dropped useful cached data. It's |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
34 not very nice if we have to read and cache it twice. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
35 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
36 Most locally caching clients always fetch new messages (all but body) |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
37 when they see them. They fetch them in ascending order. Noncaching |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
38 clients might fetch messages in pretty much any order, as they usually |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
39 don't fetch everything they can, only what's visible in screen. Some |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
40 will use server side sorting/threading which also makes messages to be |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
41 fetched in random order. Second rule would then be that if a session |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
42 doesn't fetch messages in ascending order, the fetched field type will |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
43 be permanently cached. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
44 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
45 So, we have three caching decisions: |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
46 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
47 1. Don't cache: Clients have never wanted the field |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
48 2. Cache temporarily: Clients want this only once |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
49 3. Cache permanently: Clients want this more than once |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
50 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
51 Different mailboxes have different decisions. Different fields have |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
52 different decisions. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
53 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
54 There are some problems, such as if a client accesses message older than |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
55 a week, we can't know if user just started using a new client which is |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
56 just filling it's local cache for the first time. Or it might be a |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
57 client user hasn't just used for over a week. In these cases we |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
58 shouldn't have marked the field to be permanently cached. User might |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
59 also switch clients from non-caching to caching. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
60 |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
61 So we should re-evaluate our caching decisions from time to time. This |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
62 is done by checking the above rules constantly and marking when was the |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
63 last time the decision was right. If decision hasn't matched for two |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
64 months, it's changed. I picked two months because people go to at least |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
65 one month vacations where they might still be reading mails, but with |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
66 different clients. |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
67 */ |
07c8813877cc
Cache decision explanation comment.
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
68 |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 #include "lib.h" |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
70 #include "ioloop.h" |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 #include "mail-cache-private.h" |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
73 void mail_cache_decision_lookup(struct mail_cache_view *view, uint32_t seq, |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
74 unsigned int field) |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 { |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
76 struct mail_cache *cache = view->cache; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 const struct mail_index_header *hdr; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 uint32_t uid; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
80 i_assert(field < cache->fields_count); |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
81 |
2339
406692edc12d
Cache fixes. Decisions are saved again.
Timo Sirainen <tss@iki.fi>
parents:
2327
diff
changeset
|
82 if (cache->fields[field].field.decision != MAIL_CACHE_DECISION_TEMP) { |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 /* a) forced decision |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
84 b) not cached, mail_cache_decision_add() will handle this |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 c) permanently cached already, okay. */ |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 return; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 } |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 /* see if we want to change decision from TEMP to YES */ |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 if (mail_index_lookup_uid(view->view, seq, &uid) < 0 || |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 mail_index_get_header(view->view, &hdr) < 0) |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 return; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
94 if (ioloop_time - cache->fields[field].last_used > 3600*24) { |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
95 /* update last_used about once a day */ |
2342 | 96 cache->fields[field].last_used = (uint32_t)ioloop_time; |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
97 cache->field_header_write_pending = TRUE; |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
98 } |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
99 |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
100 if (uid < cache->fields[field].uid_highwater || |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 uid < hdr->day_first_uid[7]) { |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 /* a) nonordered access within this session. if client doesn't |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 request messages in growing order, we assume it doesn't |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 have a permanent local cache. |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 b) accessing message older than one week. assume it's a |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 client with no local cache. if it was just a new client |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 generating the local cache for the first time, we'll |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 drop back to TEMP within few months. */ |
2339
406692edc12d
Cache fixes. Decisions are saved again.
Timo Sirainen <tss@iki.fi>
parents:
2327
diff
changeset
|
109 cache->fields[field].field.decision = MAIL_CACHE_DECISION_YES; |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
110 cache->field_header_write_pending = TRUE; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 } else { |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
112 cache->fields[field].uid_highwater = uid; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 } |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 } |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 |
2298
5beb0c20b6e8
Cache file fixes, API changes, etc. It's still in somewhat ugly state, but
Timo Sirainen <tss@iki.fi>
parents:
2275
diff
changeset
|
116 void mail_cache_decision_add(struct mail_cache_view *view, uint32_t seq, |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
117 unsigned int field) |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 { |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
119 struct mail_cache *cache = view->cache; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 uint32_t uid; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
122 i_assert(field < cache->fields_count); |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
123 |
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
124 if (MAIL_CACHE_IS_UNUSABLE(cache)) |
2275
c68a3c9f6d73
Cache file compression works now and compressed cache file is reopened.
Timo Sirainen <tss@iki.fi>
parents:
2259
diff
changeset
|
125 return; |
c68a3c9f6d73
Cache file compression works now and compressed cache file is reopened.
Timo Sirainen <tss@iki.fi>
parents:
2259
diff
changeset
|
126 |
2339
406692edc12d
Cache fixes. Decisions are saved again.
Timo Sirainen <tss@iki.fi>
parents:
2327
diff
changeset
|
127 if (cache->fields[field].field.decision != MAIL_CACHE_DECISION_NO) { |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 /* a) forced decision |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 b) we're already caching it, so it just wasn't in cache */ |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 return; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 } |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 /* field used the first time */ |
2339
406692edc12d
Cache fixes. Decisions are saved again.
Timo Sirainen <tss@iki.fi>
parents:
2327
diff
changeset
|
134 cache->fields[field].field.decision = MAIL_CACHE_DECISION_TEMP; |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
135 cache->field_header_write_pending = TRUE; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 if (mail_index_lookup_uid(view->view, seq, &uid) == 0) |
2327
7d02e2a7672d
Header caching redesigned. New design allows caching decisions per field, so
Timo Sirainen <tss@iki.fi>
parents:
2298
diff
changeset
|
138 cache->fields[field].uid_highwater = uid; |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 } |