annotate src/doveadm/dsync/dsync-brain.c @ 15037:920756cd29b8

dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
author Timo Sirainen <tss@iki.fi>
date Fri, 07 Sep 2012 16:43:44 +0300
parents 2fc74b72817b
children 454d0563927d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
1 /* Copyright (c) 2012 Dovecot authors, see the included COPYING file */
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "hash.h"
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
6 #include "mail-namespace.h"
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
7 #include "dsync-mailbox-tree.h"
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
8 #include "dsync-ibc.h"
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "dsync-brain-private.h"
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
11 static void dsync_brain_run_io(void *context)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
12 {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
13 struct dsync_brain *brain = context;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
14 bool changed, try_pending;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
15
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
16 if (dsync_ibc_has_failed(brain->ibc)) {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
17 io_loop_stop(current_ioloop);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
18 brain->failed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
19 return;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
20 }
11687
b37c85676f8e dsync: When -v parameter is given, show progress counter of saving new messages.
Timo Sirainen <tss@iki.fi>
parents: 11684
diff changeset
21
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
22 try_pending = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
23 do {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
24 if (!dsync_brain_run(brain, &changed)) {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
25 io_loop_stop(current_ioloop);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
26 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
27 }
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
28 if (changed)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
29 try_pending = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
30 else if (try_pending) {
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
31 if (dsync_ibc_has_pending_data(brain->ibc))
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
32 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
33 try_pending = FALSE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
34 }
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
35 } while (changed);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
36 }
11727
42dfcf9c896b dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents: 11688
diff changeset
37
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
38 static struct dsync_brain *
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
39 dsync_brain_common_init(struct mail_user *user, struct dsync_ibc *ibc)
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
40 {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
41 struct dsync_brain *brain;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
42 pool_t pool;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
43
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
44 pool = pool_alloconly_create("dsync brain", 10240);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
45 brain = p_new(pool, struct dsync_brain, 1);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
46 brain->pool = pool;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
47 brain->user = user;
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
48 brain->ibc = ibc;
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
49 brain->sync_type = DSYNC_BRAIN_SYNC_TYPE_UNKNOWN;
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
50 hash_table_create(&brain->remote_mailbox_states,
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
51 brain->pool, 0, guid_128_hash, guid_128_cmp);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
52 p_array_init(&brain->mailbox_states, pool, 64);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
53 return brain;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
54 }
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55
9736
d9a96da46d4a dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents: 9686
diff changeset
56 struct dsync_brain *
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
57 dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc,
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
58 struct mail_namespace *sync_ns,
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
59 enum dsync_brain_sync_type sync_type,
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
60 enum dsync_brain_flags flags,
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
61 const char *state)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
62 {
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
63 struct dsync_ibc_settings ibc_set;
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
64 struct dsync_brain *brain;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
65 const char *error;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
66
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
67 i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_UNKNOWN);
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14584
diff changeset
68 i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || *state != '\0');
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
69
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
70 brain = dsync_brain_common_init(user, ibc);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
71 brain->sync_type = sync_type;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
72 if (sync_ns != NULL)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
73 brain->sync_ns = sync_ns;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
74 brain->master_brain = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
75 brain->mails_have_guids =
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
76 (flags & DSYNC_BRAIN_FLAG_MAILS_HAVE_GUIDS) != 0;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
77 brain->guid_requests =
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
78 (flags & DSYNC_BRAIN_FLAG_SEND_REQUESTS) != 0;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
79
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
80 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
81 if (sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE) {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
82 if (dsync_mailbox_states_import(&brain->mailbox_states, state,
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
83 &error) < 0) {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
84 array_clear(&brain->mailbox_states);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
85 i_error("Saved sync state is invalid, "
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
86 "falling back to full sync: %s", error);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
87 brain->sync_type = DSYNC_BRAIN_SYNC_TYPE_FULL;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
88 } else {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
89 brain->state = DSYNC_STATE_MASTER_SEND_LAST_COMMON;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
90 }
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
91 }
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
92 dsync_brain_mailbox_trees_init(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
93
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
94 memset(&ibc_set, 0, sizeof(ibc_set));
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
95 ibc_set.sync_ns_prefix = sync_ns == NULL ? NULL : sync_ns->prefix;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
96 ibc_set.sync_type = sync_type;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
97 ibc_set.guid_requests = brain->guid_requests;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
98 ibc_set.mails_have_guids = brain->mails_have_guids;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
99 dsync_ibc_send_handshake(ibc, &ibc_set);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
100
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
101 dsync_ibc_set_io_callback(ibc, dsync_brain_run_io, brain);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
102 return brain;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
103 }
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
104
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
105 struct dsync_brain *
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
106 dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc)
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 {
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 struct dsync_brain *brain;
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
110 brain = dsync_brain_common_init(user, ibc);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
111 brain->state = DSYNC_STATE_SLAVE_RECV_HANDSHAKE;
11734
ba9f33f9c6c3 dsync: If verbosity is enabled, log why desyncing was caused.
Timo Sirainen <tss@iki.fi>
parents: 11727
diff changeset
112
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
113 dsync_ibc_set_io_callback(ibc, dsync_brain_run_io, brain);
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 return brain;
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 }
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 int dsync_brain_deinit(struct dsync_brain **_brain)
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 {
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 struct dsync_brain *brain = *_brain;
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
120 int ret;
11680
49b226835cd2 dsync: Another try at not increasing mailbox uidnext/highestmodseq on failure
Timo Sirainen <tss@iki.fi>
parents: 11677
diff changeset
121
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 *_brain = NULL;
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
123
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
124 if (dsync_ibc_has_failed(brain->ibc) ||
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
125 brain->state != DSYNC_STATE_DONE)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
126 brain->failed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
127
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
128 if (brain->box != NULL)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
129 dsync_brain_sync_mailbox_deinit(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
130 if (brain->local_tree_iter != NULL)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
131 dsync_mailbox_tree_iter_deinit(&brain->local_tree_iter);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
132
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
133 hash_table_destroy(&brain->remote_mailbox_states);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
134
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
135 ret = brain->failed ? -1 : 0;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
136 pool_unref(&brain->pool);
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 return ret;
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 }
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
140 static bool dsync_brain_slave_recv_handshake(struct dsync_brain *brain)
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 {
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
142 const struct dsync_ibc_settings *ibc_set;
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
144 i_assert(!brain->master_brain);
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
146 if (dsync_ibc_recv_handshake(brain->ibc, &ibc_set) == 0)
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
147 return FALSE;
10331
b5b253d35612 dsync: Fixed subscription syncing to work with namespace prefixes.
Timo Sirainen <tss@iki.fi>
parents: 10328
diff changeset
148
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
149 if (ibc_set->sync_ns_prefix != NULL) {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
150 brain->sync_ns = mail_namespace_find(brain->user->namespaces,
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
151 ibc_set->sync_ns_prefix);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
152 if (brain->sync_ns == NULL) {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
153 i_error("Requested sync namespace prefix=%s doesn't exist",
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
154 ibc_set->sync_ns_prefix);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
155 brain->failed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
156 return TRUE;
11676
cf7f6912af02 dsync: Added backup command, which syncs source to destination, discarding any changes in dest.
Timo Sirainen <tss@iki.fi>
parents: 11524
diff changeset
157 }
cf7f6912af02 dsync: Added backup command, which syncs source to destination, discarding any changes in dest.
Timo Sirainen <tss@iki.fi>
parents: 11524
diff changeset
158 }
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
159 i_assert(brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_UNKNOWN);
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
160 brain->sync_type = ibc_set->sync_type;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
161 brain->guid_requests = ibc_set->guid_requests;
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
162 brain->mails_have_guids = ibc_set->mails_have_guids;
11676
cf7f6912af02 dsync: Added backup command, which syncs source to destination, discarding any changes in dest.
Timo Sirainen <tss@iki.fi>
parents: 11524
diff changeset
163
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
164 dsync_brain_mailbox_trees_init(brain);
11676
cf7f6912af02 dsync: Added backup command, which syncs source to destination, discarding any changes in dest.
Timo Sirainen <tss@iki.fi>
parents: 11524
diff changeset
165
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
166 if (brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
167 brain->state = DSYNC_STATE_SLAVE_RECV_LAST_COMMON;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
168 else
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
169 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
170 return TRUE;
11727
42dfcf9c896b dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents: 11688
diff changeset
171 }
42dfcf9c896b dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents: 11688
diff changeset
172
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
173 static void dsync_brain_master_send_last_common(struct dsync_brain *brain)
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
175 const struct dsync_mailbox_state *states;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
176 unsigned int count;
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
177 enum dsync_ibc_send_ret ret = DSYNC_IBC_SEND_RET_OK;
11727
42dfcf9c896b dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents: 11688
diff changeset
178
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
179 i_assert(brain->master_brain);
9736
d9a96da46d4a dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents: 9686
diff changeset
180
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
181 states = array_get(&brain->mailbox_states, &count);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
182 while (brain->mailbox_state_idx < count) {
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
183 if (ret == DSYNC_IBC_SEND_RET_FULL)
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
184 return;
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
185 ret = dsync_ibc_send_mailbox_state(brain->ibc,
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
186 &states[brain->mailbox_state_idx++]);
9638
b11a3eda2477 dsync: Use expunged messages' GUIDs to determine what to do with missing messages at end of mailbox.
Timo Sirainen <tss@iki.fi>
parents: 9592
diff changeset
187 }
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
188 dsync_ibc_send_end_of_list(brain->ibc);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
189 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
190 brain->mailbox_state_idx = 0;
11524
c955d4789553 dsync: Fixed syncing \noselect mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 10976
diff changeset
191 }
c955d4789553 dsync: Fixed syncing \noselect mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 10976
diff changeset
192
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
193 static bool dsync_brain_slave_recv_last_common(struct dsync_brain *brain)
10328
b63fd6156663 dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents: 10323
diff changeset
194 {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
195 struct dsync_mailbox_state state;
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
196 enum dsync_ibc_recv_ret ret;
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
197 bool changed = FALSE;
10328
b63fd6156663 dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents: 10323
diff changeset
198
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
199 i_assert(!brain->master_brain);
10328
b63fd6156663 dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents: 10323
diff changeset
200
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
201 while ((ret = dsync_ibc_recv_mailbox_state(brain->ibc, &state)) > 0) {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
202 array_append(&brain->mailbox_states, &state, 1);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
203 changed = TRUE;
10328
b63fd6156663 dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents: 10323
diff changeset
204 }
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
205 if (ret == DSYNC_IBC_RECV_RET_FINISHED) {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
206 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
207 changed = TRUE;
9736
d9a96da46d4a dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents: 9686
diff changeset
208 }
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
209 return changed;
10371
b99a19d5a93c dsync: Sync mailbox renames.
Timo Sirainen <tss@iki.fi>
parents: 10368
diff changeset
210 }
b99a19d5a93c dsync: Sync mailbox renames.
Timo Sirainen <tss@iki.fi>
parents: 10368
diff changeset
211
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
212 static bool dsync_brain_run_real(struct dsync_brain *brain, bool *changed_r)
9639
ffda7bd92ebc dsync: Skip syncing mailboxes whose uidvalidity/uidnext/highest-modseq hasn't changed.
Timo Sirainen <tss@iki.fi>
parents: 9638
diff changeset
213 {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
214 bool changed = FALSE, ret = TRUE;
9639
ffda7bd92ebc dsync: Skip syncing mailboxes whose uidvalidity/uidnext/highest-modseq hasn't changed.
Timo Sirainen <tss@iki.fi>
parents: 9638
diff changeset
215
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
216 if (brain->failed)
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
217 return FALSE;
9686
4d5cc6ce68aa dsync: Lots of improvements and fixes. Appears to be somewhat working now.
Timo Sirainen <tss@iki.fi>
parents: 9644
diff changeset
218
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
219 switch (brain->state) {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
220 case DSYNC_STATE_SLAVE_RECV_HANDSHAKE:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
221 changed = dsync_brain_slave_recv_handshake(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
222 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
223 case DSYNC_STATE_MASTER_SEND_LAST_COMMON:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
224 dsync_brain_master_send_last_common(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
225 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
226 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
227 case DSYNC_STATE_SLAVE_RECV_LAST_COMMON:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
228 changed = dsync_brain_slave_recv_last_common(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
229 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
230 case DSYNC_STATE_SEND_MAILBOX_TREE:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
231 dsync_brain_send_mailbox_tree(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
232 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
233 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
234 case DSYNC_STATE_RECV_MAILBOX_TREE:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
235 changed = dsync_brain_recv_mailbox_tree(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
236 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
237 case DSYNC_STATE_SEND_MAILBOX_TREE_DELETES:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
238 dsync_brain_send_mailbox_tree_deletes(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
239 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
240 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
241 case DSYNC_STATE_RECV_MAILBOX_TREE_DELETES:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
242 changed = dsync_brain_recv_mailbox_tree_deletes(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
243 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
244 case DSYNC_STATE_MASTER_SEND_MAILBOX:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
245 dsync_brain_master_send_mailbox(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
246 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
247 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
248 case DSYNC_STATE_SLAVE_RECV_MAILBOX:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
249 changed = dsync_brain_slave_recv_mailbox(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
250 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
251 case DSYNC_STATE_SYNC_MAILS:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
252 changed = dsync_brain_sync_mails(brain);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
253 break;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
254 case DSYNC_STATE_DONE:
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
255 changed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
256 ret = FALSE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
257 break;
9639
ffda7bd92ebc dsync: Skip syncing mailboxes whose uidvalidity/uidnext/highest-modseq hasn't changed.
Timo Sirainen <tss@iki.fi>
parents: 9638
diff changeset
258 }
9736
d9a96da46d4a dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents: 9686
diff changeset
259
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
260 *changed_r = changed;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
261 return brain->failed ? FALSE : ret;
10371
b99a19d5a93c dsync: Sync mailbox renames.
Timo Sirainen <tss@iki.fi>
parents: 10368
diff changeset
262 }
b99a19d5a93c dsync: Sync mailbox renames.
Timo Sirainen <tss@iki.fi>
parents: 10368
diff changeset
263
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
264 bool dsync_brain_run(struct dsync_brain *brain, bool *changed_r)
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265 {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
266 bool ret;
10373
036db604f86c dsync: Fixed problems with syncing mailbox names that are invalid on other side.
Timo Sirainen <tss@iki.fi>
parents: 10371
diff changeset
267
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
268 *changed_r = FALSE;
9559
34eef8a2716b dsync: Initial implementation.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
269
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
270 if (dsync_ibc_has_failed(brain->ibc)) {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
271 brain->failed = TRUE;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
272 return FALSE;
12028
6ef21adeb61d dsync: If worker fails, abort earlier.
Timo Sirainen <tss@iki.fi>
parents: 11971
diff changeset
273 }
6ef21adeb61d dsync: If worker fails, abort earlier.
Timo Sirainen <tss@iki.fi>
parents: 11971
diff changeset
274
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
275 T_BEGIN {
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
276 ret = dsync_brain_run_real(brain, changed_r);
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
277 } T_END;
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
278 if (!brain->failed)
15037
920756cd29b8 dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents: 14939
diff changeset
279 dsync_ibc_flush(brain->ibc);
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
280 return ret;
10368
9f2e8d230bd5 dsync: If some uid/modseq changes couldn't be done, exit with different value.
Timo Sirainen <tss@iki.fi>
parents: 10356
diff changeset
281 }
12124
eb5adb193064 dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents: 12028
diff changeset
282
eb5adb193064 dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents: 12028
diff changeset
283 bool dsync_brain_has_failed(struct dsync_brain *brain)
eb5adb193064 dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents: 12028
diff changeset
284 {
14584
b2076acc3715 Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents: 14253
diff changeset
285 return brain->failed;
12124
eb5adb193064 dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents: 12028
diff changeset
286 }