annotate src/lib-index/mail-transaction-log.h @ 23017:c1d36f2575c7 default tip

lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author Timo Sirainen <timo.sirainen@open-xchange.com>
date Thu, 29 Aug 2019 09:55:25 +0300
parents 5e665ab8487c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6410
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5849
diff changeset
1 #ifndef MAIL_TRANSACTION_LOG_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5849
diff changeset
2 #define MAIL_TRANSACTION_LOG_H
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
9624
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
4 #include "mail-index.h"
7812
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
5
9311
0b3d90514e85 Added mail_index_unlink().
Timo Sirainen <tss@iki.fi>
parents: 9258
diff changeset
6 #define MAIL_TRANSACTION_LOG_SUFFIX ".log"
0b3d90514e85 Added mail_index_unlink().
Timo Sirainen <tss@iki.fi>
parents: 9258
diff changeset
7
3169
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
8 #define MAIL_TRANSACTION_LOG_MAJOR_VERSION 1
21876
ccbdafa83dbc lib-index: Don't increase modseq for backend/dirty flag changes
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21875
diff changeset
9 #define MAIL_TRANSACTION_LOG_MINOR_VERSION 3
3169
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
10 #define MAIL_TRANSACTION_LOG_HEADER_MIN_SIZE 24
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
11
21875
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
12 #define MAIL_TRANSACTION_LOG_VERSION_FULL(major, minor) \
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
13 ((major) << 8 | (minor))
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
14 #define MAIL_TRANSACTION_LOG_VERSION_HAVE(version, wanted_feature) \
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
15 ((version) >= MAIL_TRANSACTION_LOG_VERSION_##wanted_feature)
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
16 #define MAIL_TRANSACTION_LOG_HDR_VERSION(hdr) \
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
17 MAIL_TRANSACTION_LOG_VERSION_FULL((hdr)->major_version, (hdr)->minor_version)
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
18
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
19 #define MAIL_TRANSACTION_LOG_VERSION_COMPAT_FLAGS \
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
20 MAIL_TRANSACTION_LOG_VERSION_FULL(1, 2)
21876
ccbdafa83dbc lib-index: Don't increase modseq for backend/dirty flag changes
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21875
diff changeset
21 #define MAIL_TRANSACTION_LOG_VERSION_HIDE_INTERNAL_MODSEQS \
ccbdafa83dbc lib-index: Don't increase modseq for backend/dirty flag changes
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21875
diff changeset
22 MAIL_TRANSACTION_LOG_VERSION_FULL(1, 3)
21875
7c51ff56653a lib-index: Add macros to check if transaction log file version is new enough.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19799
diff changeset
23
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 struct mail_transaction_log_header {
3169
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
25 uint8_t major_version;
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
26 uint8_t minor_version;
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
27 uint16_t hdr_size;
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
28
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 uint32_t indexid;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 uint32_t file_seq;
1940
Timo Sirainen <tss@iki.fi>
parents: 1935
diff changeset
31 uint32_t prev_file_seq;
1935
ec4d5ff99f6e Don't modify index file when creating new transaction log.
Timo Sirainen <tss@iki.fi>
parents: 1915
diff changeset
32 uint32_t prev_file_offset;
3169
ec17099a6490 Added versioning to transaction log header. Added create_stamp to its
Timo Sirainen <tss@iki.fi>
parents: 3138
diff changeset
33 uint32_t create_stamp;
8266
47edfe6ad295 Comment update.
Timo Sirainen <tss@iki.fi>
parents: 8135
diff changeset
34 uint64_t initial_modseq; /* v1.1+ (note: log's major/minor version) */
8129
612eb505775f Write CPU endianess to transaction log header and check it's correct when reading.
Timo Sirainen <tss@iki.fi>
parents: 7895
diff changeset
35
612eb505775f Write CPU endianess to transaction log header and check it's correct when reading.
Timo Sirainen <tss@iki.fi>
parents: 7895
diff changeset
36 uint8_t compat_flags; /* enum mail_index_header_compat_flags, v1.2+ */
612eb505775f Write CPU endianess to transaction log header and check it's correct when reading.
Timo Sirainen <tss@iki.fi>
parents: 7895
diff changeset
37 uint8_t unused[3];
8135
0be9c476acdd Added padding to struct mail_transaction_log_header so it's 64bit aligned.
Timo Sirainen <tss@iki.fi>
parents: 8130
diff changeset
38 uint32_t unused2; /* so that this struct is 64bit aligned */
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 enum mail_transaction_type {
2115
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
42 MAIL_TRANSACTION_EXPUNGE = 0x00000001,
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
43 MAIL_TRANSACTION_APPEND = 0x00000002,
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
44 MAIL_TRANSACTION_FLAG_UPDATE = 0x00000004,
2201
7bdef5ea4591 Several fixes and cleanups to cache file code, still badly broken
Timo Sirainen <tss@iki.fi>
parents: 2115
diff changeset
45 MAIL_TRANSACTION_HEADER_UPDATE = 0x00000020,
2671
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
46 MAIL_TRANSACTION_EXT_INTRO = 0x00000040,
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
47 MAIL_TRANSACTION_EXT_RESET = 0x00000080,
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
48 MAIL_TRANSACTION_EXT_HDR_UPDATE = 0x00000100,
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
49 MAIL_TRANSACTION_EXT_REC_UPDATE = 0x00000200,
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
50 MAIL_TRANSACTION_KEYWORD_UPDATE = 0x00000400,
3138
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
51 MAIL_TRANSACTION_KEYWORD_RESET = 0x00000800,
8929
9c50e7303513 Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents: 8266
diff changeset
52 MAIL_TRANSACTION_EXT_ATOMIC_INC = 0x00001000,
9624
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
53 MAIL_TRANSACTION_EXPUNGE_GUID = 0x00002000,
9691
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
54 MAIL_TRANSACTION_MODSEQ_UPDATE = 0x00008000,
10380
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
55 MAIL_TRANSACTION_EXT_HDR_UPDATE32 = 0x00010000,
10655
fc0ac73f0b36 Added support for marking mailbox index deleted. Don't allow any changes after that.
Timo Sirainen <tss@iki.fi>
parents: 10382
diff changeset
56 MAIL_TRANSACTION_INDEX_DELETED = 0x00020000,
10674
22354f505277 lib-index: Added support for undeleting a deleted index.
Timo Sirainen <tss@iki.fi>
parents: 10655
diff changeset
57 MAIL_TRANSACTION_INDEX_UNDELETED = 0x00040000,
12493
b7d13ee51aa4 lib-index: Added "transaction boundary" record for future compatibility.
Timo Sirainen <tss@iki.fi>
parents: 11665
diff changeset
58 MAIL_TRANSACTION_BOUNDARY = 0x00080000,
16191
b2fad9b21e60 lib-index: Backported MAIL_TRANSACTION_ATTRIBUTE_UPDATE from v2.2
Timo Sirainen <tss@iki.fi>
parents: 13750
diff changeset
59 MAIL_TRANSACTION_ATTRIBUTE_UPDATE = 0x00100000,
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60
16191
b2fad9b21e60 lib-index: Backported MAIL_TRANSACTION_ATTRIBUTE_UPDATE from v2.2
Timo Sirainen <tss@iki.fi>
parents: 13750
diff changeset
61 MAIL_TRANSACTION_TYPE_MASK = 0x0fffffff,
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
5749
420a386fa27a int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
63 #define MAIL_TRANSACTION_EXT_MASK \
420a386fa27a int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
64 (MAIL_TRANSACTION_EXT_INTRO | MAIL_TRANSACTION_EXT_RESET | \
10381
b12f7da461e3 lib-index: Updated MAIL_TRANSACTION_EXT_MASK to include thew new _EXT_HDR_UPDATE32.
Timo Sirainen <tss@iki.fi>
parents: 10380
diff changeset
65 MAIL_TRANSACTION_EXT_HDR_UPDATE | MAIL_TRANSACTION_EXT_HDR_UPDATE32 | \
b12f7da461e3 lib-index: Updated MAIL_TRANSACTION_EXT_MASK to include thew new _EXT_HDR_UPDATE32.
Timo Sirainen <tss@iki.fi>
parents: 10380
diff changeset
66 MAIL_TRANSACTION_EXT_REC_UPDATE | MAIL_TRANSACTION_EXT_ATOMIC_INC)
5749
420a386fa27a int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
67
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 /* since we'll expunge mails based on data read from transaction log,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 try to avoid the possibility of corrupted transaction log expunging
9624
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
70 messages. this value is ORed to the actual MAIL_TRANSACTION_EXPUNGE*
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 flag. if it's not present, assume corrupted log. */
2115
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
72 MAIL_TRANSACTION_EXPUNGE_PROT = 0x0000cd90,
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73
14581
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
74 /* Mailbox storage backend synchronization noticed this change. */
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
75 MAIL_TRANSACTION_EXTERNAL = 0x10000000,
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
76 /* This change syncs the state with another mailbox (dsync),
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
77 i.e. the change isn't something that a user requested locally. */
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
78 MAIL_TRANSACTION_SYNC = 0x20000000
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 struct mail_transaction_header {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 uint32_t size;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 uint32_t type; /* enum mail_transaction_type */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
9691
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
86 struct mail_transaction_modseq_update {
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
87 uint32_t uid;
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
88 /* don't use uint64_t here. it adds extra 32 bits of paddiong and also
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
89 causes problems with CPUs that require alignment */
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
90 uint32_t modseq_low32;
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
91 uint32_t modseq_high32;
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
92 };
b09d9350a2d9 Added ability to specify message's minimum modseq value.
Timo Sirainen <tss@iki.fi>
parents: 9681
diff changeset
93
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 struct mail_transaction_expunge {
2033
4f6b1118a53d Transaction log contains only UIDs now, no more sequences which just mess up
Timo Sirainen <tss@iki.fi>
parents: 2009
diff changeset
95 uint32_t uid1, uid2;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 };
9624
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
97 struct mail_transaction_expunge_guid {
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
98 uint32_t uid;
13287
957060ca5b69 Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents: 12762
diff changeset
99 guid_128_t guid_128;
9624
2558ba736207 Keep track of expunged messages' GUIDs and expose them via mailbox_get_expunges().
Timo Sirainen <tss@iki.fi>
parents: 9311
diff changeset
100 };
1915
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 struct mail_transaction_flag_update {
2033
4f6b1118a53d Transaction log contains only UIDs now, no more sequences which just mess up
Timo Sirainen <tss@iki.fi>
parents: 2009
diff changeset
103 uint32_t uid1, uid2;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 uint8_t add_flags;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 uint8_t remove_flags;
14599
dbd42f7198eb shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents: 14581
diff changeset
106 uint8_t modseq_inc_flag;
dbd42f7198eb shared mailboxes: Per-user flags can now be stored in private index files.
Timo Sirainen <tss@iki.fi>
parents: 14581
diff changeset
107 uint8_t padding;
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
108 };
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
109
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
110 struct mail_transaction_keyword_update {
3138
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
111 uint8_t modify_type; /* enum modify_type : MODIFY_ADD / MODIFY_REMOVE */
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
112 uint8_t padding;
3138
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
113 uint16_t name_size;
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
114 /* unsigned char name[];
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
115 array of { uint32_t uid1, uid2; }
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
116 */
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 };
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118
3138
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
119 struct mail_transaction_keyword_reset {
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
120 uint32_t uid1, uid2;
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
121 };
fbe844061fe2 Internal changes in how keywords are handled. struct mail_keywords isn't
Timo Sirainen <tss@iki.fi>
parents: 3111
diff changeset
122
2050
ee1095ccfd23 Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents: 2033
diff changeset
123 struct mail_transaction_header_update {
ee1095ccfd23 Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents: 2033
diff changeset
124 uint16_t offset;
ee1095ccfd23 Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents: 2033
diff changeset
125 uint16_t size;
2410
c7c886199f28 Small cleanups.
Timo Sirainen <tss@iki.fi>
parents: 2407
diff changeset
126 /* unsigned char data[]; */
2050
ee1095ccfd23 Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents: 2033
diff changeset
127 };
ee1095ccfd23 Index header changes now go through transaction log. Removed the kludgy
Timo Sirainen <tss@iki.fi>
parents: 2033
diff changeset
128
7895
5bedea448cf9 Mail index extension introductions now add a "no resizes" flag to the
Timo Sirainen <tss@iki.fi>
parents: 7812
diff changeset
129 enum {
8130
b97c3be33b04 Replaced "no extension resizing" flag with "no extension shrinking".
Timo Sirainen <tss@iki.fi>
parents: 8129
diff changeset
130 /* Don't shrink hdr_size, record_size or record_align but grow them
b97c3be33b04 Replaced "no extension resizing" flag with "no extension shrinking".
Timo Sirainen <tss@iki.fi>
parents: 8129
diff changeset
131 if necessary. */
b97c3be33b04 Replaced "no extension resizing" flag with "no extension shrinking".
Timo Sirainen <tss@iki.fi>
parents: 8129
diff changeset
132 MAIL_TRANSACTION_EXT_INTRO_FLAG_NO_SHRINK = 0x01
7895
5bedea448cf9 Mail index extension introductions now add a "no resizes" flag to the
Timo Sirainen <tss@iki.fi>
parents: 7812
diff changeset
133 };
5bedea448cf9 Mail index extension introductions now add a "no resizes" flag to the
Timo Sirainen <tss@iki.fi>
parents: 7812
diff changeset
134
2671
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
135 struct mail_transaction_ext_intro {
2762
a1c7e92c1839 New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents: 2683
diff changeset
136 /* old extension: set ext_id. don't set name.
a1c7e92c1839 New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents: 2683
diff changeset
137 new extension: ext_id = (uint32_t)-1. give name. */
a1c7e92c1839 New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents: 2683
diff changeset
138 uint32_t ext_id;
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2762
diff changeset
139 uint32_t reset_id;
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
140 uint32_t hdr_size;
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
141 uint16_t record_size;
2683
d41c42a7bf1e Index extensions can now specify record alignment, and it's possible to
Timo Sirainen <tss@iki.fi>
parents: 2671
diff changeset
142 uint16_t record_align;
7895
5bedea448cf9 Mail index extension introductions now add a "no resizes" flag to the
Timo Sirainen <tss@iki.fi>
parents: 7812
diff changeset
143 uint16_t flags;
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
144 uint16_t name_size;
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
145 /* unsigned char name[]; */
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
146 };
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
147
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2762
diff changeset
148 struct mail_transaction_ext_reset {
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2762
diff changeset
149 uint32_t new_reset_id;
7563
6de1aed24ce5 Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents: 6458
diff changeset
150 uint8_t preserve_data;
6de1aed24ce5 Added mail_index_ext_reset_inc() to atomically increase extension's
Timo Sirainen <tss@iki.fi>
parents: 6458
diff changeset
151 uint8_t unused_padding[3];
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2762
diff changeset
152 };
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2762
diff changeset
153
2762
a1c7e92c1839 New way of handling extension introductions in transaction log.
Timo Sirainen <tss@iki.fi>
parents: 2683
diff changeset
154 /* these are set for the last ext_intro */
2671
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
155 struct mail_transaction_ext_hdr_update {
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
156 uint16_t offset;
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
157 uint16_t size;
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
158 /* unsigned char data[]; */
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
159 };
10380
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
160 /* this _update32 version should have been the only ext_hdr_update,
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
161 but since 16bit integers were originally used for now we'll just use this
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
162 only when actually needed to be backwards compatible. */
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
163 struct mail_transaction_ext_hdr_update32 {
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
164 uint32_t offset;
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
165 uint32_t size;
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
166 /* unsigned char data[]; */
8b3c802556a9 mail_index_update_header_ext(): Couldn't handle >=64k headers.
Timo Sirainen <tss@iki.fi>
parents: 9691
diff changeset
167 };
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2410
diff changeset
168
2671
3b70ddb51771 Renamed "extra record info" and variations of it to "extension" or "ext" in
Timo Sirainen <tss@iki.fi>
parents: 2563
diff changeset
169 struct mail_transaction_ext_rec_update {
2115
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
170 uint32_t uid;
2410
c7c886199f28 Small cleanups.
Timo Sirainen <tss@iki.fi>
parents: 2407
diff changeset
171 /* unsigned char data[]; */
2115
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
172 };
8929
9c50e7303513 Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents: 8266
diff changeset
173 struct mail_transaction_ext_atomic_inc {
9c50e7303513 Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents: 8266
diff changeset
174 uint32_t uid;
9c50e7303513 Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents: 8266
diff changeset
175 int32_t diff;
9c50e7303513 Added mail_index_atomic_inc_ext() for atomically incrementing numbers in extensions.
Timo Sirainen <tss@iki.fi>
parents: 8266
diff changeset
176 };
2115
f720b3f15333 Modifying extra_records should work now.
Timo Sirainen <tss@iki.fi>
parents: 2074
diff changeset
177
12493
b7d13ee51aa4 lib-index: Added "transaction boundary" record for future compatibility.
Timo Sirainen <tss@iki.fi>
parents: 11665
diff changeset
178 struct mail_transaction_boundary {
b7d13ee51aa4 lib-index: Added "transaction boundary" record for future compatibility.
Timo Sirainen <tss@iki.fi>
parents: 11665
diff changeset
179 uint32_t size;
b7d13ee51aa4 lib-index: Added "transaction boundary" record for future compatibility.
Timo Sirainen <tss@iki.fi>
parents: 11665
diff changeset
180 };
b7d13ee51aa4 lib-index: Added "transaction boundary" record for future compatibility.
Timo Sirainen <tss@iki.fi>
parents: 11665
diff changeset
181
9252
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
182 struct mail_transaction_log_append_ctx {
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
183 struct mail_transaction_log *log;
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
184 buffer_t *output;
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
185
14581
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
186 enum mail_transaction_type trans_flags;
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
187
9252
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
188 uint64_t new_highest_modseq;
15367
751181168b72 lib-index: Write to transaction log using O_APPEND flag.
Timo Sirainen <tss@iki.fi>
parents: 14884
diff changeset
189 unsigned int transaction_count;
751181168b72 lib-index: Write to transaction log using O_APPEND flag.
Timo Sirainen <tss@iki.fi>
parents: 14884
diff changeset
190
17609
16d4cf2c0d65 lib-index: Don't update log_file_tail_offset unnecessarily.
Timo Sirainen <tss@iki.fi>
parents: 16198
diff changeset
191 /* same as mail_index_transaction->sync_transaction */
16d4cf2c0d65 lib-index: Don't update log_file_tail_offset unnecessarily.
Timo Sirainen <tss@iki.fi>
parents: 16198
diff changeset
192 unsigned int index_sync_transaction:1;
16d4cf2c0d65 lib-index: Don't update log_file_tail_offset unnecessarily.
Timo Sirainen <tss@iki.fi>
parents: 16198
diff changeset
193 /* same as mail_index_transaction->tail_offset_changed */
16d4cf2c0d65 lib-index: Don't update log_file_tail_offset unnecessarily.
Timo Sirainen <tss@iki.fi>
parents: 16198
diff changeset
194 unsigned int tail_offset_changed:1;
9252
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
195 unsigned int sync_includes_this:1;
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
196 unsigned int want_fsync:1;
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
197 };
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
198
5747
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5728
diff changeset
199 #define LOG_IS_BEFORE(seq1, offset1, seq2, offset2) \
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5728
diff changeset
200 (((offset1) < (offset2) && (seq1) == (seq2)) || (seq1) < (seq2))
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5728
diff changeset
201
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202 struct mail_transaction_log *
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
203 mail_transaction_log_alloc(struct mail_index *index);
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
204 void mail_transaction_log_free(struct mail_transaction_log **log);
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
205
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
206 /* Open the transaction log. Returns 1 if ok, 0 if file doesn't exist or it's
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
207 is corrupted, -1 if there was some I/O error. */
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
208 int mail_transaction_log_open(struct mail_transaction_log *log);
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
209 /* Create, or recreate, the transaction log. Returns 0 if ok, -1 if error. */
7573
de08cc81da73 Fixes to handling races in initial index creation.
Timo Sirainen <tss@iki.fi>
parents: 7563
diff changeset
210 int mail_transaction_log_create(struct mail_transaction_log *log, bool reset);
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
211 /* Close all the open transactions log files. */
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
212 void mail_transaction_log_close(struct mail_transaction_log *log);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
213
5819
4ea31bf18a56 Handle indexid changes better.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
214 /* Notify of indexid change */
4ea31bf18a56 Handle indexid changes better.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
215 void mail_transaction_log_indexid_changed(struct mail_transaction_log *log);
4ea31bf18a56 Handle indexid changes better.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
216
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
217 /* Returns the file seq/offset where the mailbox is currently synced at.
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
218 Since the log is rotated only when mailbox is fully synced, the sequence
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
219 points always to the latest file. This function doesn't actually find the
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
220 latest sync position, so you'll need to use eg. log_view_set() before
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
221 calling this. */
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
222 void mail_transaction_log_get_mailbox_sync_pos(struct mail_transaction_log *log,
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
223 uint32_t *file_seq_r,
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
224 uoff_t *file_offset_r);
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
225 /* Set the current mailbox sync position. file_seq must always be the latest
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
226 log file's sequence. The offset written automatically to the log when
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
227 other transactions are being written. */
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
228 void mail_transaction_log_set_mailbox_sync_pos(struct mail_transaction_log *log,
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
229 uint32_t file_seq,
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
230 uoff_t file_offset);
3833
318c70c1d4ec Beginnings of fallbacking to in-memory indexes when write fails with "out of
Timo Sirainen <tss@iki.fi>
parents: 3832
diff changeset
231
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
232 struct mail_transaction_log_view *
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
233 mail_transaction_log_view_open(struct mail_transaction_log *log);
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
234 void mail_transaction_log_view_close(struct mail_transaction_log_view **view);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235
13750
fb0ffce5a0ba lib-index: Handle transaction log read errors separately from log corruption.
Timo Sirainen <tss@iki.fi>
parents: 13379
diff changeset
236 /* Set view boundaries. Returns -1 if error, 0 if files are lost or corrupted,
fb0ffce5a0ba lib-index: Handle transaction log read errors separately from log corruption.
Timo Sirainen <tss@iki.fi>
parents: 13379
diff changeset
237 1 if ok. reset_r=TRUE if the whole index should be reset before applying any
5849
a9df50952600 Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents: 5819
diff changeset
238 changes. */
a9df50952600 Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents: 5819
diff changeset
239 int mail_transaction_log_view_set(struct mail_transaction_log_view *view,
a9df50952600 Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents: 5819
diff changeset
240 uint32_t min_file_seq, uoff_t min_file_offset,
a9df50952600 Added support for resetting index.
Timo Sirainen <tss@iki.fi>
parents: 5819
diff changeset
241 uint32_t max_file_seq, uoff_t max_file_offset,
18398
8146fdc0de34 lib-index: Added reason_r parameter to mail_transaction_log_view_set()
Timo Sirainen <tss@iki.fi>
parents: 17927
diff changeset
242 bool *reset_r, const char **reason_r);
14579
fead3400c379 lib-index: Added mail_transaction_log_view_set_all()
Timo Sirainen <tss@iki.fi>
parents: 13750
diff changeset
243 /* Scan through all of the log files that we can find.
fead3400c379 lib-index: Added mail_transaction_log_view_set_all()
Timo Sirainen <tss@iki.fi>
parents: 13750
diff changeset
244 Returns -1 if error, 0 if ok. */
fead3400c379 lib-index: Added mail_transaction_log_view_set_all()
Timo Sirainen <tss@iki.fi>
parents: 13750
diff changeset
245 int mail_transaction_log_view_set_all(struct mail_transaction_log_view *view);
14884
7aece00b8538 lib-index: Support clearing the whole log view with mail_transaction_log_view_clear(0)
Timo Sirainen <tss@iki.fi>
parents: 14599
diff changeset
246 /* Clear the view. If oldest_file_seq > 0, keep it and newer log files
7aece00b8538 lib-index: Support clearing the whole log view with mail_transaction_log_view_clear(0)
Timo Sirainen <tss@iki.fi>
parents: 14599
diff changeset
247 referenced so we don't get desynced. */
6458
cca479cb3ef0 Keep transaction logs referenced while we know we need them. This fixes
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
248 void mail_transaction_log_view_clear(struct mail_transaction_log_view *view,
cca479cb3ef0 Keep transaction logs referenced while we know we need them. This fixes
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
249 uint32_t oldest_file_seq);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251 /* Read next transaction record from current position. The position is updated.
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
252 Returns -1 if error, 0 if we're at end of the view, 1 if ok. */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
253 int mail_transaction_log_view_next(struct mail_transaction_log_view *view,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254 const struct mail_transaction_header **hdr_r,
5728
7aab5d99fb45 Removed sync_mask parameter from mail_transaction_log_view_set(). The user
Timo Sirainen <tss@iki.fi>
parents: 5714
diff changeset
255 const void **data_r);
7812
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
256 /* Mark the current view's position to the record returned previously with
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
257 _log_view_next(). */
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
258 void mail_transaction_log_view_mark(struct mail_transaction_log_view *view);
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
259 /* Seek to previously marked position. */
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
260 void mail_transaction_log_view_rewind(struct mail_transaction_log_view *view);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
261
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
262 /* Returns the position of the record returned previously with
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263 mail_transaction_log_view_next() */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
264 void
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265 mail_transaction_log_view_get_prev_pos(struct mail_transaction_log_view *view,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
266 uint32_t *file_seq_r,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
267 uoff_t *file_offset_r);
7812
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
268 /* Return the modseq of the change returned previously with _view_next(). */
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
269 uint64_t
d10cb44ab446 Modseqs are no longer calculated from transaction log sequence + offset.
Timo Sirainen <tss@iki.fi>
parents: 7573
diff changeset
270 mail_transaction_log_view_get_prev_modseq(struct mail_transaction_log_view *view);
5656
1273ce0585b3 Added mail_transaction_log_view_is_last()
Timo Sirainen <tss@iki.fi>
parents: 5278
diff changeset
271 /* Returns TRUE if we're at the end of the view window. */
1273ce0585b3 Added mail_transaction_log_view_is_last()
Timo Sirainen <tss@iki.fi>
parents: 5278
diff changeset
272 bool mail_transaction_log_view_is_last(struct mail_transaction_log_view *view);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
273
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 /* Marks the log file in current position to be corrupted. */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
275 void
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
276 mail_transaction_log_view_set_corrupted(struct mail_transaction_log_view *view,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
277 const char *fmt, ...)
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
278 ATTR_FORMAT(2, 3);
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3833
diff changeset
279 bool
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
280 mail_transaction_log_view_is_corrupted(struct mail_transaction_log_view *view);
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
281
14581
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
282 int mail_transaction_log_append_begin(struct mail_index *index,
4b1309d171ff Added MAIL_INDEX_TRANSACTION_FLAG_SYNC
Timo Sirainen <tss@iki.fi>
parents: 14579
diff changeset
283 enum mail_transaction_type flags,
9252
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
284 struct mail_transaction_log_append_ctx **ctx_r);
9254
0e407ad46307 More cleanups to transaction log writing code.
Timo Sirainen <tss@iki.fi>
parents: 9252
diff changeset
285 void mail_transaction_log_append_add(struct mail_transaction_log_append_ctx *ctx,
0e407ad46307 More cleanups to transaction log writing code.
Timo Sirainen <tss@iki.fi>
parents: 9252
diff changeset
286 enum mail_transaction_type type,
9258
665ea7a8d26e Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents: 9254
diff changeset
287 const void *data, size_t size);
9252
937dca181d77 Moved transaction commiting code to mail-index-transaction-*.c
Timo Sirainen <tss@iki.fi>
parents: 9250
diff changeset
288 int mail_transaction_log_append_commit(struct mail_transaction_log_append_ctx **ctx);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
290 /* Lock transaction log for index synchronization. Log cannot be read or
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
291 written to while it's locked. Returns end offset. */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
292 int mail_transaction_log_sync_lock(struct mail_transaction_log *log,
19799
8dfbf0629359 lib-index: Small improvements to logging the reason for long transaction log lock waits
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 18398
diff changeset
293 const char *lock_reason,
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
294 uint32_t *file_seq_r, uoff_t *file_offset_r);
17927
fce66ec2ac1c lib-index: Include reason string in warnings about keeping transaction log locked for too long.
Timo Sirainen <tss@iki.fi>
parents: 17609
diff changeset
295 void mail_transaction_log_sync_unlock(struct mail_transaction_log *log,
fce66ec2ac1c lib-index: Include reason string in warnings about keeping transaction log locked for too long.
Timo Sirainen <tss@iki.fi>
parents: 17609
diff changeset
296 const char *lock_reason);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
297 /* Returns the current head. Works only when log is locked. */
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
298 void mail_transaction_log_get_head(struct mail_transaction_log *log,
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
299 uint32_t *file_seq_r, uoff_t *file_offset_r);
9635
c8be44ff1090 Added mail_transaction_log_get_tail().
Timo Sirainen <tss@iki.fi>
parents: 9624
diff changeset
300 /* Returns the current tail from which all files are open to head. */
c8be44ff1090 Added mail_transaction_log_get_tail().
Timo Sirainen <tss@iki.fi>
parents: 9624
diff changeset
301 void mail_transaction_log_get_tail(struct mail_transaction_log *log,
c8be44ff1090 Added mail_transaction_log_get_tail().
Timo Sirainen <tss@iki.fi>
parents: 9624
diff changeset
302 uint32_t *file_seq_r);
3832
76f4be7ae499 Handle missing/broken transaction logs better. Handle broken sync position
Timo Sirainen <tss@iki.fi>
parents: 3180
diff changeset
303 /* Returns TRUE if given seq/offset is current head log's rotate point. */
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3833
diff changeset
304 bool mail_transaction_log_is_head_prev(struct mail_transaction_log *log,
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3833
diff changeset
305 uint32_t file_seq, uoff_t file_offset);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
306
5714
dcf5dbb6a76a mail_transaction_log_move_to_memory() can't fail anymore. Moved the code to
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
307 /* Move currently opened log head file to memory (called by
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
308 mail_index_move_to_memory()) */
5714
dcf5dbb6a76a mail_transaction_log_move_to_memory() can't fail anymore. Moved the code to
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
309 void mail_transaction_log_move_to_memory(struct mail_transaction_log *log);
13379
7b240ecc37b5 lib-index: When marking index corrupted, delete also transaction log file.
Timo Sirainen <tss@iki.fi>
parents: 13287
diff changeset
310 /* Unlink transaction log files */
7b240ecc37b5 lib-index: When marking index corrupted, delete also transaction log file.
Timo Sirainen <tss@iki.fi>
parents: 13287
diff changeset
311 int mail_transaction_log_unlink(struct mail_transaction_log *log);
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5656
diff changeset
312
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
313 #endif