]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
replication: Don't send notification for changes done by dsync transactions
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 6 Feb 2018 13:12:26 +0000 (15:12 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 12 Feb 2018 15:09:26 +0000 (17:09 +0200)
src/plugins/replication/replication-plugin.c

index f2eb2268b40e18d0c79594ff4251046be5b05a8b..d9df1b916857df778dd135fe4f6876105cc4a4c0 100644 (file)
@@ -37,6 +37,7 @@ struct replication_user {
 struct replication_mail_txn_context {
        struct mail_namespace *ns;
        bool new_messages;
+       bool sync_trans;
 };
 
 static MODULE_CONTEXT_DEFINE_INIT(replication_user_module,
@@ -215,6 +216,10 @@ replication_mail_transaction_begin(struct mailbox_transaction_context *t)
 
        ctx = i_new(struct replication_mail_txn_context, 1);
        ctx->ns = mailbox_get_namespace(t->box);
+       if ((t->flags & MAILBOX_TRANSACTION_FLAG_SYNC) != 0) {
+               /* Transaction is from dsync. Don't trigger replication back. */
+               ctx->sync_trans = TRUE;
+       }
        return ctx;
 }
 
@@ -252,7 +257,8 @@ replication_mail_transaction_commit(void *txn,
                REPLICATION_USER_CONTEXT(ctx->ns->user);
        enum replication_priority priority;
 
-       if (ruser != NULL && (ctx->new_messages || changes->changed)) {
+       if (ruser != NULL && !ctx->sync_trans &&
+           (ctx->new_messages || changes->changed)) {
                priority = !ctx->new_messages ? REPLICATION_PRIORITY_LOW :
                        ruser->sync_secs == 0 ? REPLICATION_PRIORITY_HIGH :
                        REPLICATION_PRIORITY_SYNC;