dovecot-2.2: dsync: Added -a parameter to sync all namespaces, n...

dovecot at dovecot.org dovecot at dovecot.org
Fri Dec 14 15:35:25 EET 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/05d83c4df130
changeset: 15469:05d83c4df130
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Dec 14 15:34:56 2012 +0200
description:
dsync: Added -a parameter to sync all namespaces, not just the default one.

diffstat:

 src/doveadm/dsync/doveadm-dsync.c            |  10 +++++++++-
 src/doveadm/dsync/dsync-brain-mailbox-tree.c |   6 ++++++
 src/doveadm/dsync/dsync-brain-private.h      |   1 +
 src/doveadm/dsync/dsync-brain.c              |   2 ++
 src/doveadm/dsync/dsync-brain.h              |   3 ++-
 src/doveadm/dsync/dsync-ibc-stream.c         |   6 +++++-
 6 files changed, 25 insertions(+), 3 deletions(-)

diffs (137 lines):

diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/doveadm-dsync.c
--- a/src/doveadm/dsync/doveadm-dsync.c	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/doveadm-dsync.c	Fri Dec 14 15:34:56 2012 +0200
@@ -27,7 +27,7 @@
 #include <unistd.h>
 #include <ctype.h>
 
-#define DSYNC_COMMON_GETOPT_ARGS "+dEfm:n:r:Rs:"
+#define DSYNC_COMMON_GETOPT_ARGS "+adEfm:n:r:Rs:"
 
 struct dsync_cmd_context {
 	struct doveadm_mail_cmd_context ctx;
@@ -44,6 +44,7 @@
 	unsigned int lock_timeout;
 
 	unsigned int lock:1;
+	unsigned int sync_all_namespaces:1;
 	unsigned int default_replica_location:1;
 	unsigned int backup:1;
 	unsigned int reverse_backup:1;
@@ -362,6 +363,8 @@
 
 	brain_flags = DSYNC_BRAIN_FLAG_MAILS_HAVE_GUIDS |
 		DSYNC_BRAIN_FLAG_SEND_GUID_REQUESTS;
+	if (ctx->sync_all_namespaces)
+		brain_flags |= DSYNC_BRAIN_FLAG_SYNC_ALL_NAMESPACES;
 
 	if (ctx->reverse_backup)
 		brain_flags |= DSYNC_BRAIN_FLAG_BACKUP_RECV;
@@ -459,6 +462,8 @@
 		run_cmd(ctx, remote_cmd_args);
 		ctx->remote = TRUE;
 	}
+	if (ctx->sync_all_namespaces && !ctx->remote)
+		i_fatal("-a parameter requires syncing with remote host");
 	return 0;
 }
 
