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