[dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-sync.c, 1.155, 1.156

cras at dovecot.org cras at dovecot.org
Tue Apr 26 17:45:48 EEST 2005


Update of /var/lib/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv19094/mbox

Modified Files:
	mbox-sync.c 
Log Message:
Don't try to handle UIDVALIDITY changes nicely after all. It causes
problems when within same transaction there are two different set of UIDs
being used.



Index: mbox-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -d -r1.155 -r1.156
--- mbox-sync.c	26 Apr 2005 09:42:59 -0000	1.155
+++ mbox-sync.c	26 Apr 2005 14:45:46 -0000	1.156
@@ -927,7 +927,7 @@
 	const struct mail_index_record *rec;
 	uint32_t uid, messages_count;
 	uoff_t offset;
-	int ret, expunged, skipped_mails, uidvalidity_changed;
+	int ret, expunged, skipped_mails;
 
 	messages_count =
 		mail_index_view_get_messages_count(sync_ctx->sync_view);
@@ -942,13 +942,10 @@
 	while ((ret = mbox_sync_read_next_mail(sync_ctx, mail_ctx)) > 0) {
 		uid = mail_ctx->mail.uid;
 
-		uidvalidity_changed = mail_ctx->seq == 1 &&
-			sync_ctx->base_uid_validity != 0 &&
-			sync_ctx->hdr->uid_validity != 0 &&
-			sync_ctx->base_uid_validity !=
-			sync_ctx->hdr->uid_validity;
-
-		if (uidvalidity_changed) {
+		if (mail_ctx->seq == 1 && sync_ctx->base_uid_validity != 0 &&
+		    sync_ctx->hdr->uid_validity != 0 &&
+		    sync_ctx->base_uid_validity !=
+		    sync_ctx->hdr->uid_validity) {
 			mail_storage_set_critical(
 				STORAGE(sync_ctx->mbox->storage),
 				"UIDVALIDITY changed (%u -> %u) "
@@ -957,20 +954,8 @@
 				sync_ctx->base_uid_validity,
 				sync_ctx->mbox->path);
 
-			/* we need to recreate all messages in index */
-			while (sync_ctx->idx_seq <= messages_count) {
-				mail_index_expunge(sync_ctx->t,
-						   sync_ctx->idx_seq++);
-			}
-
-			/* next_uid must be reset before message syncing
-			   begins, or we get errors about UIDs larger than
-			   next_uid. */
-			sync_ctx->idx_next_uid = 0;
-			mail_index_update_header(sync_ctx->t,
-				offsetof(struct mail_index_header, next_uid),
-				&sync_ctx->idx_next_uid,
-				sizeof(sync_ctx->idx_next_uid), TRUE);
+			mail_index_mark_corrupted(sync_ctx->mbox->ibox.index);
+			return -1;
 		}
 
 		if (mail_ctx->uid_broken && partial) {
@@ -983,7 +968,7 @@
 			uid = 0;
 
 		rec = NULL; ret = 1;
-		if (uid != 0 && !uidvalidity_changed) {
+		if (uid != 0) {
 			ret = mbox_sync_read_index_rec(sync_ctx, uid, &rec);
 			if (ret < 0)
 				return -1;
@@ -992,7 +977,7 @@
 		if (ret == 0) {
 			/* UID found but it's broken */
 			uid = 0;
-		} else if (uid == 0 && !uidvalidity_changed &&
+		} else if (uid == 0 &&
 			   !mail_ctx->pseudo &&
 			   (sync_ctx->delay_writes ||
 			    sync_ctx->idx_seq <= messages_count)) {
@@ -1015,7 +1000,7 @@
 			partial = FALSE;
 		}
 
-		if (!mail_ctx->pseudo && !uidvalidity_changed) {
+		if (!mail_ctx->pseudo) {
 			/* get all sync records related to this message */
 			if (mbox_sync_read_index_syncs(sync_ctx, uid,
 						       &expunged) < 0)



More information about the dovecot-cvs mailing list