Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-storage/index/raw/raw-sync.c @ 7086:7ed926ed7aa4 HEAD
Updated copyright notices to include year 2008.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 01 Jan 2008 22:05:21 +0200 |
parents | 9d8c00d4c467 |
children | b9faf4db2a9f |
rev | line source |
---|---|
7086
7ed926ed7aa4
Updated copyright notices to include year 2008.
Timo Sirainen <tss@iki.fi>
parents:
6809
diff
changeset
|
1 /* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */ |
6748
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "ioloop.h" |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "raw-storage.h" |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "raw-sync.h" |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 static int raw_sync(struct raw_mailbox *mbox) |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 { |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 struct mail_index_sync_ctx *index_sync_ctx; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 struct mail_index_view *sync_view; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 struct mail_index_transaction *trans; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 uint32_t seq, uid_validity = ioloop_time; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 enum mail_index_sync_flags sync_flags; |
6809
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
15 int ret; |
6748
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 i_assert(!mbox->synced); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
6809
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
19 sync_flags = MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY | |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
20 MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES; |
6748
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 if (!mbox->ibox.keep_recent) |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 sync_flags |= MAIL_INDEX_SYNC_FLAG_DROP_RECENT; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
6809
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
24 ret = mail_index_sync_begin(mbox->ibox.index, &index_sync_ctx, |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
25 &sync_view, &trans, sync_flags); |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
26 if (ret <= 0) { |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
27 if (ret < 0) |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
28 mail_storage_set_index_error(&mbox->ibox); |
9d8c00d4c467
Added MAIL_INDEX_SYNC_FLAG_REQUIRE_CHANGES flag and changed
Timo Sirainen <tss@iki.fi>
parents:
6748
diff
changeset
|
29 return ret; |
6748
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 } |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 /* set our uidvalidity */ |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 mail_index_update_header(trans, |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 offsetof(struct mail_index_header, uid_validity), |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 &uid_validity, sizeof(uid_validity), TRUE); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 /* add our one and only message */ |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 mail_index_append(trans, 1, &seq); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 index_mailbox_set_recent_uid(&mbox->ibox, 1); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 if (mail_index_sync_commit(&index_sync_ctx) < 0) { |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 mail_storage_set_index_error(&mbox->ibox); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 return -1; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 } |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 mbox->synced = TRUE; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 return 0; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 } |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 struct mailbox_sync_context * |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 raw_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags) |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 { |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 struct raw_mailbox *mbox = (struct raw_mailbox *)box; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 int ret = 0; |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 if (!box->opened) |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 index_storage_mailbox_open(&mbox->ibox); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 if (!mbox->synced) |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 ret = raw_sync(mbox); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 return index_mailbox_sync_init(box, flags, ret < 0); |
d712370dfd14
Added raw storage for opening single-mail files/streams as mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 } |