Mercurial > dovecot > core-2.2
annotate src/lib-index/mail-index.h @ 22326:ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
This avoids unnecessarily stat()ing the file. Also it's a bit better
since it's tracking the actual rotation time, not the mtime of what the
.log file happened to have at the time of rotation.
The initial rotation timestamp is written only to the dovecot.index header
without going through dovecot.index.log. This works, because the
dovecot.index is written practically always after a log rotation. For the
rare cases when it doesn't happen, the dovecot.index.log.2 just gets
deleted later after the next log rotation.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 11 Jul 2017 15:35:16 +0300 |
parents | 2c78da6b9590 |
children | 5e665ab8487c |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6379
diff
changeset
|
1 #ifndef MAIL_INDEX_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6379
diff
changeset
|
2 #define MAIL_INDEX_H |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
6502
c4cb7f25bf09
Don't forward declare enums. It doesn't seem to work with all compilers.
Timo Sirainen <tss@iki.fi>
parents:
6450
diff
changeset
|
4 #include "file-lock.h" |
11634
7f19062f58fd
Renamed fsync_disable to mail_fsync=optimized|always|never.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
5 #include "fsync-mode.h" |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
13189
diff
changeset
|
6 #include "guid.h" |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "mail-types.h" |
4688
764bd841e0ae
Try to avoid sending duplicate/useless flag updates.
Timo Sirainen <tss@iki.fi>
parents:
4656
diff
changeset
|
8 #include "seq-range-array.h" |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
10 #define MAIL_INDEX_MAJOR_VERSION 7 |
15821
1dd1e88ba0a2
lib-index: Make sure unused_old_sync_* fields are cleared in header in old inedx files.
Timo Sirainen <tss@iki.fi>
parents:
15609
diff
changeset
|
11 #define MAIL_INDEX_MINOR_VERSION 3 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
13 #define MAIL_INDEX_HEADER_MIN_SIZE 120 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
17923
568f817804b3
lib-index: Moved MAIL_TRANSACTION_LOG_LOCK_WARN_SECS as part of public API.
Timo Sirainen <tss@iki.fi>
parents:
17758
diff
changeset
|
15 /* Log a warning when transaction log has been locked for this many seconds. |
568f817804b3
lib-index: Moved MAIL_TRANSACTION_LOG_LOCK_WARN_SECS as part of public API.
Timo Sirainen <tss@iki.fi>
parents:
17758
diff
changeset
|
16 This lock is held also between mail_index_sync_begin()..commit(). */ |
568f817804b3
lib-index: Moved MAIL_TRANSACTION_LOG_LOCK_WARN_SECS as part of public API.
Timo Sirainen <tss@iki.fi>
parents:
17758
diff
changeset
|
17 #define MAIL_TRANSACTION_LOG_LOCK_WARN_SECS 30 |
568f817804b3
lib-index: Moved MAIL_TRANSACTION_LOG_LOCK_WARN_SECS as part of public API.
Timo Sirainen <tss@iki.fi>
parents:
17758
diff
changeset
|
18 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 enum mail_index_open_flags { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 /* Create index if it doesn't exist */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 MAIL_INDEX_OPEN_FLAG_CREATE = 0x01, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 /* Don't try to mmap() index files */ |
1917
68938dccbc45
Forced locking to be right with mprotect()ing index file. Support for
Timo Sirainen <tss@iki.fi>
parents:
1915
diff
changeset
|
23 MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE = 0x04, |
4968
1baf9dd3fc40
Added dotlock_use_excl setting.
Timo Sirainen <tss@iki.fi>
parents:
4918
diff
changeset
|
24 /* Rely on O_EXCL when creating dotlocks */ |
1baf9dd3fc40
Added dotlock_use_excl setting.
Timo Sirainen <tss@iki.fi>
parents:
4918
diff
changeset
|
25 MAIL_INDEX_OPEN_FLAG_DOTLOCK_USE_EXCL = 0x10, |
5972
9fb9dc4d8df8
Flush NFS caches when needed if MAIL_INDEX_OPEN_FLAG_NFS_FLUSH is enabled.
Timo Sirainen <tss@iki.fi>
parents:
5946
diff
changeset
|
26 /* Flush NFS attr/data/write cache when necessary */ |
9fb9dc4d8df8
Flush NFS caches when needed if MAIL_INDEX_OPEN_FLAG_NFS_FLUSH is enabled.
Timo Sirainen <tss@iki.fi>
parents:
5946
diff
changeset
|
27 MAIL_INDEX_OPEN_FLAG_NFS_FLUSH = 0x40, |
6686
610f3d9813b5
Added MAIL_INDEX_OPEN_FLAG_READONLY.
Timo Sirainen <tss@iki.fi>
parents:
6679
diff
changeset
|
28 /* Open the index read-only */ |
8960
63a75a03360c
dbox: Create dovecot.index.backup files.
Timo Sirainen <tss@iki.fi>
parents:
8955
diff
changeset
|
29 MAIL_INDEX_OPEN_FLAG_READONLY = 0x80, |
63a75a03360c
dbox: Create dovecot.index.backup files.
Timo Sirainen <tss@iki.fi>
parents:
8955
diff
changeset
|
30 /* Create backups of dovecot.index files once in a while */ |
8973
f295678cef1e
dbox: Make sure indexes are never moved to memory (in case of out-of-disk space).
Timo Sirainen <tss@iki.fi>
parents:
8963
diff
changeset
|
31 MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS = 0x100, |
f295678cef1e
dbox: Make sure indexes are never moved to memory (in case of out-of-disk space).
Timo Sirainen <tss@iki.fi>
parents:
8963
diff
changeset
|
32 /* If we run out of disk space, fail modifications instead of moving |
f295678cef1e
dbox: Make sure indexes are never moved to memory (in case of out-of-disk space).
Timo Sirainen <tss@iki.fi>
parents:
8963
diff
changeset
|
33 indexes to memory. */ |
15313
51f2be9aa8ad
lib-index: Added MAIL_INDEX_OPEN_FLAG_SAVEONLY to do only minimal reads from cache file.
Timo Sirainen <tss@iki.fi>
parents:
14079
diff
changeset
|
34 MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY = 0x200, |
51f2be9aa8ad
lib-index: Added MAIL_INDEX_OPEN_FLAG_SAVEONLY to do only minimal reads from cache file.
Timo Sirainen <tss@iki.fi>
parents:
14079
diff
changeset
|
35 /* We're only going to save new messages to the index. |
51f2be9aa8ad
lib-index: Added MAIL_INDEX_OPEN_FLAG_SAVEONLY to do only minimal reads from cache file.
Timo Sirainen <tss@iki.fi>
parents:
14079
diff
changeset
|
36 Avoid unnecessary reads. */ |
20561
6f381c5ad896
lib-index: If mail_debug=yes, log cache compressions.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19800
diff
changeset
|
37 MAIL_INDEX_OPEN_FLAG_SAVEONLY = 0x400, |
6f381c5ad896
lib-index: If mail_debug=yes, log cache compressions.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19800
diff
changeset
|
38 /* Enable debug logging */ |
6f381c5ad896
lib-index: If mail_debug=yes, log cache compressions.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19800
diff
changeset
|
39 MAIL_INDEX_OPEN_FLAG_DEBUG = 0x800, |
21530
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
40 /* MAIL_INDEX_MAIL_FLAG_DIRTY can be used as a backend-specific flag. |
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
41 All special handling of the flag is disabled by this. */ |
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
42 MAIL_INDEX_OPEN_FLAG_NO_DIRTY = 0x1000, |
2723
12b503fbb8af
Replaced fcntl_locks_disable with lock_method, so it's now possible to use
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
43 }; |
12b503fbb8af
Replaced fcntl_locks_disable with lock_method, so it's now possible to use
Timo Sirainen <tss@iki.fi>
parents:
2685
diff
changeset
|
44 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 enum mail_index_header_compat_flags { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 MAIL_INDEX_COMPAT_LITTLE_ENDIAN = 0x01 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 enum mail_index_header_flag { |
1954 | 50 /* Index file is corrupted, reopen or recreate it. */ |
1956
d6941cd8afdc
Added support for setting dirty flags for messages (TODO: undirty..)
Timo Sirainen <tss@iki.fi>
parents:
1954
diff
changeset
|
51 MAIL_INDEX_HDR_FLAG_CORRUPTED = 0x0001, |
21223
64d9bb10263b
lib-index: fsck now adds MAIL_INDEX_HDR_FLAG_FSCKD to header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21205
diff
changeset
|
52 MAIL_INDEX_HDR_FLAG_HAVE_DIRTY = 0x0002, |
64d9bb10263b
lib-index: fsck now adds MAIL_INDEX_HDR_FLAG_FSCKD to header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21205
diff
changeset
|
53 /* Index has been fsck'd. The caller may want to resync the index |
64d9bb10263b
lib-index: fsck now adds MAIL_INDEX_HDR_FLAG_FSCKD to header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21205
diff
changeset
|
54 to make sure it's valid and drop this flag. */ |
64d9bb10263b
lib-index: fsck now adds MAIL_INDEX_HDR_FLAG_FSCKD to header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21205
diff
changeset
|
55 MAIL_INDEX_HDR_FLAG_FSCKD = 0x0004, |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
1956
d6941cd8afdc
Added support for setting dirty flags for messages (TODO: undirty..)
Timo Sirainen <tss@iki.fi>
parents:
1954
diff
changeset
|
58 enum mail_index_mail_flags { |
7330
93f67b71476c
Added MAIL_INDEX_MAIL_FLAG_BACKEND flag that can be used for
Timo Sirainen <tss@iki.fi>
parents:
6984
diff
changeset
|
59 /* For private use by backend. Replacing flags doesn't change this. */ |
14599
dbd42f7198eb
shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents:
14581
diff
changeset
|
60 MAIL_INDEX_MAIL_FLAG_BACKEND = 0x40, |
21530
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
61 /* Message flags haven't been written to backend. If |
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
62 MAIL_INDEX_OPEN_FLAG_NO_DIRTY is set, this is treated as a |
c337e4fe88e5
lib-index: Add MAIL_INDEX_OPEN_FLAG_NO_DIRTY
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21293
diff
changeset
|
63 backend-specific flag with no special internal handling. */ |
14599
dbd42f7198eb
shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents:
14581
diff
changeset
|
64 MAIL_INDEX_MAIL_FLAG_DIRTY = 0x80, |
dbd42f7198eb
shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents:
14581
diff
changeset
|
65 /* Force updating this message's modseq via a flag update record */ |
dbd42f7198eb
shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents:
14581
diff
changeset
|
66 MAIL_INDEX_MAIL_FLAG_UPDATE_MODSEQ = 0x100 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 #define MAIL_INDEX_FLAGS_MASK \ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 (MAIL_ANSWERED | MAIL_FLAGGED | MAIL_DELETED | MAIL_SEEN | MAIL_DRAFT) |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 struct mail_index_header { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 /* major version is increased only when you can't have backwards |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 compatibility. minor version is increased when header size is |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 increased to contain new non-critical fields. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 uint8_t major_version; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 uint8_t minor_version; |
2114
4aedcb4c51cb
Added support for per-index sized mail_index_record.
Timo Sirainen <tss@iki.fi>
parents:
2063
diff
changeset
|
78 |
2116 | 79 uint16_t base_header_size; |
80 uint32_t header_size; /* base + extended header size */ | |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
81 uint32_t record_size; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 |
3819
61f0e1fe9b55
Moved uoff_t and time_t compatibility checks to cache file, since they're
Timo Sirainen <tss@iki.fi>
parents:
3353
diff
changeset
|
83 uint8_t compat_flags; /* enum mail_index_header_compat_flags */ |
61f0e1fe9b55
Moved uoff_t and time_t compatibility checks to cache file, since they're
Timo Sirainen <tss@iki.fi>
parents:
3353
diff
changeset
|
84 uint8_t unused[3]; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 uint32_t indexid; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 uint32_t flags; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 uint32_t uid_validity; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 uint32_t next_uid; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 uint32_t messages_count; |
6037
d911d943438e
Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents:
5972
diff
changeset
|
93 uint32_t unused_old_recent_messages_count; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 uint32_t seen_messages_count; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 uint32_t deleted_messages_count; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
6037
d911d943438e
Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents:
5972
diff
changeset
|
97 uint32_t first_recent_uid; |
d911d943438e
Recent flag handling rewrite. Still not perfect with maildir.
Timo Sirainen <tss@iki.fi>
parents:
5972
diff
changeset
|
98 /* these UIDs may not exist and may not even be unseen/deleted */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 uint32_t first_unseen_uid_lowwater; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 uint32_t first_deleted_uid_lowwater; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 uint32_t log_file_seq; |
5749
420a386fa27a
int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents:
5722
diff
changeset
|
103 /* non-external records between tail..head haven't been committed to |
420a386fa27a
int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents:
5722
diff
changeset
|
104 mailbox yet. */ |
420a386fa27a
int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents:
5722
diff
changeset
|
105 uint32_t log_file_tail_offset; |
420a386fa27a
int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents:
5722
diff
changeset
|
106 uint32_t log_file_head_offset; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 |
22326
ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22300
diff
changeset
|
108 uint32_t unused_old_sync_size_part1; |
ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22300
diff
changeset
|
109 /* Timestamp of when .log was rotated into .log.2. This can be used to |
ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22300
diff
changeset
|
110 optimize checking when it's time to unlink it without stat()ing it. |
ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22300
diff
changeset
|
111 0 = unknown, -1 = .log.2 doesn't exists. */ |
ba1a35c5ead7
lib-index: Track .log.2 rotation time in index header
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22300
diff
changeset
|
112 uint32_t log2_rotate_time; |
22300
2c78da6b9590
lib-index, lib-storage: Add mail_index_header.last_temp_file_scan
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21530
diff
changeset
|
113 uint32_t last_temp_file_scan; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 |
2247
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
2240
diff
changeset
|
115 /* daily first UIDs that have been added to index. */ |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
2240
diff
changeset
|
116 uint32_t day_stamp; |
2d51bb58a070
Added some smartness for deciding what to cache. Cache compression code compiles, but untested.
Timo Sirainen <tss@iki.fi>
parents:
2240
diff
changeset
|
117 uint32_t day_first_uid[8]; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 |
21025
6169e37937dd
lib-index: Don't waste 3 bytes of space in struct mail_index_record.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20561
diff
changeset
|
120 #define MAIL_INDEX_RECORD_MIN_SIZE (sizeof(uint32_t) + sizeof(uint8_t)) |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 struct mail_index_record { |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 uint32_t uid; |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
123 uint8_t flags; /* enum mail_flags | enum mail_index_mail_flags */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
126 struct mail_keywords { |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
127 struct mail_index *index; |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
128 unsigned int count; |
9508
094ad127d132
Added reference counting to struct mail_keywords and related APIs.
Timo Sirainen <tss@iki.fi>
parents:
9311
diff
changeset
|
129 int refcount; |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
130 |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
131 /* variable sized list of keyword indexes */ |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
132 unsigned int idx[1]; |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
133 }; |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
134 |
6089
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
135 enum mail_index_transaction_flags { |
7624
271131a1e060
View sync returns now also hidden records, but they're marked as such.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
136 /* If transaction is marked as hidden, the changes are marked with |
271131a1e060
View sync returns now also hidden records, but they're marked as such.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
137 hidden=TRUE when the view is synchronized. */ |
6089
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
138 MAIL_INDEX_TRANSACTION_FLAG_HIDE = 0x01, |
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
139 /* External transactions describe changes to mailbox that have already |
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
140 happened. */ |
6091
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
141 MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL = 0x02, |
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
142 /* Don't add flag updates unless they actually change something. |
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
143 This is reliable only when syncing, otherwise someone else might |
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
144 have already committed a transaction that had changed the flags. */ |
8963
375be2dbeea7
Added FSYNC flag for transactions.
Timo Sirainen <tss@iki.fi>
parents:
8962
diff
changeset
|
145 MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES = 0x04, |
375be2dbeea7
Added FSYNC flag for transactions.
Timo Sirainen <tss@iki.fi>
parents:
8962
diff
changeset
|
146 /* fsync() this transaction (unless fsyncs are disabled) */ |
14581
4b1309d171ff
Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents:
14580
diff
changeset
|
147 MAIL_INDEX_TRANSACTION_FLAG_FSYNC = 0x08, |
4b1309d171ff
Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents:
14580
diff
changeset
|
148 /* Sync transaction describes changes to mailbox that already happened |
4b1309d171ff
Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents:
14580
diff
changeset
|
149 to another mailbox with whom we're syncing with (dsync) */ |
4b1309d171ff
Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents:
14580
diff
changeset
|
150 MAIL_INDEX_TRANSACTION_FLAG_SYNC = 0x10 |
6089
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
151 }; |
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
152 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 enum mail_index_sync_type { |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3138
diff
changeset
|
154 MAIL_INDEX_SYNC_TYPE_EXPUNGE = 0x02, |
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3138
diff
changeset
|
155 MAIL_INDEX_SYNC_TYPE_FLAGS = 0x04, |
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3138
diff
changeset
|
156 MAIL_INDEX_SYNC_TYPE_KEYWORD_ADD = 0x08, |
14580
2e7d718609fd
Don't write "keyword reset" records to transaction log anymore.
Timo Sirainen <tss@iki.fi>
parents:
14079
diff
changeset
|
157 MAIL_INDEX_SYNC_TYPE_KEYWORD_REMOVE = 0x10 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 }; |
5722
9c53047d3b2c
Changed mail_index_view_sync_begin() to take enum mail_index_view_sync_type.
Timo Sirainen <tss@iki.fi>
parents:
5699
diff
changeset
|
159 |
15063
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
160 enum mail_index_fsync_mask { |
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
161 MAIL_INDEX_FSYNC_MASK_APPENDS = 0x01, |
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
162 MAIL_INDEX_FSYNC_MASK_EXPUNGES = 0x02, |
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
163 MAIL_INDEX_FSYNC_MASK_FLAGS = 0x04, |
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
164 MAIL_INDEX_FSYNC_MASK_KEYWORDS = 0x08 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 }; |
5722
9c53047d3b2c
Changed mail_index_view_sync_begin() to take enum mail_index_view_sync_type.
Timo Sirainen <tss@iki.fi>
parents:
5699
diff
changeset
|
166 |
5779
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
167 enum mail_index_sync_flags { |
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
168 /* Resync all dirty messages' flags. */ |
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
169 MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY = 0x01, |
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
170 /* Drop recent flags from all messages */ |
6091
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
171 MAIL_INDEX_SYNC_FLAG_DROP_RECENT = 0x02, |
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
172 /* Create the transaction with AVOID_FLAG_UPDATES flag */ |
c8d7b9fd500e
Added MAIL_INDEX_TRANSACTION_FLAG_AVOID_FLAG_UPDATES and
Timo Sirainen <tss@iki.fi>
parents:
6089
diff
changeset
|
173 MAIL_INDEX_SYNC_FLAG_AVOID_FLAG_UPDATES = 0x04, |
6809
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6736
diff
changeset
|
174 /* If there are no new transactions and nothing else to do, |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6736
diff
changeset
|
175 return 0 in mail_index_sync_begin() */ |
8963
375be2dbeea7
Added FSYNC flag for transactions.
Timo Sirainen <tss@iki.fi>
parents:
8962
diff
changeset
|
176 MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES = 0x08, |
375be2dbeea7
Added FSYNC flag for transactions.
Timo Sirainen <tss@iki.fi>
parents:
8962
diff
changeset
|
177 /* Create the transaction with FSYNC flag */ |
10678
9740c4858a57
Mailbox deletion: Fixed race condition where a mailbox couldn't get deleted.
Timo Sirainen <tss@iki.fi>
parents:
10674
diff
changeset
|
178 MAIL_INDEX_SYNC_FLAG_FSYNC = 0x10, |
13189
916974b550a3
lib-index: MAIL_INDEX_SYNC_FLAG_DELETING_INDEX comment updated
Timo Sirainen <tss@iki.fi>
parents:
12644
diff
changeset
|
179 /* If we see "delete index" request transaction, finish it. |
13509 | 180 This flag also allows committing more changes to a deleted index. */ |
17758
6980c53bf7d7
lib-index, lib-storage: Fixed race conditions with deleting mailbox.
Timo Sirainen <tss@iki.fi>
parents:
16402
diff
changeset
|
181 MAIL_INDEX_SYNC_FLAG_DELETING_INDEX = 0x20, |
6980c53bf7d7
lib-index, lib-storage: Fixed race conditions with deleting mailbox.
Timo Sirainen <tss@iki.fi>
parents:
16402
diff
changeset
|
182 /* Same as MAIL_INDEX_SYNC_FLAG_DELETING_INDEX, but finish index |
6980c53bf7d7
lib-index, lib-storage: Fixed race conditions with deleting mailbox.
Timo Sirainen <tss@iki.fi>
parents:
16402
diff
changeset
|
183 deletion only once and fail the rest (= avoid race conditions when |
6980c53bf7d7
lib-index, lib-storage: Fixed race conditions with deleting mailbox.
Timo Sirainen <tss@iki.fi>
parents:
16402
diff
changeset
|
184 multiple processes try to mark the index deleted) */ |
18843
03b3b97b84aa
lib-index: Avoid writing tail offset update to transaction log if it's not necessary.
Timo Sirainen <tss@iki.fi>
parents:
17928
diff
changeset
|
185 MAIL_INDEX_SYNC_FLAG_TRY_DELETING_INDEX = 0x40, |
03b3b97b84aa
lib-index: Avoid writing tail offset update to transaction log if it's not necessary.
Timo Sirainen <tss@iki.fi>
parents:
17928
diff
changeset
|
186 /* Update header's tail_offset to head_offset, even if it's the only |
03b3b97b84aa
lib-index: Avoid writing tail offset update to transaction log if it's not necessary.
Timo Sirainen <tss@iki.fi>
parents:
17928
diff
changeset
|
187 thing we do and there's no strict need for it. */ |
03b3b97b84aa
lib-index: Avoid writing tail offset update to transaction log if it's not necessary.
Timo Sirainen <tss@iki.fi>
parents:
17928
diff
changeset
|
188 MAIL_INDEX_SYNC_FLAG_UPDATE_TAIL_OFFSET = 0x80 |
5779
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
189 }; |
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
190 |
5764
4dcb14706561
mail_index_view_sync_begin() can now sync only all or all but expunges.
Timo Sirainen <tss@iki.fi>
parents:
5749
diff
changeset
|
191 enum mail_index_view_sync_flags { |
5722
9c53047d3b2c
Changed mail_index_view_sync_begin() to take enum mail_index_view_sync_type.
Timo Sirainen <tss@iki.fi>
parents:
5699
diff
changeset
|
192 /* Don't sync expunges */ |
6675
a4f475d415d6
Added MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT flag.
Timo Sirainen <tss@iki.fi>
parents:
6502
diff
changeset
|
193 MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES = 0x01, |
a4f475d415d6
Added MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT flag.
Timo Sirainen <tss@iki.fi>
parents:
6502
diff
changeset
|
194 /* Make sure view isn't inconsistent after syncing. This also means |
a4f475d415d6
Added MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT flag.
Timo Sirainen <tss@iki.fi>
parents:
6502
diff
changeset
|
195 that you don't care about view_sync_next()'s output, so it won't |
a4f475d415d6
Added MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT flag.
Timo Sirainen <tss@iki.fi>
parents:
6502
diff
changeset
|
196 return anything. */ |
a4f475d415d6
Added MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT flag.
Timo Sirainen <tss@iki.fi>
parents:
6502
diff
changeset
|
197 MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT = 0x02 |
5722
9c53047d3b2c
Changed mail_index_view_sync_begin() to take enum mail_index_view_sync_type.
Timo Sirainen <tss@iki.fi>
parents:
5699
diff
changeset
|
198 }; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 struct mail_index_sync_rec { |
2033
4f6b1118a53d
Transaction log contains only UIDs now, no more sequences which just mess up
Timo Sirainen <tss@iki.fi>
parents:
1966
diff
changeset
|
201 uint32_t uid1, uid2; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 enum mail_index_sync_type type; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 /* MAIL_INDEX_SYNC_TYPE_FLAGS: */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 uint8_t add_flags; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 uint8_t remove_flags; |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3138
diff
changeset
|
207 |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
208 /* MAIL_INDEX_SYNC_TYPE_KEYWORD_ADD, .._REMOVE: */ |
3203
391a1064872e
mail_index_sync_next() now returns keyword updates (now only thing left to
Timo Sirainen <tss@iki.fi>
parents:
3138
diff
changeset
|
209 unsigned int keyword_idx; |
9624
2558ba736207
Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents:
9537
diff
changeset
|
210 |
2558ba736207
Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents:
9537
diff
changeset
|
211 /* MAIL_INDEX_SYNC_TYPE_EXPUNGE: */ |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
13189
diff
changeset
|
212 guid_128_t guid_128; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 }; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
214 |
7875
8ded6c06bcfc
Changed mail index view syncing API to return only flag changes.
Timo Sirainen <tss@iki.fi>
parents:
7872
diff
changeset
|
215 enum mail_index_view_sync_type { |
8ded6c06bcfc
Changed mail index view syncing API to return only flag changes.
Timo Sirainen <tss@iki.fi>
parents:
7872
diff
changeset
|
216 /* Flags or keywords changed */ |
15271
0f16da39121a
Treat modseq updates explicitly instead of as if they were flag changes.
Timo Sirainen <tss@iki.fi>
parents:
15064
diff
changeset
|
217 MAIL_INDEX_VIEW_SYNC_TYPE_FLAGS = 0x01, |
0f16da39121a
Treat modseq updates explicitly instead of as if they were flag changes.
Timo Sirainen <tss@iki.fi>
parents:
15064
diff
changeset
|
218 MAIL_INDEX_VIEW_SYNC_TYPE_MODSEQ = 0x02 |
7875
8ded6c06bcfc
Changed mail index view syncing API to return only flag changes.
Timo Sirainen <tss@iki.fi>
parents:
7872
diff
changeset
|
219 }; |
8ded6c06bcfc
Changed mail index view syncing API to return only flag changes.
Timo Sirainen <tss@iki.fi>
parents:
7872
diff
changeset
|
220 |
3825
a983412e1976
Changed mail_index_view_sync_next() to return struct
Timo Sirainen <tss@iki.fi>
parents:
3824
diff
changeset
|
221 struct mail_index_view_sync_rec { |
a983412e1976
Changed mail_index_view_sync_next() to return struct
Timo Sirainen <tss@iki.fi>
parents:
3824
diff
changeset
|
222 uint32_t uid1, uid2; |
7875
8ded6c06bcfc
Changed mail index view syncing API to return only flag changes.
Timo Sirainen <tss@iki.fi>
parents:
7872
diff
changeset
|
223 enum mail_index_view_sync_type type; |
7624
271131a1e060
View sync returns now also hidden records, but they're marked as such.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
224 |
271131a1e060
View sync returns now also hidden records, but they're marked as such.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
225 /* TRUE if this was a hidden transaction. */ |
271131a1e060
View sync returns now also hidden records, but they're marked as such.
Timo Sirainen <tss@iki.fi>
parents:
7620
diff
changeset
|
226 unsigned int hidden:1; |
3825
a983412e1976
Changed mail_index_view_sync_next() to return struct
Timo Sirainen <tss@iki.fi>
parents:
3824
diff
changeset
|
227 }; |
a983412e1976
Changed mail_index_view_sync_next() to return struct
Timo Sirainen <tss@iki.fi>
parents:
3824
diff
changeset
|
228 |
10367
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
229 struct mail_index_transaction_commit_result { |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
230 /* seq/offset points to end of transaction */ |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
231 uint32_t log_file_seq; |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
232 uoff_t log_file_offset; |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
233 /* number of bytes in the written transaction. |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
234 all of it was written to the same file. */ |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
235 uoff_t commit_size; |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
236 |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
237 unsigned int ignored_modseq_changes; |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
238 }; |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
239 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 struct mail_index; |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
241 struct mail_index_map; |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 struct mail_index_view; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 struct mail_index_transaction; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
244 struct mail_index_sync_ctx; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 struct mail_index_view_sync_ctx; |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 struct mail_index *mail_index_alloc(const char *dir, const char *prefix); |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
248 void mail_index_free(struct mail_index **index); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 |
11634
7f19062f58fd
Renamed fsync_disable to mail_fsync=optimized|always|never.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
250 /* Specify how often to do fsyncs. If mode is FSYNC_MODE_OPTIMIZED, the mask |
7f19062f58fd
Renamed fsync_disable to mail_fsync=optimized|always|never.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
251 can be used to specify which transaction types to fsync. */ |
7f19062f58fd
Renamed fsync_disable to mail_fsync=optimized|always|never.
Timo Sirainen <tss@iki.fi>
parents:
11623
diff
changeset
|
252 void mail_index_set_fsync_mode(struct mail_index *index, enum fsync_mode mode, |
15063
0efc12f3eb2a
lib-index: Changed mail_index_set_fsync_mode() to use a separate enum for the mask.
Timo Sirainen <tss@iki.fi>
parents:
14688
diff
changeset
|
253 enum mail_index_fsync_mask mask); |
2650
9b78674428f5
Get index file mode and GID from dovecot-shared file.
Timo Sirainen <tss@iki.fi>
parents:
2563
diff
changeset
|
254 void mail_index_set_permissions(struct mail_index *index, |
9537
b373de4973cd
Whenever file's group changing fails, show the group origin in the error message.
Timo Sirainen <tss@iki.fi>
parents:
9508
diff
changeset
|
255 mode_t mode, gid_t gid, const char *gid_origin); |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15821
diff
changeset
|
256 /* Set locking method and maximum time to wait for a lock |
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15821
diff
changeset
|
257 (UINT_MAX = default). */ |
11623
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11538
diff
changeset
|
258 void mail_index_set_lock_method(struct mail_index *index, |
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11538
diff
changeset
|
259 enum file_lock_method lock_method, |
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11538
diff
changeset
|
260 unsigned int max_timeout_secs); |
21205
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
261 /* Rotate transaction log after it's a) min_size or larger and it was created |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
262 at least min_created_ago_secs or b) larger than max_size. Delete .log.2 when |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
263 it's older than log2_stale_secs. The defaults are min_size=32kB, max_size=1M, |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
264 min_created_ago_secs=5min, log2_stale_secs=2d. */ |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
265 void mail_index_set_log_rotation(struct mail_index *index, |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
266 uoff_t min_size, uoff_t max_size, |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
267 unsigned int min_created_ago_secs, |
5d905618c4b1
lib-index: Add mail_index_set_log_rotation()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21146
diff
changeset
|
268 unsigned int log2_stale_secs); |
14079
2ab26bb55346
lib-index: Added mail_index_set_ext_init_data() for adding data to index on creation.
Timo Sirainen <tss@iki.fi>
parents:
13806
diff
changeset
|
269 /* When creating a new index file or reseting an existing one, add the given |
2ab26bb55346
lib-index: Added mail_index_set_ext_init_data() for adding data to index on creation.
Timo Sirainen <tss@iki.fi>
parents:
13806
diff
changeset
|
270 extension header data immediately to it. */ |
2ab26bb55346
lib-index: Added mail_index_set_ext_init_data() for adding data to index on creation.
Timo Sirainen <tss@iki.fi>
parents:
13806
diff
changeset
|
271 void mail_index_set_ext_init_data(struct mail_index *index, uint32_t ext_id, |
2ab26bb55346
lib-index: Added mail_index_set_ext_init_data() for adding data to index on creation.
Timo Sirainen <tss@iki.fi>
parents:
13806
diff
changeset
|
272 const void *data, size_t size); |
2650
9b78674428f5
Get index file mode and GID from dovecot-shared file.
Timo Sirainen <tss@iki.fi>
parents:
2563
diff
changeset
|
273 |
8953
f80f26822262
Added mail_index_open_or_create().
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
274 /* Open index. Returns 1 if ok, 0 if index doesn't exist and CREATE flags |
f80f26822262
Added mail_index_open_or_create().
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
275 wasn't given, -1 if error. */ |
11623
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11538
diff
changeset
|
276 int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags); |
8953
f80f26822262
Added mail_index_open_or_create().
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
277 /* Open or create index. Returns 0 if ok, -1 if error. */ |
f80f26822262
Added mail_index_open_or_create().
Timo Sirainen <tss@iki.fi>
parents:
8929
diff
changeset
|
278 int mail_index_open_or_create(struct mail_index *index, |
11623
c3ee4421e86a
Added mail_max_lock_timeout setting.
Timo Sirainen <tss@iki.fi>
parents:
11538
diff
changeset
|
279 enum mail_index_open_flags flags); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
280 void mail_index_close(struct mail_index *index); |
9311 | 281 /* unlink() all the index files. */ |
282 int mail_index_unlink(struct mail_index *index); | |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
283 |
9099
67369ba9f447
maildir: When saving messages, in some race conditions we might have written a duplicate UID.
Timo Sirainen <tss@iki.fi>
parents:
9001
diff
changeset
|
284 /* Returns TRUE if index is currently in memory. */ |
67369ba9f447
maildir: When saving messages, in some race conditions we might have written a duplicate UID.
Timo Sirainen <tss@iki.fi>
parents:
9001
diff
changeset
|
285 bool mail_index_is_in_memory(struct mail_index *index); |
3911
3a2fe49912f3
Fixed mail_index_move_to_memory() to work better and made it public
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
286 /* Move the index into memory. Returns 0 if ok, -1 if error occurred. */ |
3a2fe49912f3
Fixed mail_index_move_to_memory() to work better and made it public
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
287 int mail_index_move_to_memory(struct mail_index *index); |
3a2fe49912f3
Fixed mail_index_move_to_memory() to work better and made it public
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
288 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
289 struct mail_cache *mail_index_get_cache(struct mail_index *index); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
290 |
2936
57f975a9b63b
Renamed mail_index_refresh() to mail_index_reopen_if_needed(). Added public
Timo Sirainen <tss@iki.fi>
parents:
2904
diff
changeset
|
291 /* Refresh index so mail_index_lookup*() will return latest values. Note that |
57f975a9b63b
Renamed mail_index_refresh() to mail_index_reopen_if_needed(). Added public
Timo Sirainen <tss@iki.fi>
parents:
2904
diff
changeset
|
292 immediately after this call there may already be changes, so if you need to |
57f975a9b63b
Renamed mail_index_refresh() to mail_index_reopen_if_needed(). Added public
Timo Sirainen <tss@iki.fi>
parents:
2904
diff
changeset
|
293 rely on validity of the returned values, use some external locking for it. */ |
14688
128c598d2870
Avoid using (void)s by adding ATTR_NOWARN_UNUSED_RESULT attributes and other ways.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
294 int ATTR_NOWARN_UNUSED_RESULT |
128c598d2870
Avoid using (void)s by adding ATTR_NOWARN_UNUSED_RESULT attributes and other ways.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
295 mail_index_refresh(struct mail_index *index); |
2936
57f975a9b63b
Renamed mail_index_refresh() to mail_index_reopen_if_needed(). Added public
Timo Sirainen <tss@iki.fi>
parents:
2904
diff
changeset
|
296 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
297 /* View can be used to look into index. Sequence numbers inside view change |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
298 only when you synchronize it. The view acquires required locks |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
299 automatically, but you'll have to drop them manually. */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
300 struct mail_index_view *mail_index_view_open(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
|
301 void mail_index_view_close(struct mail_index_view **view); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
302 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
303 /* Returns the index for given view. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
304 struct mail_index *mail_index_view_get_index(struct mail_index_view *view); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
305 /* Returns number of mails in view. */ |
2904
642ba9cd3dac
Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
Timo Sirainen <tss@iki.fi>
parents:
2893
diff
changeset
|
306 uint32_t mail_index_view_get_messages_count(struct mail_index_view *view); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
307 /* Returns TRUE if we lost track of changes for some reason. */ |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
308 bool mail_index_view_is_inconsistent(struct mail_index_view *view); |
11538
aa66db4073c5
lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents:
10722
diff
changeset
|
309 /* Returns number of transactions open for the view. */ |
aa66db4073c5
lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents:
10722
diff
changeset
|
310 unsigned int |
aa66db4073c5
lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents:
10722
diff
changeset
|
311 mail_index_view_get_transaction_count(struct mail_index_view *view); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 /* Transaction has to be opened to be able to modify index. You can have |
5689
c2362f144f15
Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents:
5646
diff
changeset
|
314 multiple transactions open simultaneously. Committed transactions won't |
c2362f144f15
Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents:
5646
diff
changeset
|
315 show up until you've synchronized the view. Expunges won't show up until |
6089
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
316 you've synchronized the mailbox (mail_index_sync_begin). */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
317 struct mail_index_transaction * |
2877
3cb483d565a6
Allow specifying to transaction if it's external. Make mail saving
Timo Sirainen <tss@iki.fi>
parents:
2853
diff
changeset
|
318 mail_index_transaction_begin(struct mail_index_view *view, |
6089
a19931ec66db
Changed mail_transaction_begin() API to take flags parameter instead of two
Timo Sirainen <tss@iki.fi>
parents:
6037
diff
changeset
|
319 enum mail_index_transaction_flags flags); |
8955
4d4e1cbb61a0
Removed rarely used parameters from mail_index_transaction_commit().
Timo Sirainen <tss@iki.fi>
parents:
8953
diff
changeset
|
320 int mail_index_transaction_commit(struct mail_index_transaction **t); |
10367
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
321 int mail_index_transaction_commit_full(struct mail_index_transaction **t, |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
322 struct mail_index_transaction_commit_result *result_r); |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
323 void mail_index_transaction_rollback(struct mail_index_transaction **t); |
5642
7274df228c04
Added mail_index_transction_reset().
Timo Sirainen <tss@iki.fi>
parents:
5626
diff
changeset
|
324 /* Discard all changes in the transaction. */ |
5645
caf10b68dad7
Typofix: transction -> transaction
Timo Sirainen <tss@iki.fi>
parents:
5644
diff
changeset
|
325 void mail_index_transaction_reset(struct mail_index_transaction *t); |
7913
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
326 /* When committing transaction, drop flag/keyword updates for messages whose |
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
327 mdoseq is larger than max_modseq. Save those messages' sequences to the |
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
328 given array. */ |
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
329 void mail_index_transaction_set_max_modseq(struct mail_index_transaction *t, |
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
330 uint64_t max_modseq, |
e04513064165
CONDSTORE: STORE UNCHANGEDSINCE conflicts are now checked atomically.
Timo Sirainen <tss@iki.fi>
parents:
7880
diff
changeset
|
331 ARRAY_TYPE(seq_range) *seqs); |
21146
52a7790352e8
lib-index: Added mail_index_transaction_get_highest_modseq()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21025
diff
changeset
|
332 /* Returns the resulting highest-modseq after this commit. This can be called |
52a7790352e8
lib-index: Added mail_index_transaction_get_highest_modseq()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21025
diff
changeset
|
333 only if transaction log is locked, which normally means only during mail |
52a7790352e8
lib-index: Added mail_index_transaction_get_highest_modseq()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21025
diff
changeset
|
334 index syncing. If there are any appends, they all must have been assigned |
52a7790352e8
lib-index: Added mail_index_transaction_get_highest_modseq()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21025
diff
changeset
|
335 UIDs before calling this. */ |
52a7790352e8
lib-index: Added mail_index_transaction_get_highest_modseq()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21025
diff
changeset
|
336 uint64_t mail_index_transaction_get_highest_modseq(struct mail_index_transaction *t); |
5646
bc3652a97a0f
Added mail_index_transaction_is_expunged()
Timo Sirainen <tss@iki.fi>
parents:
5645
diff
changeset
|
337 |
5644
648237c9ae76
Added mail_index_transaction_get_view()
Timo Sirainen <tss@iki.fi>
parents:
5643
diff
changeset
|
338 /* Returns the view transaction was created for. */ |
648237c9ae76
Added mail_index_transaction_get_view()
Timo Sirainen <tss@iki.fi>
parents:
5643
diff
changeset
|
339 struct mail_index_view * |
5645
caf10b68dad7
Typofix: transction -> transaction
Timo Sirainen <tss@iki.fi>
parents:
5644
diff
changeset
|
340 mail_index_transaction_get_view(struct mail_index_transaction *t); |
5646
bc3652a97a0f
Added mail_index_transaction_is_expunged()
Timo Sirainen <tss@iki.fi>
parents:
5645
diff
changeset
|
341 /* Returns TRUE if the given sequence is being expunged in this transaction. */ |
bc3652a97a0f
Added mail_index_transaction_is_expunged()
Timo Sirainen <tss@iki.fi>
parents:
5645
diff
changeset
|
342 bool mail_index_transaction_is_expunged(struct mail_index_transaction *t, |
bc3652a97a0f
Added mail_index_transaction_is_expunged()
Timo Sirainen <tss@iki.fi>
parents:
5645
diff
changeset
|
343 uint32_t seq); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
344 |
8860 | 345 /* Returns a view containing the mailbox state after changes in transaction |
346 are applied. The view can still be used after transaction has been | |
347 committed. */ | |
2224
a816e2d88406
Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
2221
diff
changeset
|
348 struct mail_index_view * |
2271
15d959d262a4
UIDs for appended messages can now be assigned all at once. Maildir now
Timo Sirainen <tss@iki.fi>
parents:
2247
diff
changeset
|
349 mail_index_transaction_open_updated_view(struct mail_index_transaction *t); |
2224
a816e2d88406
Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents:
2221
diff
changeset
|
350 |
6809
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6736
diff
changeset
|
351 /* Begin synchronizing mailbox with index file. Returns 1 if ok, |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6736
diff
changeset
|
352 0 if MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES is set and there's nothing to |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6736
diff
changeset
|
353 sync, -1 if error. |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
354 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
355 mail_index_sync_next() returns all changes from previously committed |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
356 transactions which haven't yet been committed to the actual mailbox. |
2272
ced88553af0b
mail_index_sync_sort_flags() now merges flag changes so mail storage
Timo Sirainen <tss@iki.fi>
parents:
2271
diff
changeset
|
357 They're returned in ascending order and they never overlap (if we add more |
ced88553af0b
mail_index_sync_sort_flags() now merges flag changes so mail storage
Timo Sirainen <tss@iki.fi>
parents:
2271
diff
changeset
|
358 sync types, then they might). You must go through all of them and update |
ced88553af0b
mail_index_sync_sort_flags() now merges flag changes so mail storage
Timo Sirainen <tss@iki.fi>
parents:
2271
diff
changeset
|
359 the mailbox accordingly. |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 |
6268
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
361 Changes done to the returned transaction are expected to describe the |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
362 mailbox's current state. |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
363 |
7330
93f67b71476c
Added MAIL_INDEX_MAIL_FLAG_BACKEND flag that can be used for
Timo Sirainen <tss@iki.fi>
parents:
6984
diff
changeset
|
364 The returned view already contains all the changes (except expunge |
93f67b71476c
Added MAIL_INDEX_MAIL_FLAG_BACKEND flag that can be used for
Timo Sirainen <tss@iki.fi>
parents:
6984
diff
changeset
|
365 requests). After applying sync records on top of backend flags they should |
93f67b71476c
Added MAIL_INDEX_MAIL_FLAG_BACKEND flag that can be used for
Timo Sirainen <tss@iki.fi>
parents:
6984
diff
changeset
|
366 match flags in the view. If they don't, there have been external changes. |
6268
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
367 |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
368 Returned expunges are treated as expunge requests. They're not really |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
369 removed from the index until you mark them expunged to the returned |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
370 transaction. If it's not possible to expunge the message (e.g. permission |
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
371 denied), simply don't mark them expunged. |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
372 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
373 Returned sequence numbers describe the mailbox state at the beginning of |
6268
2a79d23ad98f
Updated mail_index_sync_begin() comments.
Timo Sirainen <tss@iki.fi>
parents:
6262
diff
changeset
|
374 synchronization, ie. expunges don't affect them. */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
375 int mail_index_sync_begin(struct mail_index *index, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 struct mail_index_sync_ctx **ctx_r, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
377 struct mail_index_view **view_r, |
5643
453128e12b11
mail_index_sync_begin() returns now transaction directly so the syncing code
Timo Sirainen <tss@iki.fi>
parents:
5642
diff
changeset
|
378 struct mail_index_transaction **trans_r, |
5779
b25c9ca2142b
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Timo Sirainen <tss@iki.fi>
parents:
5766
diff
changeset
|
379 enum mail_index_sync_flags flags); |
6332
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
380 /* Like mail_index_sync_begin(), but returns 1 if OK and if index is already |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
381 synchronized up to the given log_file_seq+offset, the synchronization isn't |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
382 started and this function returns 0. This should be done when you wish to |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
383 sync your committed transaction instead of doing a full mailbox |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
384 synchronization. */ |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
385 int mail_index_sync_begin_to(struct mail_index *index, |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
386 struct mail_index_sync_ctx **ctx_r, |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
387 struct mail_index_view **view_r, |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
388 struct mail_index_transaction **trans_r, |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
389 uint32_t log_file_seq, uoff_t log_file_offset, |
aa4a78b3c626
Renamed mail_index_sync_begin() to mail_index_sync_begin_to() and added a
Timo Sirainen <tss@iki.fi>
parents:
6279
diff
changeset
|
390 enum mail_index_sync_flags flags); |
6450
3132ce8f425d
Added mail_index_sync_have_any().
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
391 /* Returns TRUE if it currently looks like syncing would return changes. */ |
3132ce8f425d
Added mail_index_sync_have_any().
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
392 bool mail_index_sync_have_any(struct mail_index *index, |
3132ce8f425d
Added mail_index_sync_have_any().
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
393 enum mail_index_sync_flags flags); |
19158
91f68c1b9b36
lib-index: Added mail_index_sync_have_any_expunges()
Timo Sirainen <tss@iki.fi>
parents:
18849
diff
changeset
|
394 /* Returns TRUE if it currently looks like syncing would return expunges. */ |
91f68c1b9b36
lib-index: Added mail_index_sync_have_any_expunges()
Timo Sirainen <tss@iki.fi>
parents:
18849
diff
changeset
|
395 bool mail_index_sync_have_any_expunges(struct mail_index *index); |
8962
b12ae0c97069
Added mail_index_sync_get_offsets().
Timo Sirainen <tss@iki.fi>
parents:
8960
diff
changeset
|
396 /* Returns the log file seq+offsets for the area which this sync is handling. */ |
b12ae0c97069
Added mail_index_sync_get_offsets().
Timo Sirainen <tss@iki.fi>
parents:
8960
diff
changeset
|
397 void mail_index_sync_get_offsets(struct mail_index_sync_ctx *ctx, |
b12ae0c97069
Added mail_index_sync_get_offsets().
Timo Sirainen <tss@iki.fi>
parents:
8960
diff
changeset
|
398 uint32_t *seq1_r, uoff_t *offset1_r, |
b12ae0c97069
Added mail_index_sync_get_offsets().
Timo Sirainen <tss@iki.fi>
parents:
8960
diff
changeset
|
399 uint32_t *seq2_r, uoff_t *offset2_r); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 /* Returns -1 if error, 0 if sync is finished, 1 if record was filled. */ |
6278
ce83635191d4
mail_index_sync_next() can't fail anymore.
Timo Sirainen <tss@iki.fi>
parents:
6277
diff
changeset
|
401 bool mail_index_sync_next(struct mail_index_sync_ctx *ctx, |
ce83635191d4
mail_index_sync_next() can't fail anymore.
Timo Sirainen <tss@iki.fi>
parents:
6277
diff
changeset
|
402 struct mail_index_sync_rec *sync_rec); |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
403 /* Returns TRUE if there's more to sync. */ |
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
404 bool mail_index_sync_have_more(struct mail_index_sync_ctx *ctx); |
11646
b2aca3e50f44
lib-index: Added mail_index_sync_has_expunges()
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
405 /* Returns TRUE if sync has any expunges to handle. */ |
b2aca3e50f44
lib-index: Added mail_index_sync_has_expunges()
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
406 bool mail_index_sync_has_expunges(struct mail_index_sync_ctx *ctx); |
3264
98e3001ca527
Added mail_index_sync_reset() to restart syncing from beginning.
Timo Sirainen <tss@iki.fi>
parents:
3254
diff
changeset
|
407 /* Reset syncing to initial state after mail_index_sync_begin(), so you can |
98e3001ca527
Added mail_index_sync_reset() to restart syncing from beginning.
Timo Sirainen <tss@iki.fi>
parents:
3254
diff
changeset
|
408 go through all the sync records again with mail_index_sync_next(). */ |
98e3001ca527
Added mail_index_sync_reset() to restart syncing from beginning.
Timo Sirainen <tss@iki.fi>
parents:
3254
diff
changeset
|
409 void mail_index_sync_reset(struct mail_index_sync_ctx *ctx); |
10367
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
410 /* Update result when refreshing index at the end of sync. */ |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
411 void mail_index_sync_set_commit_result(struct mail_index_sync_ctx *ctx, |
75d3d4374dda
Transaction commits can now track how many uid/modseq updates were ignored.
Timo Sirainen <tss@iki.fi>
parents:
9725
diff
changeset
|
412 struct mail_index_transaction_commit_result *result); |
17928
193c82411d73
lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock" warnings.
Timo Sirainen <tss@iki.fi>
parents:
17923
diff
changeset
|
413 /* Don't log a warning even if syncing took over |
193c82411d73
lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock" warnings.
Timo Sirainen <tss@iki.fi>
parents:
17923
diff
changeset
|
414 MAIL_TRANSACTION_LOG_LOCK_WARN_SECS seconds. Usually this is called because |
193c82411d73
lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock" warnings.
Timo Sirainen <tss@iki.fi>
parents:
17923
diff
changeset
|
415 the caller itself already logged a warning about it. */ |
193c82411d73
lib-index: Added mail_index_sync_no_warning() to prevent "long transaction lock" warnings.
Timo Sirainen <tss@iki.fi>
parents:
17923
diff
changeset
|
416 void mail_index_sync_no_warning(struct mail_index_sync_ctx *ctx); |
19800
363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19158
diff
changeset
|
417 /* If a warning is logged because syncing took over |
363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19158
diff
changeset
|
418 MAIL_TRANSACTION_LOG_LOCK_WARN_SECS seconds, log this as the reason for the |
363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19158
diff
changeset
|
419 syncing. */ |
363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19158
diff
changeset
|
420 void mail_index_sync_set_reason(struct mail_index_sync_ctx *ctx, |
363311913f82
lib-index: Added mail_index_sync_set_reason() to improve lock wait log warnings
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19158
diff
changeset
|
421 const char *reason); |
2393
d598c82a3c22
Renamed mail_index_sync_end() to _commit() and added _rollback(). Fixed mbox
Timo Sirainen <tss@iki.fi>
parents:
2373
diff
changeset
|
422 /* Commit synchronization by writing all changes to mail index file. */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
423 int mail_index_sync_commit(struct mail_index_sync_ctx **ctx); |
2393
d598c82a3c22
Renamed mail_index_sync_end() to _commit() and added _rollback(). Fixed mbox
Timo Sirainen <tss@iki.fi>
parents:
2373
diff
changeset
|
424 /* Rollback synchronization - none of the changes listed by sync_next() are |
d598c82a3c22
Renamed mail_index_sync_end() to _commit() and added _rollback(). Fixed mbox
Timo Sirainen <tss@iki.fi>
parents:
2373
diff
changeset
|
425 actually written to index file. */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
426 void mail_index_sync_rollback(struct mail_index_sync_ctx **ctx); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
427 |
1944
5a3c3b4d4a02
remove mail_index_reset() completely
Timo Sirainen <tss@iki.fi>
parents:
1920
diff
changeset
|
428 /* Mark index file corrupted. Invalidates all views. */ |
1945 | 429 void mail_index_mark_corrupted(struct mail_index *index); |
6377
29f427039e00
fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents:
6354
diff
changeset
|
430 /* Check and fix any found problems. Returns -1 if we couldn't lock for sync, |
29f427039e00
fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents:
6354
diff
changeset
|
431 0 if everything went ok. */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
432 int mail_index_fsck(struct mail_index *index); |
13806
8535def4ad01
lib-index: Added mail_index_reset_fscked()
Timo Sirainen <tss@iki.fi>
parents:
13509
diff
changeset
|
433 /* Returns TRUE if mail_index_fsck() has been called since the last |
8535def4ad01
lib-index: Added mail_index_reset_fscked()
Timo Sirainen <tss@iki.fi>
parents:
13509
diff
changeset
|
434 mail_index_reset_fscked() call. */ |
8535def4ad01
lib-index: Added mail_index_reset_fscked()
Timo Sirainen <tss@iki.fi>
parents:
13509
diff
changeset
|
435 bool mail_index_reset_fscked(struct mail_index *index); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
436 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
437 /* Synchronize changes in view. You have to go through all records, or view |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
438 will be marked inconsistent. Only sync_mask type records are |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
439 synchronized. */ |
7872
3882c6cbfa99
mail_index_view_sync_begin() now delays its failures to _commit().
Timo Sirainen <tss@iki.fi>
parents:
7815
diff
changeset
|
440 struct mail_index_view_sync_ctx * |
3882c6cbfa99
mail_index_view_sync_begin() now delays its failures to _commit().
Timo Sirainen <tss@iki.fi>
parents:
7815
diff
changeset
|
441 mail_index_view_sync_begin(struct mail_index_view *view, |
3882c6cbfa99
mail_index_view_sync_begin() now delays its failures to _commit().
Timo Sirainen <tss@iki.fi>
parents:
7815
diff
changeset
|
442 enum mail_index_view_sync_flags flags); |
6279
f52e7d1402b5
mail_index_view_sync_next() and mailbox_sync_next() returns now bool.
Timo Sirainen <tss@iki.fi>
parents:
6278
diff
changeset
|
443 bool mail_index_view_sync_next(struct mail_index_view_sync_ctx *ctx, |
f52e7d1402b5
mail_index_view_sync_next() and mailbox_sync_next() returns now bool.
Timo Sirainen <tss@iki.fi>
parents:
6278
diff
changeset
|
444 struct mail_index_view_sync_rec *sync_rec); |
4688
764bd841e0ae
Try to avoid sending duplicate/useless flag updates.
Timo Sirainen <tss@iki.fi>
parents:
4656
diff
changeset
|
445 void |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
446 mail_index_view_sync_get_expunges(struct mail_index_view_sync_ctx *ctx, |
4688
764bd841e0ae
Try to avoid sending duplicate/useless flag updates.
Timo Sirainen <tss@iki.fi>
parents:
4656
diff
changeset
|
447 const ARRAY_TYPE(seq_range) **expunges_r); |
7815
2d62129a709b
QRESYNC: If MODSEQs were returned in FETCH replies but there are pending
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
448 int mail_index_view_sync_commit(struct mail_index_view_sync_ctx **ctx, |
2d62129a709b
QRESYNC: If MODSEQs were returned in FETCH replies but there are pending
Timo Sirainen <tss@iki.fi>
parents:
7798
diff
changeset
|
449 bool *delayed_expunges_r); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
450 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
451 /* Returns the index header. */ |
2892
62d53b49110d
Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents:
2877
diff
changeset
|
452 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:
2877
diff
changeset
|
453 mail_index_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
|
454 /* Returns the wanted message record. */ |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
455 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
|
456 mail_index_lookup(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
|
457 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
|
458 mail_index_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
|
459 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
|
460 /* Returns TRUE if the given message has already been expunged from index. */ |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
461 bool mail_index_is_expunged(struct mail_index_view *view, uint32_t seq); |
3821
c8b2ed2c9961
We assumed that keyword index arrays were always sorted. This isn't always
Timo Sirainen <tss@iki.fi>
parents:
3819
diff
changeset
|
462 /* Note that returned keyword indexes aren't sorted. */ |
6277
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
463 void mail_index_lookup_keywords(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
|
464 ARRAY_TYPE(keyword_indexes) *keyword_idx); |
7880
cca4ef877d43
Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents:
7875
diff
changeset
|
465 /* Return keywords from given map. */ |
cca4ef877d43
Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents:
7875
diff
changeset
|
466 void mail_index_map_lookup_keywords(struct mail_index_map *map, uint32_t seq, |
cca4ef877d43
Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents:
7875
diff
changeset
|
467 ARRAY_TYPE(keyword_indexes) *keyword_idx); |
8875
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
468 /* mail_index_lookup[_keywords]() returns the latest flag changes. |
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
469 This function instead attempts to return the flags and keywords done by the |
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
470 last view sync. */ |
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
471 void mail_index_lookup_view_flags(struct mail_index_view *view, uint32_t seq, |
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
472 enum mail_flags *flags_r, |
629004d13ec4
Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents:
8860
diff
changeset
|
473 ARRAY_TYPE(keyword_indexes) *keyword_idx); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
474 /* Returns the UID for given message. May be slightly faster than |
2191
4d25f3fe5de1
mail_index_lookup() and mail_index_lookup_extra() now returns 0 if message
Timo Sirainen <tss@iki.fi>
parents:
2190
diff
changeset
|
475 mail_index_lookup()->uid. */ |
6275
913b188f4dd4
Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents:
6268
diff
changeset
|
476 void mail_index_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:
6268
diff
changeset
|
477 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:
6675
diff
changeset
|
478 /* Convert UID range to sequence range. If no UIDs are found, returns FALSE and |
90bcf480312d
Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents:
6675
diff
changeset
|
479 sequences are set to 0. Note that any of the returned sequences may have |
90bcf480312d
Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents:
6675
diff
changeset
|
480 been expunged already. */ |
90bcf480312d
Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents:
6675
diff
changeset
|
481 bool mail_index_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:
6268
diff
changeset
|
482 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:
6268
diff
changeset
|
483 uint32_t *first_seq_r, uint32_t *last_seq_r); |
6677
90bcf480312d
Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents:
6675
diff
changeset
|
484 bool mail_index_lookup_seq(struct mail_index_view *view, |
90bcf480312d
Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents:
6675
diff
changeset
|
485 uint32_t uid, uint32_t *seq_r); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
486 /* Find first mail with (mail->flags & flags_mask) == flags. Useful mostly for |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
487 taking advantage of lowwater-fields in headers. */ |
6275
913b188f4dd4
Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents:
6268
diff
changeset
|
488 void mail_index_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:
6268
diff
changeset
|
489 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:
6268
diff
changeset
|
490 uint32_t *seq_r); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
491 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
492 /* Append a new record to index. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
493 void mail_index_append(struct mail_index_transaction *t, uint32_t uid, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
494 uint32_t *seq_r); |
15609 | 495 /* Assign UIDs for mails with uid=0 or uid<first_uid. All the assigned UIDs |
496 are higher than the highest unassigned UID (i.e. it doesn't try to fill UID | |
497 gaps). Assumes that mailbox is locked in a way that UIDs can be safely | |
498 assigned. Returns UIDs for all asigned messages, in their sequence order | |
499 (so UIDs are not necessary ascending). */ | |
9684
fb8bc26d7194
Changed mail_index_append_assign_uids() to mail_index_append_finish_uids() with API changes.
Timo Sirainen <tss@iki.fi>
parents:
9681
diff
changeset
|
500 void mail_index_append_finish_uids(struct mail_index_transaction *t, |
fb8bc26d7194
Changed mail_index_append_assign_uids() to mail_index_append_finish_uids() with API changes.
Timo Sirainen <tss@iki.fi>
parents:
9681
diff
changeset
|
501 uint32_t first_uid, |
fb8bc26d7194
Changed mail_index_append_assign_uids() to mail_index_append_finish_uids() with API changes.
Timo Sirainen <tss@iki.fi>
parents:
9681
diff
changeset
|
502 ARRAY_TYPE(seq_range) *uids_r); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
503 /* Expunge record from index. Note that this doesn't affect sequence numbers |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
504 until transaction is committed and mailbox is synced. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
505 void mail_index_expunge(struct mail_index_transaction *t, uint32_t seq); |
9624
2558ba736207
Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents:
9537
diff
changeset
|
506 /* Like mail_index_expunge(), but also write message GUID to transaction log. */ |
2558ba736207
Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents:
9537
diff
changeset
|
507 void mail_index_expunge_guid(struct mail_index_transaction *t, uint32_t seq, |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
13189
diff
changeset
|
508 const guid_128_t guid_128); |
21293
0b5ede227460
lib-index: Add mail_index_revert_changes()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21224
diff
changeset
|
509 /* Revert all changes done in this transaction to the given existing mail. */ |
0b5ede227460
lib-index: Add mail_index_revert_changes()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21224
diff
changeset
|
510 void mail_index_revert_changes(struct mail_index_transaction *t, uint32_t seq); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
511 /* Update flags in index. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
512 void mail_index_update_flags(struct mail_index_transaction *t, uint32_t seq, |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
513 enum modify_type modify_type, |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
514 enum mail_flags flags); |
3113
2f53b73b3ea6
Added mail_index_update_flags_range() and optimized the non-range version as
Timo Sirainen <tss@iki.fi>
parents:
3086
diff
changeset
|
515 void mail_index_update_flags_range(struct mail_index_transaction *t, |
2f53b73b3ea6
Added mail_index_update_flags_range() and optimized the non-range version as
Timo Sirainen <tss@iki.fi>
parents:
3086
diff
changeset
|
516 uint32_t seq1, uint32_t seq2, |
2f53b73b3ea6
Added mail_index_update_flags_range() and optimized the non-range version as
Timo Sirainen <tss@iki.fi>
parents:
3086
diff
changeset
|
517 enum modify_type modify_type, |
2f53b73b3ea6
Added mail_index_update_flags_range() and optimized the non-range version as
Timo Sirainen <tss@iki.fi>
parents:
3086
diff
changeset
|
518 enum mail_flags flags); |
16023
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
519 /* Specified attribute's value was changed. This is just a notification so the |
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
520 change gets assigned its own modseq and any log readers can find out about |
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
521 this change. */ |
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
522 void mail_index_attribute_set(struct mail_index_transaction *t, |
16208
1ef57aca7d2f
lib-index: Add timestamps and value lengths to attribute change records in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
16023
diff
changeset
|
523 bool pvt, const char *key, |
1ef57aca7d2f
lib-index: Add timestamps and value lengths to attribute change records in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
16023
diff
changeset
|
524 time_t timestamp, uint32_t value_len); |
16023
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
525 /* Attribute was deleted. */ |
db0136374bb0
lib-index: mail_index_attribute_[un]set() adds changed attributes' keys to transaction log.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
526 void mail_index_attribute_unset(struct mail_index_transaction *t, |
16208
1ef57aca7d2f
lib-index: Add timestamps and value lengths to attribute change records in transaction log.
Timo Sirainen <tss@iki.fi>
parents:
16023
diff
changeset
|
527 bool pvt, const char *key, time_t timestamp); |
9691
b09d9350a2d9
Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents:
9684
diff
changeset
|
528 /* Update message's modseq to be at least min_modseq. */ |
b09d9350a2d9
Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents:
9684
diff
changeset
|
529 void mail_index_update_modseq(struct mail_index_transaction *t, uint32_t seq, |
b09d9350a2d9
Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents:
9684
diff
changeset
|
530 uint64_t min_modseq); |
9725
1411f157ffdd
lib-index: Added mail_index_update_highest_modseq().
Timo Sirainen <tss@iki.fi>
parents:
9691
diff
changeset
|
531 /* Update highest modseq to be at least min_modseq. */ |
1411f157ffdd
lib-index: Added mail_index_update_highest_modseq().
Timo Sirainen <tss@iki.fi>
parents:
9691
diff
changeset
|
532 void mail_index_update_highest_modseq(struct mail_index_transaction *t, |
1411f157ffdd
lib-index: Added mail_index_update_highest_modseq().
Timo Sirainen <tss@iki.fi>
parents:
9691
diff
changeset
|
533 uint64_t min_modseq); |
5849
a9df50952600
Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents:
5779
diff
changeset
|
534 /* Reset the index before committing this transaction. This is usually done |
a9df50952600
Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents:
5779
diff
changeset
|
535 only when UIDVALIDITY changes. */ |
a9df50952600
Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents:
5779
diff
changeset
|
536 void mail_index_reset(struct mail_index_transaction *t); |
21224
1455417c56a5
lib-index: Add mail_index_unset_fscked()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21223
diff
changeset
|
537 /* Remove MAIL_INDEX_HDR_FLAG_FSCKD from header if it exists. This must be |
1455417c56a5
lib-index: Add mail_index_unset_fscked()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21223
diff
changeset
|
538 called only during syncing so that the mailbox is locked. */ |
1455417c56a5
lib-index: Add mail_index_unset_fscked()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21223
diff
changeset
|
539 void mail_index_unset_fscked(struct mail_index_transaction *t); |
10655
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
540 /* Mark index deleted. No further changes will be possible after the |
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
541 transaction has been committed. */ |
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
542 void mail_index_set_deleted(struct mail_index_transaction *t); |
10674
22354f505277
lib-index: Added support for undeleting a deleted index.
Timo Sirainen <tss@iki.fi>
parents:
10655
diff
changeset
|
543 /* Mark a deleted index as undeleted. Afterwards index can be changed again. */ |
22354f505277
lib-index: Added support for undeleting a deleted index.
Timo Sirainen <tss@iki.fi>
parents:
10655
diff
changeset
|
544 void mail_index_set_undeleted(struct mail_index_transaction *t); |
10655
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
545 /* Returns TRUE if index has been set deleted. This gets set only after |
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
546 index has been opened/refreshed and the transaction has been seen. */ |
fc0ac73f0b36
Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents:
10367
diff
changeset
|
547 bool mail_index_is_deleted(struct mail_index *index); |
10722
31aca1df525b
lib-index: Added mail_index_get_modification_time().
Timo Sirainen <tss@iki.fi>
parents:
10678
diff
changeset
|
548 /* Returns the last time mailbox was modified. */ |
31aca1df525b
lib-index: Added mail_index_get_modification_time().
Timo Sirainen <tss@iki.fi>
parents:
10678
diff
changeset
|
549 int mail_index_get_modification_time(struct mail_index *index, time_t *mtime_r); |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
550 |
6335
a1c587d3d633
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
Timo Sirainen <tss@iki.fi>
parents:
6332
diff
changeset
|
551 /* Lookup a keyword, returns TRUE if found, FALSE if not. */ |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
552 bool mail_index_keyword_lookup(struct mail_index *index, |
6335
a1c587d3d633
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
Timo Sirainen <tss@iki.fi>
parents:
6332
diff
changeset
|
553 const char *keyword, unsigned int *idx_r); |
a1c587d3d633
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
Timo Sirainen <tss@iki.fi>
parents:
6332
diff
changeset
|
554 void mail_index_keyword_lookup_or_create(struct mail_index *index, |
a1c587d3d633
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
Timo Sirainen <tss@iki.fi>
parents:
6332
diff
changeset
|
555 const char *keyword, |
a1c587d3d633
Removed autocreate parameter from mail_index_keyword_lookup(). Added a new
Timo Sirainen <tss@iki.fi>
parents:
6332
diff
changeset
|
556 unsigned int *idx_r); |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
557 /* Return a pointer to array of NULL-terminated list of keywords. Note that |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
558 the array contents (and thus pointers inside it) may change after calling |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
559 mail_index_keywords_create() or mail_index_sync_begin(). */ |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3911
diff
changeset
|
560 const ARRAY_TYPE(keywords) *mail_index_get_keywords(struct mail_index *index); |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
561 |
6354
8476d665530f
Changed mail_keywords creation APIs to take mailbox/index instead of
Timo Sirainen <tss@iki.fi>
parents:
6335
diff
changeset
|
562 /* Create a keyword list structure. */ |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
563 struct mail_keywords * |
6354
8476d665530f
Changed mail_keywords creation APIs to take mailbox/index instead of
Timo Sirainen <tss@iki.fi>
parents:
6335
diff
changeset
|
564 mail_index_keywords_create(struct mail_index *index, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14599
diff
changeset
|
565 const char *const keywords[]) ATTR_NULL(2); |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
566 struct mail_keywords * |
6354
8476d665530f
Changed mail_keywords creation APIs to take mailbox/index instead of
Timo Sirainen <tss@iki.fi>
parents:
6335
diff
changeset
|
567 mail_index_keywords_create_from_indexes(struct mail_index *index, |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3911
diff
changeset
|
568 const ARRAY_TYPE(keyword_indexes) |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3911
diff
changeset
|
569 *keyword_indexes); |
9508
094ad127d132
Added reference counting to struct mail_keywords and related APIs.
Timo Sirainen <tss@iki.fi>
parents:
9311
diff
changeset
|
570 void mail_index_keywords_ref(struct mail_keywords *keywords); |
094ad127d132
Added reference counting to struct mail_keywords and related APIs.
Timo Sirainen <tss@iki.fi>
parents:
9311
diff
changeset
|
571 void mail_index_keywords_unref(struct mail_keywords **keywords); |
6354
8476d665530f
Changed mail_keywords creation APIs to take mailbox/index instead of
Timo Sirainen <tss@iki.fi>
parents:
6335
diff
changeset
|
572 |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
573 /* Update keywords for given message. */ |
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
574 void mail_index_update_keywords(struct mail_index_transaction *t, uint32_t seq, |
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
575 enum modify_type modify_type, |
3086 | 576 struct mail_keywords *keywords); |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
577 |
3322
49071cc19102
If UIDVALIDITY changes, don't invalidate the whole index. Just expunge all
Timo Sirainen <tss@iki.fi>
parents:
3278
diff
changeset
|
578 /* Update field in header. If prepend is TRUE, the header change is visible |
49071cc19102
If UIDVALIDITY changes, don't invalidate the whole index. Just expunge all
Timo Sirainen <tss@iki.fi>
parents:
3278
diff
changeset
|
579 before message syncing begins. */ |
2050
ee1095ccfd23
Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents:
2038
diff
changeset
|
580 void mail_index_update_header(struct mail_index_transaction *t, |
3322
49071cc19102
If UIDVALIDITY changes, don't invalidate the whole index. Just expunge all
Timo Sirainen <tss@iki.fi>
parents:
3278
diff
changeset
|
581 size_t offset, const void *data, size_t size, |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
582 bool prepend); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
583 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
584 /* Returns the full error message for last error. This message may |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
585 contain paths etc. so it shouldn't be shown to users. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
586 const char *mail_index_get_error_message(struct mail_index *index); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
587 /* Reset the error message. */ |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
588 void mail_index_reset_error(struct mail_index *index); |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
589 |
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
590 /* Apply changes in MAIL_INDEX_SYNC_TYPE_FLAGS typed sync records to given |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
591 flags variable. */ |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
592 void mail_index_sync_flags_apply(const struct mail_index_sync_rec *sync_rec, |
3016
61c8d205d887
Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents:
2936
diff
changeset
|
593 uint8_t *flags); |
3254
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
594 /* Apply changes in MAIL_INDEX_SYNC_TYPE_KEYWORD_* typed sync records to given |
a2943c050571
Keywords are now stored in X-Keywords headers in mbox. Did several related
Timo Sirainen <tss@iki.fi>
parents:
3231
diff
changeset
|
595 keywords array. Returns TRUE If something was changed. */ |
3863
55df57c028d4
Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents:
3828
diff
changeset
|
596 bool mail_index_sync_keywords_apply(const struct mail_index_sync_rec *sync_rec, |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
3911
diff
changeset
|
597 ARRAY_TYPE(keyword_indexes) *keywords); |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
598 |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
599 /* register index extension. name is a unique identifier for the extension. |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
600 returns unique identifier for the name. */ |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
601 uint32_t mail_index_ext_register(struct mail_index *index, const char *name, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
602 uint32_t default_hdr_size, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
603 uint16_t default_record_size, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
604 uint16_t default_record_align); |
18849
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
605 /* Change an already registered extension's default sizes. */ |
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
606 void mail_index_ext_register_resize_defaults(struct mail_index *index, |
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
607 uint32_t ext_id, |
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
608 uint32_t default_hdr_size, |
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
609 uint16_t default_record_size, |
9c90eba19aee
lib-index: Added mail_index_ext_register_resize_defaults()
Timo Sirainen <tss@iki.fi>
parents:
18843
diff
changeset
|
610 uint16_t default_record_align); |
6679 | 611 /* Returns TRUE and sets ext_id_r if extension with given name is registered. */ |
612 bool mail_index_ext_lookup(struct mail_index *index, const char *name, | |
613 uint32_t *ext_id_r); | |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
614 /* Resize existing extension data. If size is grown, the new data will be |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
615 zero-filled. If size is shrinked, the data is simply dropped. */ |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
616 void mail_index_ext_resize(struct mail_index_transaction *t, uint32_t ext_id, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
617 uint32_t hdr_size, uint16_t record_size, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
618 uint16_t record_align); |
16402
bd8ec99cf502
lib-index: Added mail_index_ext_resize_hdr()
Timo Sirainen <tss@iki.fi>
parents:
16208
diff
changeset
|
619 /* Resize header, keeping the old record size. */ |
bd8ec99cf502
lib-index: Added mail_index_ext_resize_hdr()
Timo Sirainen <tss@iki.fi>
parents:
16208
diff
changeset
|
620 void mail_index_ext_resize_hdr(struct mail_index_transaction *t, |
bd8ec99cf502
lib-index: Added mail_index_ext_resize_hdr()
Timo Sirainen <tss@iki.fi>
parents:
16208
diff
changeset
|
621 uint32_t ext_id, uint32_t hdr_size); |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
622 |
7563
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
623 /* Reset extension. Any updates for this extension which were issued before the |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
624 writer had seen this reset are discarded. reset_id is used to figure this |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
625 out, so it must be different every time. If clear_data=TRUE, records and |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
626 header is zeroed. */ |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
627 void mail_index_ext_reset(struct mail_index_transaction *t, uint32_t ext_id, |
7563
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
628 uint32_t reset_id, bool clear_data); |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
629 /* Like mail_index_ext_reset(), but increase extension's reset_id atomically |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
630 when the transaction is being committed. If prev_reset_id doesn't match the |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
631 latest reset_id, the reset_id isn't increased and all extension changes are |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
632 ignored. */ |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
633 void mail_index_ext_reset_inc(struct mail_index_transaction *t, uint32_t ext_id, |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
634 uint32_t prev_reset_id, bool clear_data); |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
635 /* Discard existing extension updates in this transaction and write new updates |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
636 using the given reset_id. The difference to mail_index_ext_reset() is that |
6de1aed24ce5
Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents:
7536
diff
changeset
|
637 this doesn't clear any existing record or header data. */ |
5946
19bc2a4b3669
Added mail_index_ext_set_reset_id().
Timo Sirainen <tss@iki.fi>
parents:
5849
diff
changeset
|
638 void mail_index_ext_set_reset_id(struct mail_index_transaction *t, |
19bc2a4b3669
Added mail_index_ext_set_reset_id().
Timo Sirainen <tss@iki.fi>
parents:
5849
diff
changeset
|
639 uint32_t ext_id, uint32_t reset_id); |
6171
635b58fe8287
Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents:
6091
diff
changeset
|
640 /* Get the current reset_id for given extension. Returns TRUE if it exists. */ |
635b58fe8287
Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents:
6091
diff
changeset
|
641 bool mail_index_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
|
642 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:
6091
diff
changeset
|
643 uint32_t ext_id, uint32_t *reset_id_r); |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
644 |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
645 /* Returns extension header. */ |
6275
913b188f4dd4
Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents:
6268
diff
changeset
|
646 void mail_index_get_header_ext(struct mail_index_view *view, uint32_t ext_id, |
913b188f4dd4
Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents:
6268
diff
changeset
|
647 const void **data_r, size_t *data_size_r); |
913b188f4dd4
Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents:
6268
diff
changeset
|
648 void mail_index_map_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:
6268
diff
changeset
|
649 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:
6268
diff
changeset
|
650 const void **data_r, size_t *data_size_r); |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
651 /* Returns the wanted extension record for given message. If it doesn't exist, |
6277
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
652 *data_r is set to NULL. expunged_r is TRUE if the message has already been |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
653 expunged from the index. */ |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
654 void mail_index_lookup_ext(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
|
655 uint32_t ext_id, const void **data_r, |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
656 bool *expunged_r); |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
657 void mail_index_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
|
658 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
|
659 const void **data_r, bool *expunged_r); |
3828
eba704899933
mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents:
3825
diff
changeset
|
660 /* Get current extension sizes. Returns 1 if ok, 0 if extension doesn't exist |
eba704899933
mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents:
3825
diff
changeset
|
661 in view. Any of the _r parameters may be NULL. */ |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14599
diff
changeset
|
662 void mail_index_ext_get_size(struct mail_index_map *map, uint32_t ext_id, |
6277
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
663 uint32_t *hdr_size_r, uint16_t *record_size_r, |
5f66277bbe40
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents:
6275
diff
changeset
|
664 uint16_t *record_align_r); |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
665 /* Update extension header field. */ |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
666 void mail_index_update_header_ext(struct mail_index_transaction *t, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
667 uint32_t ext_id, size_t offset, |
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
668 const void *data, size_t size); |
2853
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
669 /* Update extension record. If old_data_r is non-NULL and the record extension |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
670 was already updated in this transaction, it's set to contain the data it's |
512dd7d76cdc
Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents:
2819
diff
changeset
|
671 now overwriting. */ |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
672 void mail_index_update_ext(struct mail_index_transaction *t, uint32_t seq, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14599
diff
changeset
|
673 uint32_t ext_id, const void *data, void *old_data) |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14599
diff
changeset
|
674 ATTR_NULL(5); |
8988
07cdd2e39e31
mail_index_atomic_inc_ext() now returns the current diff sum.
Timo Sirainen <tss@iki.fi>
parents:
8973
diff
changeset
|
675 /* Increase/decrease number in extension atomically. Returns the sum of the |
07cdd2e39e31
mail_index_atomic_inc_ext() now returns the current diff sum.
Timo Sirainen <tss@iki.fi>
parents:
8973
diff
changeset
|
676 diffs for this seq. */ |
07cdd2e39e31
mail_index_atomic_inc_ext() now returns the current diff sum.
Timo Sirainen <tss@iki.fi>
parents:
8973
diff
changeset
|
677 int mail_index_atomic_inc_ext(struct mail_index_transaction *t, |
07cdd2e39e31
mail_index_atomic_inc_ext() now returns the current diff sum.
Timo Sirainen <tss@iki.fi>
parents:
8973
diff
changeset
|
678 uint32_t seq, uint32_t ext_id, int diff); |
2683
d41c42a7bf1e
Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents:
2671
diff
changeset
|
679 |
1915
79790750c349
importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
680 #endif |