From 3fcdc8d673dcf7d7f45a7995c9018c92d1ee9b10 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 6 Feb 2018 15:12:26 +0200 Subject: [PATCH] replication: Don't send notification for changes done by dsync transactions --- src/plugins/replication/replication-plugin.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/replication/replication-plugin.c b/src/plugins/replication/replication-plugin.c index f2eb2268b4..d9df1b9168 100644 --- a/src/plugins/replication/replication-plugin.c +++ b/src/plugins/replication/replication-plugin.c @@ -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;