Mercurial > dovecot > core-2.2
annotate src/doveadm/dsync/dsync-brain.c @ 16454:5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
This was done by v2.1 dsync, but the code got temporarily lost in v2.2.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 05 Jun 2013 17:14:49 +0300 |
parents | 4883a8e1db13 |
children | 5ed2f41431c4 |
rev | line source |
---|---|
15715
36ef72481934
Oops :) Update copyrights to 2013 without breaking all .c files.
Timo Sirainen <tss@iki.fi>
parents:
15714
diff
changeset
|
1 /* Copyright (c) 2013 Dovecot authors, see the included COPYING file */ |
9559 | 2 |
3 #include "lib.h" | |
4 #include "array.h" | |
5 #include "hash.h" | |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
6 #include "hostpid.h" |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
7 #include "mail-namespace.h" |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
8 #include "dsync-mailbox-tree.h" |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
9 #include "dsync-ibc.h" |
9559 | 10 #include "dsync-brain-private.h" |
11 | |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
12 #include <sys/stat.h> |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
13 |
15464
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
14 static const char *dsync_state_names[DSYNC_STATE_DONE+1] = { |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
15 "recv_handshake", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
16 "send_last_common", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
17 "recv_last_common", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
18 "send_mailbox_tree", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
19 "send_mailbox_tree_deletes", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
20 "recv_mailbox_tree", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
21 "recv_mailbox_tree_deletes", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
22 "master_send_mailbox", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
23 "slave_recv_mailbox", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
24 "sync_mails", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
25 "done" |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
26 }; |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
27 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
28 static void dsync_brain_run_io(void *context) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
29 { |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
30 struct dsync_brain *brain = context; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
31 bool changed, try_pending; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
32 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
33 if (dsync_ibc_has_failed(brain->ibc)) { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
34 io_loop_stop(current_ioloop); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
35 brain->failed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
36 return; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
37 } |
11687
b37c85676f8e
dsync: When -v parameter is given, show progress counter of saving new messages.
Timo Sirainen <tss@iki.fi>
parents:
11684
diff
changeset
|
38 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
39 try_pending = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
40 do { |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
41 if (!dsync_brain_run(brain, &changed)) { |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
42 io_loop_stop(current_ioloop); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
43 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
44 } |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
45 if (changed) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
46 try_pending = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
47 else if (try_pending) { |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
48 if (dsync_ibc_has_pending_data(brain->ibc)) |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
49 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
50 try_pending = FALSE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
51 } |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
52 } while (changed); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
53 } |
11727
42dfcf9c896b
dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents:
11688
diff
changeset
|
54 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
55 static struct dsync_brain * |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
56 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
|
57 { |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
58 struct dsync_brain *brain; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
59 pool_t pool; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
60 |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
61 pool = pool_alloconly_create("dsync brain", 10240); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
62 brain = p_new(pool, struct dsync_brain, 1); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
63 brain->pool = pool; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
64 brain->user = user; |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
65 brain->ibc = ibc; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
66 brain->sync_type = DSYNC_BRAIN_SYNC_TYPE_UNKNOWN; |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
67 brain->lock_fd = -1; |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
68 hash_table_create(&brain->mailbox_states, pool, 0, |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
69 guid_128_hash, guid_128_cmp); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
70 p_array_init(&brain->remote_mailbox_states, pool, 64); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
71 return brain; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
72 } |
9559 | 73 |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
74 static void |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
75 dsync_brain_set_flags(struct dsync_brain *brain, enum dsync_brain_flags flags) |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
76 { |
15744
b4e2b3b54f0a
dsync: Renamed "guid_requests" to "mail_requests"
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
77 brain->mail_requests = |
b4e2b3b54f0a
dsync: Renamed "guid_requests" to "mail_requests"
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
78 (flags & DSYNC_BRAIN_FLAG_SEND_MAIL_REQUESTS) != 0; |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
79 brain->backup_send = (flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0; |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
80 brain->backup_recv = (flags & DSYNC_BRAIN_FLAG_BACKUP_RECV) != 0; |
15464
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
81 brain->debug = (flags & DSYNC_BRAIN_FLAG_DEBUG) != 0; |
15836
607758d425e7
dsync: Renamed -a parameter to -N. It also now skips invisible namespaces.
Timo Sirainen <tss@iki.fi>
parents:
15825
diff
changeset
|
82 brain->sync_visible_namespaces = |
607758d425e7
dsync: Renamed -a parameter to -N. It also now skips invisible namespaces.
Timo Sirainen <tss@iki.fi>
parents:
15825
diff
changeset
|
83 (flags & DSYNC_BRAIN_FLAG_SYNC_VISIBLE_NAMESPACES) != 0; |
16084
38774adaddaf
dsync: -m '' parameter now syncs mailbox list, but no actual mails.
Timo Sirainen <tss@iki.fi>
parents:
15986
diff
changeset
|
84 brain->no_mail_sync = (flags & DSYNC_BRAIN_FLAG_NO_MAIL_SYNC) != 0; |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
85 } |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
86 |
9736
d9a96da46d4a
dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents:
9686
diff
changeset
|
87 struct dsync_brain * |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
88 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
|
89 enum dsync_brain_sync_type sync_type, |
16396 | 90 enum dsync_brain_flags flags, |
91 const struct dsync_brain_settings *set) | |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
92 { |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
93 struct dsync_ibc_settings ibc_set; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
94 struct dsync_brain *brain; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
95 const char *error; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
96 |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
97 i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_UNKNOWN); |
16396 | 98 i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || |
99 (set->state != NULL && *set->state != '\0')); | |
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 brain = dsync_brain_common_init(user, ibc); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
102 brain->sync_type = sync_type; |
16396 | 103 if (set->sync_ns != NULL) |
104 brain->sync_ns = set->sync_ns; | |
105 brain->sync_box = p_strdup(brain->pool, set->sync_box); | |
16398
4883a8e1db13
dsync: Added -x parameter to exclude mailboxes from sync.
Timo Sirainen <tss@iki.fi>
parents:
16396
diff
changeset
|
106 brain->exclude_mailboxes = set->exclude_mailboxes == NULL ? NULL : |
4883a8e1db13
dsync: Added -x parameter to exclude mailboxes from sync.
Timo Sirainen <tss@iki.fi>
parents:
16396
diff
changeset
|
107 p_strarray_dup(brain->pool, set->exclude_mailboxes); |
16396 | 108 memcpy(brain->sync_box_guid, set->sync_box_guid, |
109 sizeof(brain->sync_box_guid)); | |
110 brain->lock_timeout = set->lock_timeout_secs; | |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
111 brain->master_brain = TRUE; |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
112 dsync_brain_set_flags(brain, flags); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
113 |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
114 if (sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE && |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
115 dsync_mailbox_states_import(brain->mailbox_states, |
16396 | 116 brain->pool, set->state, &error) < 0) { |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
117 hash_table_clear(brain->mailbox_states, FALSE); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
118 i_error("Saved sync state is invalid, " |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
119 "falling back to full sync: %s", error); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
120 brain->sync_type = sync_type = DSYNC_BRAIN_SYNC_TYPE_FULL; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
121 } |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
122 dsync_brain_mailbox_trees_init(brain); |
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 memset(&ibc_set, 0, sizeof(ibc_set)); |
15815
e7aabd79c9d5
dsync: Use full hostname+domain when comparing if hosts are different in locking.
Timo Sirainen <tss@iki.fi>
parents:
15782
diff
changeset
|
125 ibc_set.hostname = my_hostdomain(); |
16396 | 126 ibc_set.sync_ns_prefix = set->sync_ns == NULL ? NULL : |
127 set->sync_ns->prefix; | |
128 ibc_set.sync_box = set->sync_box; | |
16398
4883a8e1db13
dsync: Added -x parameter to exclude mailboxes from sync.
Timo Sirainen <tss@iki.fi>
parents:
16396
diff
changeset
|
129 ibc_set.exclude_mailboxes = set->exclude_mailboxes; |
16396 | 130 memcpy(ibc_set.sync_box_guid, set->sync_box_guid, |
16110
c51873a8e0d9
doveadm sync/backup: Added -g <guid> to sync only the specified mailbox (by GUID)
Timo Sirainen <tss@iki.fi>
parents:
16089
diff
changeset
|
131 sizeof(ibc_set.sync_box_guid)); |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
132 ibc_set.sync_type = sync_type; |
16396 | 133 ibc_set.lock_timeout = set->lock_timeout_secs; |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
134 /* reverse the backup direction for the slave */ |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
135 ibc_set.brain_flags = flags & ~(DSYNC_BRAIN_FLAG_BACKUP_SEND | |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
136 DSYNC_BRAIN_FLAG_BACKUP_RECV); |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
137 if ((flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0) |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
138 ibc_set.brain_flags |= DSYNC_BRAIN_FLAG_BACKUP_RECV; |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
139 else if ((flags & DSYNC_BRAIN_FLAG_BACKUP_RECV) != 0) |
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
140 ibc_set.brain_flags |= DSYNC_BRAIN_FLAG_BACKUP_SEND; |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
141 dsync_ibc_send_handshake(ibc, &ibc_set); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
142 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
143 dsync_ibc_set_io_callback(ibc, dsync_brain_run_io, brain); |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
144 brain->state = DSYNC_STATE_MASTER_RECV_HANDSHAKE; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
145 return brain; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
146 } |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
147 |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
148 struct dsync_brain * |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
149 dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc) |
9559 | 150 { |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
151 struct dsync_ibc_settings ibc_set; |
9559 | 152 struct dsync_brain *brain; |
153 | |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
154 brain = dsync_brain_common_init(user, ibc); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
155 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
|
156 |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
157 memset(&ibc_set, 0, sizeof(ibc_set)); |
15815
e7aabd79c9d5
dsync: Use full hostname+domain when comparing if hosts are different in locking.
Timo Sirainen <tss@iki.fi>
parents:
15782
diff
changeset
|
158 ibc_set.hostname = my_hostdomain(); |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
159 dsync_ibc_send_handshake(ibc, &ibc_set); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
160 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
161 dsync_ibc_set_io_callback(ibc, dsync_brain_run_io, brain); |
9559 | 162 return brain; |
163 } | |
164 | |
165 int dsync_brain_deinit(struct dsync_brain **_brain) | |
166 { | |
167 struct dsync_brain *brain = *_brain; | |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
168 int ret; |
11680
49b226835cd2
dsync: Another try at not increasing mailbox uidnext/highestmodseq on failure
Timo Sirainen <tss@iki.fi>
parents:
11677
diff
changeset
|
169 |
9559 | 170 *_brain = NULL; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
171 |
15986
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
172 if (dsync_ibc_has_timed_out(brain->ibc)) { |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
173 i_error("Timeout during state=%s%s", |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
174 dsync_state_names[brain->state], |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
175 brain->state != DSYNC_STATE_SYNC_MAILS ? "" : |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
176 t_strdup_printf(" (send=%s recv=%s)", |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
177 dsync_box_state_names[brain->box_send_state], |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
178 dsync_box_state_names[brain->box_recv_state])); |
f6377e089dee
dsync: If I/O gets stalled, log the state in which it happened.
Timo Sirainen <tss@iki.fi>
parents:
15836
diff
changeset
|
179 } |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
180 if (dsync_ibc_has_failed(brain->ibc) || |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
181 brain->state != DSYNC_STATE_DONE) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
182 brain->failed = TRUE; |
15632
40dd9a080b6e
dsync: Close mail streams earlier on failures to avoid assert-crashing
Timo Sirainen <tss@iki.fi>
parents:
15594
diff
changeset
|
183 dsync_ibc_close_mail_streams(brain->ibc); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
184 |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
185 if (brain->box != NULL) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
186 dsync_brain_sync_mailbox_deinit(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
187 if (brain->local_tree_iter != NULL) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
188 dsync_mailbox_tree_iter_deinit(&brain->local_tree_iter); |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
189 if (brain->mailbox_states_iter != NULL) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
190 hash_table_iterate_deinit(&brain->mailbox_states_iter); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
191 hash_table_destroy(&brain->mailbox_states); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
192 |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
193 if (brain->lock_fd != -1) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
194 /* unlink the lock file before it gets unlocked */ |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
195 if (unlink(brain->lock_path) < 0) |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
196 i_error("unlink(%s) failed: %m", brain->lock_path); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
197 file_lock_free(&brain->lock); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
198 i_close_fd(&brain->lock_fd); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
199 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
200 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
201 ret = brain->failed ? -1 : 0; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
202 pool_unref(&brain->pool); |
9559 | 203 return ret; |
204 } | |
205 | |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
206 static int |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
207 dsync_brain_lock(struct dsync_brain *brain, const char *remote_hostname) |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
208 { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
209 struct stat st1, st2; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
210 const char *home; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
211 int ret; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
212 |
15825
df29194c1ab6
dsync: Fix to checking which side should do the locking.
Timo Sirainen <tss@iki.fi>
parents:
15816
diff
changeset
|
213 if ((ret = strcmp(remote_hostname, my_hostdomain())) < 0) { |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
214 /* locking done by remote */ |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
215 return 0; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
216 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
217 if (ret == 0 && !brain->master_brain) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
218 /* running dsync within the same server. |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
219 locking done by master brain. */ |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
220 return 0; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
221 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
222 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
223 if ((ret = mail_user_get_home(brain->user, &home)) < 0) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
224 i_error("Couldn't look up user's home dir"); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
225 return -1; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
226 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
227 if (ret == 0) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
228 i_error("User has no home directory"); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
229 return -1; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
230 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
231 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
232 brain->lock_path = p_strconcat(brain->pool, home, |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
233 "/"DSYNC_LOCK_FILENAME, NULL); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
234 for (;;) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
235 brain->lock_fd = creat(brain->lock_path, 0600); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
236 if (brain->lock_fd == -1) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
237 i_error("Couldn't create lock %s: %m", |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
238 brain->lock_path); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
239 return -1; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
240 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
241 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
242 if (file_wait_lock(brain->lock_fd, brain->lock_path, F_WRLCK, |
16089
b436c1f6bd06
dsync: Use fcntl() locking instead of flock().
Timo Sirainen <tss@iki.fi>
parents:
16084
diff
changeset
|
243 FILE_LOCK_METHOD_FCNTL, brain->lock_timeout, |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
244 &brain->lock) <= 0) { |
16251
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
245 if (errno == EAGAIN) { |
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
246 i_error("Couldn't lock %s: Timed out after %u seconds", |
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
247 brain->lock_path, brain->lock_timeout); |
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
248 } else { |
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
249 i_error("Couldn't lock %s: %m", brain->lock_path); |
e41a13ae504d
dsync: If dsync fails due to lock timeout, give a better error message.
Timo Sirainen <tss@iki.fi>
parents:
16222
diff
changeset
|
250 } |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
251 break; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
252 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
253 if (fstat(brain->lock_fd, &st1) < 0) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
254 if (errno != ESTALE) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
255 i_error("fstat(%s) failed: %m", brain->lock_path); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
256 break; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
257 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
258 } else if (stat(brain->lock_path, &st2) < 0) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
259 if (errno != ENOENT) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
260 i_error("stat(%s) failed: %m", brain->lock_path); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
261 break; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
262 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
263 } else if (st1.st_ino == st2.st_ino) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
264 /* success */ |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
265 return 0; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
266 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
267 /* file was recreated, try again */ |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
268 i_close_fd(&brain->lock_fd); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
269 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
270 i_close_fd(&brain->lock_fd); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
271 return -1; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
272 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
273 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
274 static bool dsync_brain_master_recv_handshake(struct dsync_brain *brain) |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
275 { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
276 const struct dsync_ibc_settings *ibc_set; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
277 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
278 i_assert(brain->master_brain); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
279 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
280 if (dsync_ibc_recv_handshake(brain->ibc, &ibc_set) == 0) |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
281 return FALSE; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
282 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
283 if (brain->lock_timeout > 0) { |
15816
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
284 if (dsync_brain_lock(brain, ibc_set->hostname) < 0) { |
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
285 brain->failed = TRUE; |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
286 return FALSE; |
15816
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
287 } |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
288 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
289 |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
290 brain->state = brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE ? |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
291 DSYNC_STATE_MASTER_SEND_LAST_COMMON : |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
292 DSYNC_STATE_SEND_MAILBOX_TREE; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
293 return TRUE; |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
294 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
295 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
296 static bool dsync_brain_slave_recv_handshake(struct dsync_brain *brain) |
9559 | 297 { |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
298 const struct dsync_ibc_settings *ibc_set; |
9559 | 299 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
300 i_assert(!brain->master_brain); |
9559 | 301 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
302 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
|
303 return FALSE; |
10331
b5b253d35612
dsync: Fixed subscription syncing to work with namespace prefixes.
Timo Sirainen <tss@iki.fi>
parents:
10328
diff
changeset
|
304 |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
305 if (ibc_set->lock_timeout > 0) { |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
306 brain->lock_timeout = ibc_set->lock_timeout; |
15816
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
307 if (dsync_brain_lock(brain, ibc_set->hostname) < 0) { |
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
308 brain->failed = TRUE; |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
309 return FALSE; |
15816
adb9857a3879
dsync: If locking fails, fail instead of continuing.
Timo Sirainen <tss@iki.fi>
parents:
15815
diff
changeset
|
310 } |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
311 } |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
312 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
313 if (ibc_set->sync_ns_prefix != NULL) { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
314 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
|
315 ibc_set->sync_ns_prefix); |
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
|
316 } |
15471
88ac919f8afe
dsync: Added back support for syncing only one mailbox (-m parameter)
Timo Sirainen <tss@iki.fi>
parents:
15469
diff
changeset
|
317 brain->sync_box = p_strdup(brain->pool, ibc_set->sync_box); |
16398
4883a8e1db13
dsync: Added -x parameter to exclude mailboxes from sync.
Timo Sirainen <tss@iki.fi>
parents:
16396
diff
changeset
|
318 brain->exclude_mailboxes = ibc_set->exclude_mailboxes == NULL ? NULL : |
4883a8e1db13
dsync: Added -x parameter to exclude mailboxes from sync.
Timo Sirainen <tss@iki.fi>
parents:
16396
diff
changeset
|
319 p_strarray_dup(brain->pool, ibc_set->exclude_mailboxes); |
16110
c51873a8e0d9
doveadm sync/backup: Added -g <guid> to sync only the specified mailbox (by GUID)
Timo Sirainen <tss@iki.fi>
parents:
16089
diff
changeset
|
320 memcpy(brain->sync_box_guid, ibc_set->sync_box_guid, |
c51873a8e0d9
doveadm sync/backup: Added -g <guid> to sync only the specified mailbox (by GUID)
Timo Sirainen <tss@iki.fi>
parents:
16089
diff
changeset
|
321 sizeof(brain->sync_box_guid)); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
322 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
|
323 brain->sync_type = ibc_set->sync_type; |
15231
454d0563927d
doveadm: "backup" command is working again.
Timo Sirainen <tss@iki.fi>
parents:
15037
diff
changeset
|
324 dsync_brain_set_flags(brain, ibc_set->brain_flags); |
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
|
325 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
326 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
|
327 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
328 if (brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
329 brain->state = DSYNC_STATE_SLAVE_RECV_LAST_COMMON; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
330 else |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
331 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
332 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
|
333 } |
42dfcf9c896b
dsync backup: Fail if it looks like backup is running in wrong direction.
Timo Sirainen <tss@iki.fi>
parents:
11688
diff
changeset
|
334 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
335 static void dsync_brain_master_send_last_common(struct dsync_brain *brain) |
9559 | 336 { |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
337 struct dsync_mailbox_state *state; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
338 uint8_t *guid; |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
339 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
|
340 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
341 i_assert(brain->master_brain); |
9736
d9a96da46d4a
dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents:
9686
diff
changeset
|
342 |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
343 if (brain->mailbox_states_iter == NULL) { |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
344 brain->mailbox_states_iter = |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
345 hash_table_iterate_init(brain->mailbox_states); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
346 } |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
347 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
348 for (;;) { |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
349 if (ret == DSYNC_IBC_SEND_RET_FULL) |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
350 return; |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
351 if (!hash_table_iterate(brain->mailbox_states_iter, |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
352 brain->mailbox_states, &guid, &state)) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
353 break; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
354 ret = dsync_ibc_send_mailbox_state(brain->ibc, state); |
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
|
355 } |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
356 hash_table_iterate_deinit(&brain->mailbox_states_iter); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
357 |
16222
d79cf48f1072
dsync: Fixed talking to earlier dsync without mailbox attribute support.
Timo Sirainen <tss@iki.fi>
parents:
16110
diff
changeset
|
358 dsync_ibc_send_end_of_list(brain->ibc, DSYNC_IBC_EOL_MAILBOX_STATE); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
359 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE; |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
360 } |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
361 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
362 static void dsync_mailbox_state_add(struct dsync_brain *brain, |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
363 const struct dsync_mailbox_state *state) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
364 { |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
365 struct dsync_mailbox_state *dupstate; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
366 uint8_t *guid_p; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
367 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
368 dupstate = p_new(brain->pool, struct dsync_mailbox_state, 1); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
369 *dupstate = *state; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
370 guid_p = dupstate->mailbox_guid; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
371 hash_table_insert(brain->mailbox_states, guid_p, dupstate); |
11524
c955d4789553
dsync: Fixed syncing \noselect mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
10976
diff
changeset
|
372 } |
c955d4789553
dsync: Fixed syncing \noselect mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
10976
diff
changeset
|
373 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
374 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
|
375 { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
376 struct dsync_mailbox_state state; |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
377 enum dsync_ibc_recv_ret ret; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
378 bool changed = FALSE; |
10328
b63fd6156663
dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents:
10323
diff
changeset
|
379 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
380 i_assert(!brain->master_brain); |
10328
b63fd6156663
dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents:
10323
diff
changeset
|
381 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
382 while ((ret = dsync_ibc_recv_mailbox_state(brain->ibc, &state)) > 0) { |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
383 dsync_mailbox_state_add(brain, &state); |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
384 changed = TRUE; |
10328
b63fd6156663
dsync: Added support for subscription syncing.
Timo Sirainen <tss@iki.fi>
parents:
10323
diff
changeset
|
385 } |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
386 if (ret == DSYNC_IBC_RECV_RET_FINISHED) { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
387 brain->state = DSYNC_STATE_SEND_MAILBOX_TREE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
388 changed = TRUE; |
9736
d9a96da46d4a
dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents:
9686
diff
changeset
|
389 } |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
390 return changed; |
10371 | 391 } |
392 | |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
393 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
|
394 { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
395 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
|
396 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
397 if (brain->failed) |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
398 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
|
399 |
15464
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
400 if (brain->debug) { |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
401 i_debug("brain %c: in state=%s", brain->master_brain ? 'M' : 'S', |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
402 dsync_state_names[brain->state]); |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
403 } |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
404 switch (brain->state) { |
15782
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
405 case DSYNC_STATE_MASTER_RECV_HANDSHAKE: |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
406 changed = dsync_brain_master_recv_handshake(brain); |
6f024e0289da
dsync: -l parameter locking is now done on the server with "lower" hostname.
Timo Sirainen <tss@iki.fi>
parents:
15750
diff
changeset
|
407 break; |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
408 case DSYNC_STATE_SLAVE_RECV_HANDSHAKE: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
409 changed = dsync_brain_slave_recv_handshake(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
410 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
411 case DSYNC_STATE_MASTER_SEND_LAST_COMMON: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
412 dsync_brain_master_send_last_common(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
413 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
414 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
415 case DSYNC_STATE_SLAVE_RECV_LAST_COMMON: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
416 changed = dsync_brain_slave_recv_last_common(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
417 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
418 case DSYNC_STATE_SEND_MAILBOX_TREE: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
419 dsync_brain_send_mailbox_tree(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
420 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
421 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
422 case DSYNC_STATE_RECV_MAILBOX_TREE: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
423 changed = dsync_brain_recv_mailbox_tree(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
424 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
425 case DSYNC_STATE_SEND_MAILBOX_TREE_DELETES: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
426 dsync_brain_send_mailbox_tree_deletes(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
427 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
428 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
429 case DSYNC_STATE_RECV_MAILBOX_TREE_DELETES: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
430 changed = dsync_brain_recv_mailbox_tree_deletes(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
431 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
432 case DSYNC_STATE_MASTER_SEND_MAILBOX: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
433 dsync_brain_master_send_mailbox(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
434 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
435 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
436 case DSYNC_STATE_SLAVE_RECV_MAILBOX: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
437 changed = dsync_brain_slave_recv_mailbox(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
438 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
439 case DSYNC_STATE_SYNC_MAILS: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
440 changed = dsync_brain_sync_mails(brain); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
441 break; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
442 case DSYNC_STATE_DONE: |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
443 changed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
444 ret = FALSE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
445 break; |
9639
ffda7bd92ebc
dsync: Skip syncing mailboxes whose uidvalidity/uidnext/highest-modseq hasn't changed.
Timo Sirainen <tss@iki.fi>
parents:
9638
diff
changeset
|
446 } |
15464
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
447 if (brain->debug) { |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
448 i_debug("brain %c: out state=%s changed=%d", |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
449 brain->master_brain ? 'M' : 'S', |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
450 dsync_state_names[brain->state], changed); |
af3b86a16ac3
dsync: Added debugging and rawlogging support.
Timo Sirainen <tss@iki.fi>
parents:
15355
diff
changeset
|
451 } |
9736
d9a96da46d4a
dsync: Lots of updates and fixes.
Timo Sirainen <tss@iki.fi>
parents:
9686
diff
changeset
|
452 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
453 *changed_r = changed; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
454 return brain->failed ? FALSE : ret; |
10371 | 455 } |
456 | |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
457 bool dsync_brain_run(struct dsync_brain *brain, bool *changed_r) |
9559 | 458 { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
459 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
|
460 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
461 *changed_r = FALSE; |
9559 | 462 |
15037
920756cd29b8
dsync: Renamed "slave" to "ibc" (= inter-brain communicator)
Timo Sirainen <tss@iki.fi>
parents:
14939
diff
changeset
|
463 if (dsync_ibc_has_failed(brain->ibc)) { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
464 brain->failed = TRUE; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
465 return FALSE; |
12028
6ef21adeb61d
dsync: If worker fails, abort earlier.
Timo Sirainen <tss@iki.fi>
parents:
11971
diff
changeset
|
466 } |
6ef21adeb61d
dsync: If worker fails, abort earlier.
Timo Sirainen <tss@iki.fi>
parents:
11971
diff
changeset
|
467 |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
468 T_BEGIN { |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
469 ret = dsync_brain_run_real(brain, changed_r); |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
470 } T_END; |
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
471 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
|
472 } |
12124
eb5adb193064
dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents:
12028
diff
changeset
|
473 |
15232
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
474 void dsync_brain_get_state(struct dsync_brain *brain, string_t *output) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
475 { |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
476 struct hash_iterate_context *iter; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
477 struct dsync_mailbox_node *node; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
478 const struct dsync_mailbox_state *new_state; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
479 struct dsync_mailbox_state *state; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
480 const uint8_t *guid_p; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
481 uint8_t *guid; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
482 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
483 /* update mailbox states */ |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
484 array_foreach(&brain->remote_mailbox_states, new_state) { |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
485 guid_p = new_state->mailbox_guid; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
486 state = hash_table_lookup(brain->mailbox_states, guid_p); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
487 if (state != NULL) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
488 *state = *new_state; |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
489 else |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
490 dsync_mailbox_state_add(brain, new_state); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
491 } |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
492 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
493 /* remove nonexistent mailboxes */ |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
494 iter = hash_table_iterate_init(brain->mailbox_states); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
495 while (hash_table_iterate(iter, brain->mailbox_states, &guid, &state)) { |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
496 node = dsync_mailbox_tree_lookup_guid(brain->local_mailbox_tree, |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
497 guid); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
498 if (node == NULL || |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
499 node->existence != DSYNC_MAILBOX_NODE_EXISTS) |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
500 hash_table_remove(brain->mailbox_states, guid); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
501 } |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
502 hash_table_iterate_deinit(&iter); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
503 |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
504 dsync_mailbox_states_export(brain->mailbox_states, output); |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
505 } |
6c850258002f
doveadm sync/backup: Added -s <state> parameter to do a fast stateful sync.
Timo Sirainen <tss@iki.fi>
parents:
15231
diff
changeset
|
506 |
16253
1a58d4bcb49c
dsync: -U parameter never updated replicator's full_sync state.
Timo Sirainen <tss@iki.fi>
parents:
16251
diff
changeset
|
507 enum dsync_brain_sync_type dsync_brain_get_sync_type(struct dsync_brain *brain) |
1a58d4bcb49c
dsync: -U parameter never updated replicator's full_sync state.
Timo Sirainen <tss@iki.fi>
parents:
16251
diff
changeset
|
508 { |
1a58d4bcb49c
dsync: -U parameter never updated replicator's full_sync state.
Timo Sirainen <tss@iki.fi>
parents:
16251
diff
changeset
|
509 return brain->sync_type; |
1a58d4bcb49c
dsync: -U parameter never updated replicator's full_sync state.
Timo Sirainen <tss@iki.fi>
parents:
16251
diff
changeset
|
510 } |
1a58d4bcb49c
dsync: -U parameter never updated replicator's full_sync state.
Timo Sirainen <tss@iki.fi>
parents:
16251
diff
changeset
|
511 |
12124
eb5adb193064
dsync: Don't crash/hang if syncing fails before ioloop is started.
Timo Sirainen <tss@iki.fi>
parents:
12028
diff
changeset
|
512 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
|
513 { |
14584
b2076acc3715
Initial version of dsync rewrite.
Timo Sirainen <tss@iki.fi>
parents:
14253
diff
changeset
|
514 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
|
515 } |
16454
5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
Timo Sirainen <tss@iki.fi>
parents:
16398
diff
changeset
|
516 |
5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
Timo Sirainen <tss@iki.fi>
parents:
16398
diff
changeset
|
517 bool dsync_brain_has_unexpected_changes(struct dsync_brain *brain) |
5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
Timo Sirainen <tss@iki.fi>
parents:
16398
diff
changeset
|
518 { |
5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
Timo Sirainen <tss@iki.fi>
parents:
16398
diff
changeset
|
519 return brain->changes_during_sync; |
5593d6129712
dsync: If unexpected changes happened during sync, log a warning and exit with code 2.
Timo Sirainen <tss@iki.fi>
parents:
16398
diff
changeset
|
520 } |