]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: struct dsync_mailbox_tree_sync_ctx - Add event
authorMarco Bettini <marco.bettini@open-xchange.com>
Tue, 30 Aug 2022 13:00:37 +0000 (13:00 +0000)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 6 Oct 2022 18:01:26 +0000 (18:01 +0000)
src/doveadm/dsync/dsync-brain-mailbox-tree.c
src/doveadm/dsync/dsync-mailbox-tree-sync.c
src/doveadm/dsync/dsync-mailbox-tree.h
src/doveadm/dsync/test-dsync-mailbox-tree-sync.c

index b529e4b21e807f084339af22b7751a6ab33036d9..d4c1cc4df2d1d28c30a0941b6df3eb4e4849e626 100644 (file)
@@ -405,7 +405,8 @@ static void dsync_brain_mailbox_trees_sync(struct dsync_brain *brain)
 
        ctx = dsync_mailbox_trees_sync_init(brain->local_mailbox_tree,
                                            brain->remote_mailbox_tree,
-                                           sync_type, sync_flags);
+                                           sync_type, sync_flags,
+                                           brain->event);
        while ((change = dsync_mailbox_trees_sync_next(ctx)) != NULL) {
                T_BEGIN {
                        ret = dsync_brain_mailbox_tree_sync_change(
index e4a50ae1efa714a2ba1dd647386a9b65e74441bf..287fed1e6e5f7c0106a5b0e9d770bfbcf7243673 100644 (file)
@@ -25,6 +25,7 @@ struct dsync_mailbox_tree_bfs_iter {
 
 struct dsync_mailbox_tree_sync_ctx {
        pool_t pool;
+       struct event *event;
        struct dsync_mailbox_tree *local_tree, *remote_tree;
        enum dsync_mailbox_trees_sync_type sync_type;
        enum dsync_mailbox_trees_sync_flags sync_flags;
@@ -1391,7 +1392,8 @@ struct dsync_mailbox_tree_sync_ctx *
 dsync_mailbox_trees_sync_init(struct dsync_mailbox_tree *local_tree,
                              struct dsync_mailbox_tree *remote_tree,
                              enum dsync_mailbox_trees_sync_type sync_type,
-                             enum dsync_mailbox_trees_sync_flags sync_flags)
+                             enum dsync_mailbox_trees_sync_flags sync_flags,
+                             struct event *parent_event)
 {
        struct dsync_mailbox_tree_sync_ctx *ctx;
        unsigned int rename_counter = 0;
@@ -1409,6 +1411,13 @@ dsync_mailbox_trees_sync_init(struct dsync_mailbox_tree *local_tree,
        ctx->remote_tree = remote_tree;
        ctx->sync_type = sync_type;
        ctx->sync_flags = sync_flags;
+
+       bool brain_master = (ctx->sync_flags & DSYNC_MAILBOX_TREES_SYNC_FLAG_MASTER_BRAIN) != 0;
+       bool force_debug = (ctx->sync_flags & DSYNC_MAILBOX_TREES_SYNC_FLAG_DEBUG) != 0;
+       ctx->event = event_create(parent_event);
+       event_set_forced_debug(ctx->event, force_debug);
+       event_set_append_log_prefix(ctx->event, t_strdup_printf(
+               "brain %c: ", brain_master ? 'M' : 'S'));
        i_array_init(&ctx->changes, 128);
 
 again:
@@ -1468,6 +1477,7 @@ int dsync_mailbox_trees_sync_deinit(struct dsync_mailbox_tree_sync_ctx **_ctx)
        *_ctx = NULL;
 
        array_free(&ctx->changes);
+       event_unref(&ctx->event);
        pool_unref(&ctx->pool);
        return ret;
 }
index 69698132ab9630286bc2bee75cdda126749b16b7..f9b2fe941f8882b2827ae643a9acf2d3d170c329 100644 (file)
@@ -193,7 +193,8 @@ struct dsync_mailbox_tree_sync_ctx *
 dsync_mailbox_trees_sync_init(struct dsync_mailbox_tree *local_tree,
                              struct dsync_mailbox_tree *remote_tree,
                              enum dsync_mailbox_trees_sync_type sync_type,
-                             enum dsync_mailbox_trees_sync_flags sync_flags);
+                             enum dsync_mailbox_trees_sync_flags sync_flags,
+                             struct event *parent_event);
 const struct dsync_mailbox_tree_sync_change *
 dsync_mailbox_trees_sync_next(struct dsync_mailbox_tree_sync_ctx *ctx);
 int dsync_mailbox_trees_sync_deinit(struct dsync_mailbox_tree_sync_ctx **ctx);
index b068137dbb7828c2c9253c1581a1624ac1843a82..6b3770812a1ddcfe1e4980489fbb57147d502f9e 100644 (file)
@@ -184,6 +184,8 @@ static void test_trees_nofree(struct dsync_mailbox_tree *tree1,
        struct dsync_mailbox_tree_sync_ctx *ctx;
        struct dsync_mailbox_node *dup_node1, *dup_node2;
 
+       struct event *event = event_create(NULL);
+
        orig_tree1 = dsync_mailbox_tree_dup(tree1);
        orig_tree2 = dsync_mailbox_tree_dup(tree2);
 
@@ -192,7 +194,8 @@ static void test_trees_nofree(struct dsync_mailbox_tree *tree1,
        dsync_mailbox_tree_build_guid_hash(tree2, &dup_node1, &dup_node2);
        ctx = dsync_mailbox_trees_sync_init(tree1, tree2,
                                            DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY,
-                                           DSYNC_MAILBOX_TREES_SYNC_FLAG_DEBUG);
+                                           DSYNC_MAILBOX_TREES_SYNC_FLAG_DEBUG,
+                                           event);
        while (dsync_mailbox_trees_sync_next(ctx) != NULL) {
        }
        dsync_mailbox_trees_sync_deinit(&ctx);
@@ -207,7 +210,8 @@ static void test_trees_nofree(struct dsync_mailbox_tree *tree1,
        dsync_mailbox_tree_build_guid_hash(orig_tree1, &dup_node1, &dup_node2);
        dsync_mailbox_tree_build_guid_hash(orig_tree2, &dup_node1, &dup_node2);
        ctx = dsync_mailbox_trees_sync_init(orig_tree2, orig_tree1,
-                                           DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY, 0);
+                                           DSYNC_MAILBOX_TREES_SYNC_TYPE_TWOWAY, 0,
+                                           event);
        while (dsync_mailbox_trees_sync_next(ctx) != NULL) {
        }
        dsync_mailbox_trees_sync_deinit(&ctx);
@@ -224,6 +228,8 @@ static void test_trees_nofree(struct dsync_mailbox_tree *tree1,
                trees_dump(tree1, orig_tree1);
        }
 
+       event_unref(&event);
+
        dsync_mailbox_tree_deinit(_tree2);
        dsync_mailbox_tree_deinit(&orig_tree1);
        dsync_mailbox_tree_deinit(&orig_tree2);