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