]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: -U parameter never updated replicator's full_sync state.
authorTimo Sirainen <tss@iki.fi>
Mon, 8 Apr 2013 12:33:23 +0000 (15:33 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 8 Apr 2013 12:33:23 +0000 (15:33 +0300)
src/doveadm/dsync/doveadm-dsync.c
src/doveadm/dsync/dsync-brain.c
src/doveadm/dsync/dsync-brain.h

index ef2f702edf1b27ab495bf6bab1579d1b6b1d4385..32f9186ad3a807351681ca86aed74846f025505a 100644 (file)
@@ -443,7 +443,9 @@ cmd_dsync_icb_stream_init(struct dsync_cmd_context *ctx,
 }
 
 static void
-dsync_replicator_notify(struct dsync_cmd_context *ctx, const char *state_str)
+dsync_replicator_notify(struct dsync_cmd_context *ctx,
+                       enum dsync_brain_sync_type sync_type,
+                       const char *state_str)
 {
 #define REPLICATOR_HANDSHAKE "VERSION\treplicator-doveadm-client\t1\t0\n"
        const char *path;
@@ -465,7 +467,7 @@ dsync_replicator_notify(struct dsync_cmd_context *ctx, const char *state_str)
        str_append(str, REPLICATOR_HANDSHAKE"NOTIFY\t");
        str_append_tabescaped(str, ctx->ctx.cur_mail_user->username);
        str_append_c(str, '\t');
-       if (ctx->sync_type == DSYNC_BRAIN_SYNC_TYPE_FULL)
+       if (sync_type == DSYNC_BRAIN_SYNC_TYPE_FULL)
                str_append_c(str, 'f');
        str_append_c(str, '\t');
        str_append_tabescaped(str, state_str);
@@ -910,6 +912,7 @@ cmd_dsync_server_run(struct doveadm_mail_cmd_context *_ctx,
        struct dsync_ibc *ibc;
        struct dsync_brain *brain;
        string_t *temp_prefix, *state_str = NULL;
+       enum dsync_brain_sync_type sync_type;
 
        if (_ctx->conn != NULL) {
                /* doveadm-server connection. start with a success reply.
@@ -937,6 +940,7 @@ cmd_dsync_server_run(struct doveadm_mail_cmd_context *_ctx,
                state_str = t_str_new(128);
                dsync_brain_get_state(brain, state_str);
        }
+       sync_type = dsync_brain_get_sync_type(brain);
 
        if (dsync_brain_deinit(&brain) < 0)
                _ctx->exit_code = EX_TEMPFAIL;
@@ -949,7 +953,7 @@ cmd_dsync_server_run(struct doveadm_mail_cmd_context *_ctx,
        }
 
        if (ctx->replicator_notify)
-               dsync_replicator_notify(ctx, str_c(state_str));
+               dsync_replicator_notify(ctx, sync_type, str_c(state_str));
        return _ctx->exit_code == 0 ? 0 : -1;
 }
 
index 0ab6d616d7cb0edefed6aea597f9b97b7700bb9d..f305520e2d4c9f46421380cb80dddac299bb32d7 100644 (file)
@@ -498,6 +498,11 @@ void dsync_brain_get_state(struct dsync_brain *brain, string_t *output)
        dsync_mailbox_states_export(brain->mailbox_states, output);
 }
 
+enum dsync_brain_sync_type dsync_brain_get_sync_type(struct dsync_brain *brain)
+{
+       return brain->sync_type;
+}
+
 bool dsync_brain_has_failed(struct dsync_brain *brain)
 {
        return brain->failed;
index 1dc07b3e312572f9be6d5cf21c07ec68a15c4487..29bf4d2dcda3360cf8cb2feca4551337001aa8ff 100644 (file)
@@ -50,5 +50,7 @@ bool dsync_brain_has_failed(struct dsync_brain *brain);
 /* Returns the current sync state string, which can be given as parameter to
    dsync_brain_master_init() to quickly sync only the new changes. */
 void dsync_brain_get_state(struct dsync_brain *brain, string_t *output);
+/* Returns the sync type that was used. Mainly useful with slave brain. */
+enum dsync_brain_sync_type dsync_brain_get_sync_type(struct dsync_brain *brain);
 
 #endif