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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }