dovecot-2.2: dsync: Error handling fix when mailbox is unexpecte...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 15 13:01:29 EET 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/01ba0511d04d
changeset: 15470:01ba0511d04d
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 15 12:31:56 2012 +0200
description:
dsync: Error handling fix when mailbox is unexpectedly lost.
diffstat:
src/doveadm/dsync/dsync-brain-mailbox.c | 25 ++++++++++++++++++-------
src/doveadm/dsync/dsync-ibc-stream.c | 2 +-
2 files changed, 19 insertions(+), 8 deletions(-)
diffs (65 lines):
diff -r 05d83c4df130 -r 01ba0511d04d src/doveadm/dsync/dsync-brain-mailbox.c
--- a/src/doveadm/dsync/dsync-brain-mailbox.c Fri Dec 14 15:34:56 2012 +0200
+++ b/src/doveadm/dsync/dsync-brain-mailbox.c Sat Dec 15 12:31:56 2012 +0200
@@ -530,10 +530,24 @@
}
}
+static void
+dsync_brain_slave_send_mailbox_lost(struct dsync_brain *brain,
+ const struct dsync_mailbox *dsync_box)
+{
+ struct dsync_mailbox delete_box;
+
+ memset(&delete_box, 0, sizeof(delete_box));
+ memcpy(delete_box.mailbox_guid, dsync_box->mailbox_guid,
+ sizeof(delete_box.mailbox_guid));
+ t_array_init(&delete_box.cache_fields, 0);
+ delete_box.mailbox_lost = TRUE;
+ dsync_ibc_send_mailbox(brain->ibc, &delete_box);
+}
+
bool dsync_brain_slave_recv_mailbox(struct dsync_brain *brain)
{
const struct dsync_mailbox *dsync_box;
- struct dsync_mailbox local_dsync_box, delete_box;
+ struct dsync_mailbox local_dsync_box;
struct mailbox *box;
int ret;
@@ -553,8 +567,9 @@
}
if (box == NULL) {
/* mailbox was probably deleted/renamed during sync */
- //FIXME: in case it wasn't, do error handling
+ //FIXME: verify this from log, and if not log an error.
brain->changes_during_sync = TRUE;
+ dsync_brain_slave_send_mailbox_lost(brain, dsync_box);
return TRUE;
}
if (mailbox_sync(box, MAILBOX_SYNC_FLAG_FULL_READ) < 0) {
@@ -573,11 +588,7 @@
return TRUE;
}
/* another process just deleted this mailbox? */
- memset(&delete_box, 0, sizeof(delete_box));
- memcpy(delete_box.mailbox_guid, dsync_box->mailbox_guid,
- sizeof(delete_box.mailbox_guid));
- delete_box.mailbox_lost = TRUE;
- dsync_ibc_send_mailbox(brain->ibc, &delete_box);
+ dsync_brain_slave_send_mailbox_lost(brain, dsync_box);
return TRUE;
}
i_assert(local_dsync_box.uid_validity != 0);
diff -r 05d83c4df130 -r 01ba0511d04d src/doveadm/dsync/dsync-ibc-stream.c
--- a/src/doveadm/dsync/dsync-ibc-stream.c Fri Dec 14 15:34:56 2012 +0200
+++ b/src/doveadm/dsync/dsync-ibc-stream.c Sat Dec 15 12:31:56 2012 +0200
@@ -81,7 +81,7 @@
},
{ .name = "mailbox",
.chr = 'B',
- .required_keys = "mailbox_guid uid_validity uid_next "
+ .required_keys = "mailbox_lost mailbox_guid uid_validity uid_next "
"messages_count first_recent_uid highest_modseq",
.optional_keys = "cache_fields"
},
More information about the dovecot-cvs
mailing list