<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi! Thankyou for review!<br class=""><br class=""><blockquote type="cite" class="">6 февр. 2019 г., в 13:48, Vladimir Davydov <<a href="mailto:vdavydov.dev@gmail.com" class="">vdavydov.dev@gmail.com</a>> написал(а):<br class=""><br class="">On Thu, Jan 31, 2019 at 04:25:26PM +0300, Serge Petrenko wrote:<br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">On replica subscribe master checks that replica's cluster id matches<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span> * responds with its current vclock.<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span> *<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span> * Tarantool 2.1.1 also sends its cluster id to<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span> * the replica, and replica has to check whether<br class="">+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span> * its and master's cluster ids match.<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> */<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>vclock_create(&remote_vclock_at_subscribe);<br class="">-<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>xrow_decode_vclock_xc(&row, &remote_vclock_at_subscribe);<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (applier->version_id >= version_id(2, 1, 1)) {<br class=""></blockquote><br class="">We already released 2.1.1. Should be 2.1.2? Anyway, do we really need to<br class="">check the version here? Let's unconditionally check replicaset_uuid in<br class="">case it's present. It shouldn't break anything, should it?<br class=""></blockquote><br class="">Yes, you’re right. I removed the if-else.<br class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>xrow_decode_subscribe_response_xc(&row,<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>  &cluster_id,<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>  &remote_vclock_at_subscribe);<br class="">+<span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>/*<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> * If master didn't send us its cluster id<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> * assume that it has done all the checks.<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> * In this case cluster_id will remain zero.<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> */<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (!tt_uuid_is_equal(&cluster_id, &uuid_nil) &&<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>    !tt_uuid_is_equal(&cluster_id, &REPLICASET_UUID)) {<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>tnt_raise(ClientError, ER_REPLICASET_UUID_MISMATCH,<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>  tt_uuid_str(&cluster_id),<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>  tt_uuid_str(&REPLICASET_UUID));<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>}<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>} else {<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>xrow_decode_vclock_xc(&row, &remote_vclock_at_subscribe);<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>}<br class=""><span class="Apple-tab-span" style="white-space:pre">      </span>}<br class=""><span class="Apple-tab-span" style="white-space:pre">      </span>/*<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span> * Tarantool < 1.6.7:<br class="">diff --git a/src/box/xrow.c b/src/box/xrow.c<br class="">index c4e3073be..84b3473b1 100644<br class="">--- a/src/box/xrow.c<br class="">+++ b/src/box/xrow.c<br class="">@@ -1170,6 +1170,32 @@ xrow_encode_vclock(struct xrow_header *row, const struct vclock *vclock)<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span>return 0;<br class="">}<br class=""><br class="">+int<br class="">+xrow_encode_subscribe_response(struct xrow_header *row,<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>       const struct tt_uuid *replicaset_uuid,<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>       const struct vclock *vclock)<br class="">+{<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>memset(row, 0, sizeof(*row));<br class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>size_t size = XROW_BODY_LEN_MAX + UUID_STR_LEN + mp_sizeof_vclock(vclock);<br class=""></blockquote><br class="">XROW_BODY_LEN_MAX? Why is it here?<br class=""><br class="">Let's estimate the response size with mp_sizeof please.<br class=""></blockquote><br class="">Ok, now I count it properly, sorry.<br class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>char *buf = (char *) region_alloc(&fiber()->gc, size);<br class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>if (buf == NULL) {<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>diag_set(OutOfMemory, size, "region_alloc", "buf");<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>return -1;<br class="">+<span class="Apple-tab-span" style="white-space:pre">    </span>}<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>char *data = buf;<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>data = mp_encode_map(data, 2);<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>data = mp_encode_uint(data, IPROTO_VCLOCK);<br class="">+<span class="Apple-tab-span" style="white-space:pre">   </span>data = mp_encode_vclock(data, vclock);<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>data = mp_encode_uint(data, IPROTO_CLUSTER_UUID);<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>data = xrow_encode_uuid(data, replicaset_uuid);<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>assert(data <= buf + size);<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>row->body[0].iov_base = buf;<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>row->body[0].iov_len = (data - buf);<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>row->bodycnt = 1;<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span>row->type = IPROTO_OK;<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span>return 0;<br class="">+}<br class="">diff --git a/test/replication/misc.test.lua b/test/replication/misc.test.lua<br class="">index 6a8af05c3..967c4e912 100644<br class="">--- a/test/replication/misc.test.lua<br class="">+++ b/test/replication/misc.test.lua<br class="">@@ -243,3 +243,29 @@ test_run:cmd("stop server replica")<br class="">test_run:cmd("cleanup server replica")<br class="">test_run:cmd("delete server replica")<br class="">test_run:cleanup_cluster()<br class="">+<br class="">+--<br class="">+-- gh-3704 move cluster id check to replica<br class="">+--<br class="">+test_run:cmd("create server replica with rpl_master=default, script='replication/replica.lua'")<br class="">+box.schema.user.grant("guest", "replication")<br class="">+test_run:cmd("start server replica")<br class="">+test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class="">+box.info.replication[2].downstream ~= nil<br class="">+-- make master generate another cluster uuid and check that<br class="">+-- replica doesn't connect<br class="">+test_run:cmd("stop server replica")<br class="">+test_run:cmd("restart server default with cleanup=1")<br class="">+box.schema.user.grant("guest", "replication")<br class="">+test_run:cmd("start server replica")<br class="">+-- master believes replica is in cluster, but their UUIDS differ.<br class="">+replica_uuid = test_run:eval("replica", "box.info.uuid")[1]<br class="">+_ = box.space._cluster:insert{2, replica_uuid}<br class=""></blockquote><br class="">You could instead call box.schema._replace{'cluster_id', new_uuid}.<br class="">Not sure if the test would be shorter if you'd done that though.<br class=""></blockquote><br class="">Done, the test is a bit shorter, indeed.<br class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">+test_run:cmd("restart server replica")<br class="">+test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class="">+box.info.replication[2].downstream ~= nil<br class="">+<br class="">+test_run:cmd("restart server default with cleanup=1")<br class="">+test_run:cmd("stop server replica")<br class="">+test_run:cmd("cleanup server replica")<br class="">+test_run:cmd("delete server replica»)<br class=""></blockquote></blockquote><br class="">Here’s an incremental diff. The fixes are on the branch.<br class=""><br class=""><span class="">diff --git a/src/box/<a href="http://applier.cc" class="">applier.cc</a> b/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class=""></span><span class="">index 704ed6c5b..045c69102 100644<br class=""></span><span class="">--- a/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class=""></span><span class="">+++ b/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class=""></span><span class="">@@ -415,23 +415,19 @@ applier_subscribe(struct applier *applier)<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">           </span> * its and master's cluster ids match.<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">          </span> */<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">             </span>vclock_create(&remote_vclock_at_subscribe);<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">           </span>if (applier->version_id >= version_id(2, 1, 1)) {<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                   </span>xrow_decode_subscribe_response_xc(&row,<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                                                       </span>  &cluster_id,<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                                                      </span>  &remote_vclock_at_subscribe);<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                     </span>/*<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                        </span> * If master didn't send us its cluster id<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                   </span> * assume that it has done all the checks.<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                   </span> * In this case cluster_id will remain zero.<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                 </span> */<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                  </span>if (!tt_uuid_is_equal(&cluster_id, &uuid_nil) &&<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                  </span>    !tt_uuid_is_equal(&cluster_id, &REPLICASET_UUID)) {<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                            </span>tnt_raise(ClientError, ER_REPLICASET_UUID_MISMATCH,<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                                       </span>  tt_uuid_str(&cluster_id),<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                                 </span>  tt_uuid_str(&REPLICASET_UUID));<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                   </span>}<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">         </span>} else {<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">                  </span>xrow_decode_vclock_xc(&row, &remote_vclock_at_subscribe);<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">         </span>xrow_decode_subscribe_response_xc(&row,<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                                               </span>  &cluster_id,<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                                              </span>  &remote_vclock_at_subscribe);<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">             </span>/*<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                </span> * If master didn't send us its cluster id<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">           </span> * assume that it has done all the checks.<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">           </span> * In this case cluster_id will remain zero.<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">         </span> */<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">          </span>if (!tt_uuid_is_equal(&cluster_id, &uuid_nil) &&<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">          </span>    !tt_uuid_is_equal(&cluster_id, &REPLICASET_UUID)) {<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                    </span>tnt_raise(ClientError, ER_REPLICASET_UUID_MISMATCH,<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                               </span>  tt_uuid_str(&cluster_id),<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">                         </span>  tt_uuid_str(&REPLICASET_UUID));<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">              </span>}<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">    </span>}<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">    </span>/*<br class=""></span><span class="">diff --git a/src/box/xrow.c b/src/box/xrow.c<br class=""></span><span class="">index 84b3473b1..ba3671fed 100644<br class=""></span><span class="">--- a/src/box/xrow.c<br class=""></span><span class="">+++ b/src/box/xrow.c<br class=""></span><span class="">@@ -1176,7 +1176,10 @@ xrow_encode_subscribe_response(struct xrow_header *row,<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">                   </span>       const struct vclock *vclock)<br class=""></span><span class=""> {<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">      </span>memset(row, 0, sizeof(*row));<br class=""></span><span class="">-<span class="Apple-tab-span" style="white-space:pre">     </span>size_t size = XROW_BODY_LEN_MAX + UUID_STR_LEN + mp_sizeof_vclock(vclock);<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">        </span>size_t size = mp_sizeof_map(2) +<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">          </span>      mp_sizeof_uint(IPROTO_VCLOCK) + mp_sizeof_vclock(vclock) +<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">              </span>      mp_sizeof_uint(IPROTO_CLUSTER_UUID) +<br class=""></span><span class="">+<span class="Apple-tab-span" style="white-space:pre">           </span>      mp_sizeof_str(UUID_STR_LEN);<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">       </span>char *buf = (char *) region_alloc(&fiber()->gc, size);<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>if (buf == NULL) {<br class=""></span><span class=""> <span class="Apple-tab-span" style="white-space:pre">           </span>diag_set(OutOfMemory, size, "region_alloc", "buf");<br class=""></span><span class="">diff --git a/test/replication/misc.result b/test/replication/misc.result<br class=""></span><span class="">index 1f7e78a2f..2401ac5cf 100644<br class=""></span><span class="">--- a/test/replication/misc.result<br class=""></span><span class="">+++ b/test/replication/misc.result<br class=""></span><span class="">@@ -622,47 +622,32 @@ test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class=""></span><span class=""> ---<br class=""></span><span class=""> - null<br class=""></span><span class=""> ...<br class=""></span><span class="">-box.info.replication[2].downstream ~= nil<br class=""></span><span class="">+box.info.replication[2].downstream.status<br class=""></span><span class=""> ---<br class=""></span><span class="">-- true<br class=""></span><span class="">+- follow<br class=""></span><span class=""> ...<br class=""></span><span class="">--- make master generate another cluster uuid and check that<br class=""></span><span class="">--- replica doesn't connect<br class=""></span><span class="">+-- change master's cluster uuid and check that replica doesn't connect.<br class=""></span><span class=""> test_run:cmd("stop server replica")<br class=""></span><span class=""> ---<br class=""></span><span class=""> - true<br class=""></span><span class=""> ...<br class=""></span><span class="">-test_run:cmd("restart server default with cleanup=1")<br class=""></span><span class="">-box.schema.user.grant("guest", "replication")<br class=""></span><span class="">+_ = box.space._schema:replace{'cluster', tostring(uuid.new())}<br class=""></span><span class=""> ---<br class=""></span><span class=""> ...<br class=""></span><span class="">+-- master believes replica is in cluster, but their cluster UUIDS differ.<br class=""></span><span class=""> test_run:cmd("start server replica")<br class=""></span><span class=""> ---<br class=""></span><span class=""> - true<br class=""></span><span class=""> ...<br class=""></span><span class="">--- master believes replica is in cluster, but their UUIDS differ.<br class=""></span><span class="">-replica_uuid = test_run:eval("replica", "box.info.uuid")[1]<br class=""></span><span class="">----<br class=""></span><span class="">-...<br class=""></span><span class="">-_ = box.space._cluster:insert{2, replica_uuid}<br class=""></span><span class="">----<br class=""></span><span class="">-...<br class=""></span><span class="">-test_run:cmd("restart server replica")<br class=""></span><span class="">----<br class=""></span><span class="">-- true<br class=""></span><span class="">-...<br class=""></span><span class="">-test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class=""></span><span class="">+test_run:wait_log("replica", "REPLICASET_UUID_MISMATCH", nil, 1.0)<br class=""></span><span class=""> ---<br class=""></span><span class=""> - REPLICASET_UUID_MISMATCH<br class=""></span><span class=""> ...<br class=""></span><span class="">-box.info.replication[2].downstream ~= nil<br class=""></span><span class="">+box.info.replication[2].downstream.status<br class=""></span><span class=""> ---<br class=""></span><span class="">-- false<br class=""></span><span class="">+- stopped<br class=""></span><span class=""> ...<br class=""></span><span class=""> test_run:cmd("restart server default with cleanup=1")<br class=""></span><span class="">----<br class=""></span><span class="">-- true<br class=""></span><span class="">-...<br class=""></span><span class=""> test_run:cmd("stop server replica")<br class=""></span><span class=""> ---<br class=""></span><span class=""> - true<br class=""></span><span class="">diff --git a/test/replication/misc.test.lua b/test/replication/misc.test.lua<br class=""></span><span class="">index 967c4e912..a1ddf75a8 100644<br class=""></span><span class="">--- a/test/replication/misc.test.lua<br class=""></span><span class="">+++ b/test/replication/misc.test.lua<br class=""></span><span class="">@@ -251,19 +251,14 @@ test_run:cmd("create server replica with rpl_master=default, script='replication<br class=""></span><span class=""> box.schema.user.grant("guest", "replication")<br class=""></span><span class=""> test_run:cmd("start server replica")<br class=""></span><span class=""> test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class=""></span><span class="">-box.info.replication[2].downstream ~= nil<br class=""></span><span class="">--- make master generate another cluster uuid and check that<br class=""></span><span class="">--- replica doesn't connect<br class=""></span><span class="">+box.info.replication[2].downstream.status<br class=""></span><span class="">+-- change master's cluster uuid and check that replica doesn't connect.<br class=""></span><span class=""> test_run:cmd("stop server replica")<br class=""></span><span class="">-test_run:cmd("restart server default with cleanup=1")<br class=""></span><span class="">-box.schema.user.grant("guest", "replication")<br class=""></span><span class="">+_ = box.space._schema:replace{'cluster', tostring(uuid.new())}<br class=""></span><span class="">+-- master believes replica is in cluster, but their cluster UUIDS differ.<br class=""></span><span class=""> test_run:cmd("start server replica")<br class=""></span><span class="">--- master believes replica is in cluster, but their UUIDS differ.<br class=""></span><span class="">-replica_uuid = test_run:eval("replica", "box.info.uuid")[1]<br class=""></span><span class="">-_ = box.space._cluster:insert{2, replica_uuid}<br class=""></span><span class="">-test_run:cmd("restart server replica")<br class=""></span><span class="">-test_run:grep_log("replica", "REPLICASET_UUID_MISMATCH")<br class=""></span><span class="">-box.info.replication[2].downstream ~= nil<br class=""></span><span class="">+test_run:wait_log("replica", "REPLICASET_UUID_MISMATCH", nil, 1.0)<br class=""></span><span class="">+box.info.replication[2].downstream.status<br class=""></span><span class=""> <br class=""></span><span class=""> test_run:cmd("restart server default with cleanup=1")<br class=""></span><span class=""> test_run:cmd("stop server replica")<br class=""></span><span class=""><br class=""></span></body></html>