@@ -490,6 +495,9 @@
 	struct dsync_cmd_context *ctx = (struct dsync_cmd_context *)_ctx;
 
 	switch (c) {
+	case 'a':
+		ctx->sync_all_namespaces = TRUE;
+		break;
 	case 'd':
 		ctx->default_replica_location = TRUE;
 		break;
diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/dsync-brain-mailbox-tree.c
--- a/src/doveadm/dsync/dsync-brain-mailbox-tree.c	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/dsync-brain-mailbox-tree.c	Fri Dec 14 15:34:56 2012 +0200
@@ -16,6 +16,8 @@
 {
 	if (brain->sync_ns == ns)
 		return TRUE;
+	if (brain->sync_all_namespaces)
+		return TRUE;
 
 	return brain->sync_ns == NULL &&
 		strcmp(ns->unexpanded_set->location,
@@ -138,6 +140,10 @@
 	unsigned int part_len;
 	char ns_sep = mail_namespace_get_sep(ns);
 
+	if ((ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
+	    strcmp(name_parts[0], "INBOX") == 0 && name_parts[1] == NULL)
+		return TRUE;
+
 	for (; *name_parts != NULL && *prefix != '\0'; name_parts++) {
 		part = *name_parts;
 		part_len = strlen(part);
diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/dsync-brain-private.h
--- a/src/doveadm/dsync/dsync-brain-private.h	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/dsync-brain-private.h	Fri Dec 14 15:34:56 2012 +0200
@@ -81,6 +81,7 @@
 	unsigned int backup_send:1;
 	unsigned int backup_recv:1;
 	unsigned int debug:1;
+	unsigned int sync_all_namespaces:1;
 	unsigned int changes_during_sync:1;
 	unsigned int failed:1;
 };
diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/dsync-brain.c
--- a/src/doveadm/dsync/dsync-brain.c	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/dsync-brain.c	Fri Dec 14 15:34:56 2012 +0200
@@ -77,6 +77,8 @@
 	brain->backup_send = (flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0;
 	brain->backup_recv = (flags & DSYNC_BRAIN_FLAG_BACKUP_RECV) != 0;
 	brain->debug = (flags & DSYNC_BRAIN_FLAG_DEBUG) != 0;
+	brain->sync_all_namespaces =
+		(flags & DSYNC_BRAIN_FLAG_SYNC_ALL_NAMESPACES) != 0;
 }
 
 struct dsync_brain *
diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/dsync-brain.h
--- a/src/doveadm/dsync/dsync-brain.h	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/dsync-brain.h	Fri Dec 14 15:34:56 2012 +0200
@@ -10,7 +10,8 @@
 	DSYNC_BRAIN_FLAG_SEND_GUID_REQUESTS	= 0x02,
 	DSYNC_BRAIN_FLAG_BACKUP_SEND		= 0x04,
 	DSYNC_BRAIN_FLAG_BACKUP_RECV		= 0x08,
-	DSYNC_BRAIN_FLAG_DEBUG			= 0x10
+	DSYNC_BRAIN_FLAG_DEBUG			= 0x10,
+	DSYNC_BRAIN_FLAG_SYNC_ALL_NAMESPACES	= 0x20
 };
 
 enum dsync_brain_sync_type {
diff -r 9f332e29836d -r 05d83c4df130 src/doveadm/dsync/dsync-ibc-stream.c
--- a/src/doveadm/dsync/dsync-ibc-stream.c	Fri Dec 14 15:34:00 2012 +0200
+++ b/src/doveadm/dsync/dsync-ibc-stream.c	Fri Dec 14 15:34:56 2012 +0200
@@ -60,7 +60,7 @@
 	{ NULL, '\0', NULL, NULL },
 	{ .name = "handshake",
 	  .chr = 'H',
-	  .optional_keys = "sync_ns_prefix sync_type debug "
+	  .optional_keys = "sync_ns_prefix sync_type debug sync_all_namespaces "
 	  	"mails_have_guids send_guid_requests backup_send backup_recv"
 	},
 	{ .name = "mailbox_state",
@@ -541,6 +541,8 @@
 		dsync_serializer_encode_add(encoder, "backup_recv", "");
 	if ((set->brain_flags & DSYNC_BRAIN_FLAG_DEBUG) != 0)
 		dsync_serializer_encode_add(encoder, "debug", "");
+	if ((set->brain_flags & DSYNC_BRAIN_FLAG_SYNC_ALL_NAMESPACES) != 0)
+		dsync_serializer_encode_add(encoder, "sync_all_namespaces", "");
 
 	dsync_serializer_encode_finish(&encoder, str);
 	dsync_ibc_stream_send_string(ibc, str);
@@ -599,6 +601,8 @@
 		set->brain_flags |= DSYNC_BRAIN_FLAG_BACKUP_RECV;
 	if (dsync_deserializer_decode_try(decoder, "debug", &value))
 		set->brain_flags |= DSYNC_BRAIN_FLAG_DEBUG;
+	if (dsync_deserializer_decode_try(decoder, "sync_all_namespaces", &value))
+		set->brain_flags |= DSYNC_BRAIN_FLAG_SYNC_ALL_NAMESPACES;
 
 	*set_r = set;
 	return DSYNC_IBC_RECV_RET_OK;


More information about the dovecot-cvs mailing list