[dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-file.c, 1.10, 1.11 mbox-mail.c, 1.26, 1.27 mbox-sync-private.h, 1.52, 1.53 mbox-sync.c, 1.156, 1.157

cras at dovecot.org cras at dovecot.org
Tue Apr 26 17:52:04 EEST 2005


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

Modified Files:
	mbox-file.c mbox-mail.c mbox-sync-private.h mbox-sync.c 
Log Message:
If we see mbox offsets break, don't invalidate whole index but rather force
resyncing.



Index: mbox-file.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-file.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- mbox-file.c	8 Apr 2005 14:32:52 -0000	1.10
+++ mbox-file.c	26 Apr 2005 14:52:02 -0000	1.11
@@ -137,8 +137,7 @@
 		mail_storage_set_critical(STORAGE(mbox->storage),
 			"Cached message offset lost for seq %u in mbox file %s",
 			seq, mbox->path);
-		mail_index_mark_corrupted(mbox->ibox.index);
-		return -1;
+		return 0;
 	}
 
 	offset = *((const uint64_t *)data);
@@ -155,8 +154,7 @@
 		mail_storage_set_critical(STORAGE(mbox->storage),
 			"Cached message offset %s is invalid for mbox file %s",
 			dec2str(offset), mbox->path);
-		mail_index_mark_corrupted(mbox->ibox.index);
-		return -1;
+		return 0;
 	}
 
 	if (mbox->mbox_sync_dirty) {

Index: mbox-mail.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-mail.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- mbox-mail.c	8 Apr 2005 13:13:48 -0000	1.26
+++ mbox-mail.c	26 Apr 2005 14:52:02 -0000	1.27
@@ -65,7 +65,7 @@
 			i_assert(mbox->mbox_lock_type == F_UNLCK);
 		}
 
-		sync_flags |= MBOX_SYNC_UNDIRTY;
+		sync_flags |= MBOX_SYNC_UNDIRTY | MBOX_SYNC_FORCE_SYNC;
 		goto __again;
 	}
 

Index: mbox-sync-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync-private.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- mbox-sync-private.h	26 Apr 2005 14:07:31 -0000	1.52
+++ mbox-sync-private.h	26 Apr 2005 14:52:02 -0000	1.53
@@ -9,7 +9,8 @@
 	MBOX_SYNC_HEADER	= 0x02,
 	MBOX_SYNC_LOCK_READING	= 0x04,
 	MBOX_SYNC_UNDIRTY	= 0x08,
-	MBOX_SYNC_REWRITE	= 0x10
+	MBOX_SYNC_REWRITE	= 0x10,
+	MBOX_SYNC_FORCE_SYNC	= 0x20
 };
 
 struct mbox_flag_type {

Index: mbox-sync.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync.c,v
retrieving revision 1.156
retrieving revision 1.157
diff -u -d -r1.156 -r1.157
--- mbox-sync.c	26 Apr 2005 14:45:46 -0000	1.156
+++ mbox-sync.c	26 Apr 2005 14:52:02 -0000	1.157
@@ -1329,8 +1329,12 @@
 		return -1;
 	}
 
-	if ((uint32_t)st->st_mtime == sync_ctx->hdr->sync_stamp &&
-	    (uint64_t)st->st_size == sync_ctx->hdr->sync_size) {
+	if ((flags & MBOX_SYNC_FORCE_SYNC) != 0) {
+		/* forcing a full sync. assume file has changed. */
+		partial = FALSE;
+		sync_ctx->mbox->mbox_sync_dirty = TRUE;
+	} else if ((uint32_t)st->st_mtime == sync_ctx->hdr->sync_stamp &&
+		   (uint64_t)st->st_size == sync_ctx->hdr->sync_size) {
 		/* file is fully synced */
 		partial = TRUE;
 		sync_ctx->mbox->mbox_sync_dirty = FALSE;
@@ -1443,7 +1447,8 @@
 			return -1;
 	}
 
-	if ((flags & MBOX_SYNC_HEADER) != 0)
+	if ((flags & MBOX_SYNC_HEADER) != 0 ||
+	    (flags & MBOX_SYNC_FORCE_SYNC) != 0)
 		changed = 1;
 	else {
 		int leave_dirty = (flags & MBOX_SYNC_UNDIRTY) == 0;



More information about the dovecot-cvs mailing list