[dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-sync.c,
1.52, 1.53
cras at dovecot.org
cras at dovecot.org
Sat Apr 23 18:18:24 EEST 2005
- Previous message: [dovecot-cvs] dovecot/src/lib-index
mail-index-transaction-private.h, 1.24,
1.25 mail-index-transaction.c, 1.59, 1.60 mail-index.h, 1.148,
1.149 mail-transaction-log-append.c, 1.9, 1.10
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-save.c, 1.81,
1.82 mbox-sync-private.h, 1.50, 1.51 mbox-sync.c, 1.152, 1.153
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/lib-storage/index/maildir
In directory talvi:/tmp/cvs-serv28538/lib-storage/index/maildir
Modified Files:
maildir-sync.c
Log Message:
If UIDVALIDITY changes, don't invalidate the whole index. Just expunge all
existing messages and update uidvalidity/nextuid fields. Now we don't have
to re-login when this happens.
Index: maildir-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/maildir/maildir-sync.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- maildir-sync.c 8 Apr 2005 14:32:51 -0000 1.52
+++ maildir-sync.c 23 Apr 2005 15:18:22 -0000 1.53
@@ -603,6 +603,7 @@
struct maildir_uidlist_iter_ctx *iter;
struct mail_index_transaction *trans;
const struct mail_index_header *hdr;
+ struct mail_index_header tmp_hdr;
const struct mail_index_record *rec;
pool_t keyword_pool;
uint32_t seq, uid;
@@ -613,22 +614,33 @@
uint32_t uid_validity, next_uid;
int ret;
+ trans = mail_index_transaction_begin(view, FALSE, TRUE);
+ sync_ctx->trans = trans;
+
hdr = mail_index_get_header(view);
uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
if (uid_validity != hdr->uid_validity &&
uid_validity != 0 && hdr->uid_validity != 0) {
/* uidvalidity changed and mailbox isn't being initialized,
- index must be rebuilt */
+ reset mailbox so we can add all messages as new */
mail_storage_set_critical(STORAGE(mbox->storage),
"Maildir %s sync: UIDVALIDITY changed (%u -> %u)",
mbox->path, hdr->uid_validity, uid_validity);
- mail_index_mark_corrupted(mbox->ibox.index);
- maildir_sync_index_abort(sync_ctx);
- return -1;
- }
- trans = mail_index_transaction_begin(view, FALSE, TRUE);
- sync_ctx->trans = trans;
+ for (seq = 1; seq < hdr->messages_count; seq++)
+ mail_index_expunge(trans, seq);
+
+ /* Reset uidvalidity and next_uid. */
+ memcpy(&tmp_hdr, hdr, sizeof(tmp_hdr));
+ tmp_hdr.uid_validity = 0;
+ tmp_hdr.next_uid = 0;
+
+ /* next_uid must be reset before message syncing begins,
+ or we get errors about UIDs larger than next_uid. */
+ mail_index_update_header(trans,
+ offsetof(struct mail_index_header, next_uid),
+ &hdr->next_uid, sizeof(hdr->next_uid), TRUE);
+ }
keyword_pool = pool_alloconly_create("maildir keywords", 128);
@@ -801,7 +813,7 @@
mail_index_update_header(trans,
offsetof(struct mail_index_header, sync_stamp),
- &sync_stamp, sizeof(sync_stamp));
+ &sync_stamp, sizeof(sync_stamp), TRUE);
}
if (hdr->uid_validity == 0) {
@@ -822,14 +834,14 @@
if (uid_validity != hdr->uid_validity && uid_validity != 0) {
mail_index_update_header(trans,
offsetof(struct mail_index_header, uid_validity),
- &uid_validity, sizeof(uid_validity));
+ &uid_validity, sizeof(uid_validity), TRUE);
}
next_uid = maildir_uidlist_get_next_uid(mbox->uidlist);
if (next_uid != 0 && hdr->next_uid != next_uid) {
mail_index_update_header(trans,
offsetof(struct mail_index_header, next_uid),
- &next_uid, sizeof(next_uid));
+ &next_uid, sizeof(next_uid), FALSE);
}
if (ret < 0) {
- Previous message: [dovecot-cvs] dovecot/src/lib-index
mail-index-transaction-private.h, 1.24,
1.25 mail-index-transaction.c, 1.59, 1.60 mail-index.h, 1.148,
1.149 mail-transaction-log-append.c, 1.9, 1.10
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-save.c, 1.81,
1.82 mbox-sync-private.h, 1.50, 1.51 mbox-sync.c, 1.152, 1.153
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list