diff --git a/src/box/replication.cc b/src/box/replication.cc index f15e51f4dab371e7599a1e9e55b58629355e7c60..81f19aa0762f47d64e9be4941e0f2f652cb19b79 100644 --- a/src/box/replication.cc +++ b/src/box/replication.cc @@ -802,7 +802,8 @@ replicaset_follow(void) if (replica->applier != NULL) applier_resume(replica->applier); } - rlist_foreach_entry(replica, &replicaset.anon, in_anon) { + struct replica *tmp; + rlist_foreach_entry_safe(replica, &replicaset.anon, in_anon, tmp) { /* Restart appliers that failed to connect. */ applier_start(replica->applier); } diff --git a/test/replication/box_set_replication_stress.result b/test/replication/box_set_replication_stress.result new file mode 100644 index 0000000000000000000000000000000000000000..e683c06437dda6125b2208aec8c2c622c9fb12ec --- /dev/null +++ b/test/replication/box_set_replication_stress.result @@ -0,0 +1,38 @@ +-- test-run result file version 2 +test_run = require('test_run').new() + | --- + | ... +SERVERS = {'master_quorum1', 'master_quorum2'} + | --- + | ... + +-- Deploy a cluster. +test_run:create_cluster(SERVERS) + | --- + | ... +test_run:wait_fullmesh(SERVERS) + | --- + | ... + +test_run:cmd("switch master_quorum1") + | --- + | - true + | ... +repl = box.cfg.replication + | --- + | ... +for i = 1, 1000 do \ + box.cfg{replication = ""} \ + box.cfg{replication = repl} \ +end + | --- + | ... +test_run:cmd("switch default") + | --- + | - true + | ... + +-- Cleanup. +test_run:drop_cluster(SERVERS) + | --- + | ... diff --git a/test/replication/box_set_replication_stress.test.lua b/test/replication/box_set_replication_stress.test.lua new file mode 100644 index 0000000000000000000000000000000000000000..407e91e0f1e7067493148ef028f4bff2463340b3 --- /dev/null +++ b/test/replication/box_set_replication_stress.test.lua @@ -0,0 +1,17 @@ +test_run = require('test_run').new() +SERVERS = {'master_quorum1', 'master_quorum2'} + +-- Deploy a cluster. +test_run:create_cluster(SERVERS) +test_run:wait_fullmesh(SERVERS) + +test_run:cmd("switch master_quorum1") +repl = box.cfg.replication +for i = 1, 1000 do \ + box.cfg{replication = ""} \ + box.cfg{replication = repl} \ +end +test_run:cmd("switch default") + +-- Cleanup. +test_run:drop_cluster(SERVERS)