Mercurial > dovecot > core-2.2
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 |
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 | 6 #define MAIL_TRANSACTION_LOG_SUFFIX ".log" |
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 | 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 | 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 | 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 | 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 | 214 /* Notify of indexid change */ |
215 void mail_transaction_log_indexid_changed(struct mail_transaction_log *log); | |
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 |