Re: [Dovecot] dsync 2.1.10 does not correctly handle renames of mailbox subtrees

2013-02-13 Thread Karol Jurak
On 13 February 2013 11:46, Timo Sirainen  wrote:

> On 12.2.2013, at 11.19, Karol Jurak  wrote:
>
> > It seems that dsync 2.1.10 does not correctly handle renames of mailbox
> > subtrees. The scenario is as follows.
>
> I'm hoping I won't have to fix this in v2.1. v2.2 has a redesigned dsync
> where rename syncing should work much better.
>
>
Would you mind taking a look at the following patch? It appends to
dovecot.mailbox.log records describing
renames of all mailboxes in a subtree, not just the top level one. My basic
tests showed that this indeed allows
dsync to correctly replicate the renames, but I'm not familiar with dovecot
internals enough to be confident that this
doesn't break something else.

diff --git a/src/lib-storage/index/index-storage.c
b/src/lib-storage/index/index-storage.c
index 6d0771c..292c0fa 100644
--- a/src/lib-storage/index/index-storage.c
+++ b/src/lib-storage/index/index-storage.c
@@ -584,6 +584,9 @@ int index_storage_mailbox_rename(struct mailbox *src,
struct mailbox *dest,
 bool rename_children)
 {
guid_128_t guid;
+   struct mailbox_list_iterate_context *iter;
+   const char *pattern;
+   const struct mailbox_info *info;

if (src->list->v.rename_mailbox(src->list, src->name,
dest->list, dest->name,
@@ -596,6 +599,23 @@ int index_storage_mailbox_rename(struct mailbox *src,
struct mailbox *dest,
   non-selectable mailbox (directory), which doesn't even have a
GUID */
mailbox_name_get_sha128(dest->name, guid);
mailbox_list_add_change(src->list, MAILBOX_LOG_RECORD_RENAME, guid);
+
+   if (rename_children) {
+   pattern = t_strdup_printf("%s%c*", dest->name,
+   mail_namespace_get_sep(dest->list->ns));
+
+   iter = mailbox_list_iter_init(dest->list, pattern,
+   MAILBOX_LIST_ITER_RETURN_NO_FLAGS);
+
+   while ((info = mailbox_list_iter_next(iter)) != NULL) {
+   mailbox_name_get_sha128(info->name, guid);
+   mailbox_list_add_change(src->list,
MAILBOX_LOG_RECORD_RENAME,
+   guid);
+   }
+
+   mailbox_list_iter_deinit(&iter);
+   }
+
return 0;
 }


Re: [Dovecot] dsync 2.1.10 does not correctly handle renames of mailbox subtrees

2013-02-13 Thread Timo Sirainen
On 12.2.2013, at 11.19, Karol Jurak  wrote:

> It seems that dsync 2.1.10 does not correctly handle renames of mailbox
> subtrees. The scenario is as follows.

I'm hoping I won't have to fix this in v2.1. v2.2 has a redesigned dsync where 
rename syncing should work much better.