dovecot-2.0-sslstream: dsync: Sync mailbox renames.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Feb 13 02:56:35 EET 2010
details: http://hg.dovecot.org/dovecot-2.0-sslstream/rev/b99a19d5a93c
changeset: 10372:b99a19d5a93c
user: Timo Sirainen <tss at iki.fi>
date: Thu Nov 19 14:19:39 2009 -0500
description:
dsync: Sync mailbox renames.
diffstat:
2 files changed, 34 insertions(+), 7 deletions(-)
src/dsync/dsync-brain-private.h | 2 +-
src/dsync/dsync-brain.c | 39 +++++++++++++++++++++++++++++++++------
diffs (86 lines):
diff -r ce18bbd3e964 -r b99a19d5a93c src/dsync/dsync-brain-private.h
--- a/src/dsync/dsync-brain-private.h Wed Nov 18 23:13:08 2009 -0500
+++ b/src/dsync/dsync-brain-private.h Thu Nov 19 14:19:39 2009 -0500
@@ -12,7 +12,7 @@ enum dsync_state {
DSYNC_STATE_SYNC_MSGS,
DSYNC_STATE_SYNC_MSGS_FLUSH,
DSYNC_STATE_SYNC_MSGS_FLUSH2,
- DSYNC_STATE_SYNC_UPDATE_MAILBOX,
+ DSYNC_STATE_SYNC_UPDATE_MAILBOXES,
DSYNC_STATE_SYNC_FLUSH,
DSYNC_STATE_SYNC_FLUSH2,
DSYNC_STATE_SYNC_END
diff -r ce18bbd3e964 -r b99a19d5a93c src/dsync/dsync-brain.c
--- a/src/dsync/dsync-brain.c Wed Nov 18 23:13:08 2009 -0500
+++ b/src/dsync/dsync-brain.c Thu Nov 19 14:19:39 2009 -0500
@@ -416,6 +416,15 @@ static bool dsync_mailbox_has_changed_ms
return FALSE;
}
+static bool dsync_mailbox_has_changes(struct dsync_brain *brain,
+ const struct dsync_mailbox *box1,
+ const struct dsync_mailbox *box2)
+{
+ if (strcmp(box1->name, box2->name) != 0)
+ return TRUE;
+ return dsync_mailbox_has_changed_msgs(brain, box1, box2);
+}
+
static void
dsync_brain_get_changed_mailboxes(struct dsync_brain *brain,
ARRAY_TYPE(dsync_brain_mailbox) *brain_boxes,
@@ -439,9 +448,8 @@ dsync_brain_get_changed_mailboxes(struct
ret = dsync_mailbox_guid_cmp(src_boxes[src], dest_boxes[dest]);
if (ret == 0) {
if ((full_sync ||
- dsync_mailbox_has_changed_msgs(brain,
- src_boxes[src],
- dest_boxes[dest])) &&
+ dsync_mailbox_has_changes(brain, src_boxes[src],
+ dest_boxes[dest])) &&
!src_deleted && !dest_deleted) {
brain_box = array_append_space(brain_boxes);
brain_box->box = *src_boxes[src];
@@ -521,11 +529,30 @@ static void dsync_brain_sync_msgs(struct
}
static void
-dsync_brain_msg_sync_update_mailbox(struct dsync_brain *brain)
+dsync_brain_sync_rename_mailbox(struct dsync_brain *brain,
+ const struct dsync_brain_mailbox *mailbox)
+{
+ if (mailbox->src->last_renamed > mailbox->dest->last_renamed) {
+ dsync_worker_rename_mailbox(brain->dest_worker,
+ &mailbox->box.mailbox_guid,
+ mailbox->src->name);
+ } else {
+ dsync_worker_rename_mailbox(brain->src_worker,
+ &mailbox->box.mailbox_guid,
+ mailbox->dest->name);
+ }
+}
+
+static void
+dsync_brain_sync_update_mailboxes(struct dsync_brain *brain)
{
const struct dsync_brain_mailbox *mailbox;
array_foreach(&brain->mailbox_sync->mailboxes, mailbox) {
+ if (mailbox->src != NULL && mailbox->dest != NULL &&
+ strcmp(mailbox->src->name, mailbox->dest->name) != 0)
+ dsync_brain_sync_rename_mailbox(brain, mailbox);
+
dsync_worker_update_mailbox(brain->src_worker, &mailbox->box);
dsync_worker_update_mailbox(brain->dest_worker, &mailbox->box);
}
@@ -584,8 +611,8 @@ void dsync_brain_sync(struct dsync_brain
break;
case DSYNC_STATE_SYNC_MSGS_FLUSH2:
break;
- case DSYNC_STATE_SYNC_UPDATE_MAILBOX:
- dsync_brain_msg_sync_update_mailbox(brain);
+ case DSYNC_STATE_SYNC_UPDATE_MAILBOXES:
+ dsync_brain_sync_update_mailboxes(brain);
brain->state++;
/* fall through */
case DSYNC_STATE_SYNC_FLUSH:
More information about the dovecot-cvs
mailing list