dovecot-2.1: dbox: If index was fscked, rebuild indexes to make ...

dovecot at dovecot.org dovecot at dovecot.org
Wed Dec 7 01:48:14 EET 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/1e118913348b
changeset: 13807:1e118913348b
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Dec 07 01:48:03 2011 +0200
description:
dbox: If index was fscked, rebuild indexes to make sure no mails got lost.

diffstat:

 src/lib-storage/index/dbox-multi/mdbox-map.c   |  4 ++++
 src/lib-storage/index/dbox-multi/mdbox-sync.c  |  4 ++++
 src/lib-storage/index/dbox-single/sdbox-sync.c |  7 ++++++-
 3 files changed, 14 insertions(+), 1 deletions(-)

diffs (66 lines):

diff -r 8535def4ad01 -r 1e118913348b src/lib-storage/index/dbox-multi/mdbox-map.c
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c	Wed Dec 07 01:46:42 2011 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.c	Wed Dec 07 01:48:03 2011 +0200
@@ -222,6 +222,8 @@
 
 	ctx = mail_index_view_sync_begin(map->view,
 				MAIL_INDEX_VIEW_SYNC_FLAG_FIX_INCONSISTENT);
+	if (mail_index_reset_fscked(map->view->index))
+		mdbox_storage_set_corrupted(map->storage);
 	if (mail_index_view_sync_commit(&ctx, &delayed_expunges) < 0) {
 		mail_storage_set_internal_error(MAP_STORAGE(map));
 		mail_index_reset_error(map->index);
@@ -473,6 +475,8 @@
 	   log's head_offset = tail_offset */
 	ret = mail_index_sync_begin(atomic->map->index, &atomic->sync_ctx,
 				    &atomic->sync_view, &atomic->sync_trans, 0);
+	if (mail_index_reset_fscked(atomic->map->index))
+		mdbox_storage_set_corrupted(atomic->map->storage);
 	if (ret <= 0) {
 		i_assert(ret != 0);
 		mail_storage_set_internal_error(MAP_STORAGE(atomic->map));
diff -r 8535def4ad01 -r 1e118913348b src/lib-storage/index/dbox-multi/mdbox-sync.c
--- a/src/lib-storage/index/dbox-multi/mdbox-sync.c	Wed Dec 07 01:46:42 2011 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c	Wed Dec 07 01:48:03 2011 +0200
@@ -190,6 +190,8 @@
 
 	ret = mail_index_sync_begin(mbox->box.index, &ctx->index_sync_ctx,
 				    &ctx->sync_view, &ctx->trans, sync_flags);
+	if (mail_index_reset_fscked(mbox->box.index))
+		mdbox_storage_set_corrupted(mbox->storage);
 	if (ret < 0) {
 		mail_storage_set_index_error(&mbox->box);
 		return -1;
@@ -328,6 +330,8 @@
 			ret = -1;
 	}
 
+	if (mail_index_reset_fscked(box->index))
+		mdbox_storage_set_corrupted(mbox->storage);
 	if (ret == 0 && (index_mailbox_want_full_sync(&mbox->box, flags) ||
 			 mbox->storage->corrupted)) {
 		if ((flags & MAILBOX_SYNC_FLAG_FORCE_RESYNC) != 0)
diff -r 8535def4ad01 -r 1e118913348b src/lib-storage/index/dbox-single/sdbox-sync.c
--- a/src/lib-storage/index/dbox-single/sdbox-sync.c	Wed Dec 07 01:46:42 2011 +0200
+++ b/src/lib-storage/index/dbox-single/sdbox-sync.c	Wed Dec 07 01:48:03 2011 +0200
@@ -191,6 +191,8 @@
 					    &ctx->index_sync_ctx,
 					    &ctx->sync_view, &ctx->trans,
 					    sync_flags);
+		if (mail_index_reset_fscked(mbox->box.index))
+			sdbox_set_mailbox_corrupted(&mbox->box);
 		if (ret <= 0) {
 			if (ret < 0)
 				mail_storage_set_index_error(&mbox->box);
@@ -283,7 +285,10 @@
 			ret = -1;
 	}
 
-	if (ret == 0 && index_mailbox_want_full_sync(&mbox->box, flags)) {
+	if (mail_index_reset_fscked(box->index))
+		sdbox_set_mailbox_corrupted(box);
+	if (ret == 0 && (index_mailbox_want_full_sync(&mbox->box, flags) ||
+			 mbox->corrupted_rebuild_count != 0)) {
 		if ((flags & MAILBOX_SYNC_FLAG_FORCE_RESYNC) != 0)
 			sdbox_sync_flags |= SDBOX_SYNC_FLAG_FORCE_REBUILD;
 		ret = sdbox_sync(mbox, sdbox_sync_flags);


More information about the dovecot-cvs mailing list