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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6410
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 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
2f6e137cdc44 Syncing optimizations.
Timo Sirainen <tss@iki.fi>
parents: 1945
diff changeset
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
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2115
diff changeset
79 uint16_t base_header_size;
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2115
diff changeset
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
490a85b869e0 Merged changes from v2.0.15.
Timo Sirainen <tss@iki.fi>
parents: 13287
diff changeset
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
0b3d90514e85 Added mail_index_unlink().
Timo Sirainen <tss@iki.fi>
parents: 9100
diff changeset
281 /* unlink() all the index files. */
0b3d90514e85 Added mail_index_unlink().
Timo Sirainen <tss@iki.fi>
parents: 9100
diff changeset
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
7bdc9d0bc9e6 Comment update.
Timo Sirainen <tss@iki.fi>
parents: 7913
diff changeset
345 /* Returns a view containing the mailbox state after changes in transaction
7bdc9d0bc9e6 Comment update.
Timo Sirainen <tss@iki.fi>
parents: 7913
diff changeset
346 are applied. The view can still be used after transaction has been
7bdc9d0bc9e6 Comment update.
Timo Sirainen <tss@iki.fi>
parents: 7913
diff changeset
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
268a4096e8be cleanup
Timo Sirainen <tss@iki.fi>
parents: 1944
diff changeset
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
7bbc5c50c309 lib-index: Comment update
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
495 /* Assign UIDs for mails with uid=0 or uid<first_uid. All the assigned UIDs
7bbc5c50c309 lib-index: Comment update
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
496 are higher than the highest unassigned UID (i.e. it doesn't try to fill UID
7bbc5c50c309 lib-index: Comment update
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
497 gaps). Assumes that mailbox is locked in a way that UIDs can be safely
7bbc5c50c309 lib-index: Comment update
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
498 assigned. Returns UIDs for all asigned messages, in their sequence order
7bbc5c50c309 lib-index: Comment update
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
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
66c44404f9a1 Keyword fixes.
Timo Sirainen <tss@iki.fi>
parents: 3016
diff changeset
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
90196328bcce Added mail_index_ext_lookup()
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
611 /* Returns TRUE and sets ext_id_r if extension with given name is registered. */
90196328bcce Added mail_index_ext_lookup()
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
612 bool mail_index_ext_lookup(struct mail_index *index, const char *name,
90196328bcce Added mail_index_ext_lookup()
Timo Sirainen <tss@iki.fi>
parents: 6677
diff changeset
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