dovecot-2.0: mdbox: Storage rebuild changes weren't actually bei...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jul 7 17:52:20 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/668e810e6578
changeset: 11751:668e810e6578
user: Timo Sirainen <tss at iki.fi>
date: Wed Jul 07 15:52:16 2010 +0100
description:
mdbox: Storage rebuild changes weren't actually being committed to disk.
diffstat:
src/lib-storage/index/dbox-multi/mdbox-map.c | 5 +++++
src/lib-storage/index/dbox-multi/mdbox-map.h | 4 ++++
src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c | 1 +
src/lib-storage/index/dbox-multi/mdbox-sync.c | 2 ++
4 files changed, 12 insertions(+), 0 deletions(-)
diffs (52 lines):
diff -r b0e0d4537496 -r 668e810e6578 src/lib-storage/index/dbox-multi/mdbox-map.c
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c Wed Jul 07 15:32:44 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.c Wed Jul 07 15:52:16 2010 +0100
@@ -474,6 +474,11 @@
atomic->success = FALSE;
}
+void mdbox_map_atomic_set_success(struct mdbox_map_atomic_context *atomic)
+{
+ atomic->success = TRUE;
+}
+
int mdbox_map_atomic_finish(struct mdbox_map_atomic_context **_atomic)
{
struct mdbox_map_atomic_context *atomic = *_atomic;
diff -r b0e0d4537496 -r 668e810e6578 src/lib-storage/index/dbox-multi/mdbox-map.h
--- a/src/lib-storage/index/dbox-multi/mdbox-map.h Wed Jul 07 15:32:44 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.h Wed Jul 07 15:52:16 2010 +0100
@@ -69,6 +69,10 @@
/* When finish() is called, rollback the changes. If data was already written
to map's transaction log, this desyncs the map and causes a rebuild */
void mdbox_map_atomic_set_failed(struct mdbox_map_atomic_context *atomic);
+/* Mark this atomic as having succeeded. This is internally done if
+ transaction or append is committed within this atomic, but not when the
+ atomic is used standalone. */
+void mdbox_map_atomic_set_success(struct mdbox_map_atomic_context *atomic);
/* Commit/rollback changes within this atomic context. */
int mdbox_map_atomic_finish(struct mdbox_map_atomic_context **atomic);
diff -r b0e0d4537496 -r 668e810e6578 src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c
--- a/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c Wed Jul 07 15:32:44 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c Wed Jul 07 15:52:16 2010 +0100
@@ -908,6 +908,7 @@
atomic = mdbox_map_atomic_begin(storage->map);
ret = mdbox_storage_rebuild_in_context(storage, atomic);
+ mdbox_map_atomic_set_success(atomic);
if (mdbox_map_atomic_finish(&atomic) < 0)
ret = -1;
return ret;
diff -r b0e0d4537496 -r 668e810e6578 src/lib-storage/index/dbox-multi/mdbox-sync.c
--- a/src/lib-storage/index/dbox-multi/mdbox-sync.c Wed Jul 07 15:32:44 2010 +0100
+++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c Wed Jul 07 15:52:16 2010 +0100
@@ -308,6 +308,8 @@
ret = mdbox_sync_begin(mbox, flags, atomic, &sync_ctx);
if (ret == 0 && sync_ctx != NULL)
ret = mdbox_sync_finish(&sync_ctx, TRUE);
+ if (ret == 0)
+ mdbox_map_atomic_set_success(atomic);
if (mdbox_map_atomic_finish(&atomic) < 0)
ret = -1;
return ret;
More information about the dovecot-cvs
mailing list