[PATCH] replication: fix bug with zero replication_connect_quorum

Vladimir Davydov vdavydov.dev at gmail.com
Mon Apr 9 11:41:13 MSK 2018


v2 tag missing, changes since v1 missing

Please read and follow

  https://tarantool.io/en/doc/1.9/dev_guide/developer_guidelines.html#how-to-submit-a-patch-for-review

On Mon, Apr 09, 2018 at 11:04:04AM +0300, Konstantin Belyavskiy wrote:
> diff --git a/test/replication/quorum.test.lua b/test/replication/quorum.test.lua
> index 856006843..d92ed23a6 100644
> --- a/test/replication/quorum.test.lua
> +++ b/test/replication/quorum.test.lua
> @@ -97,3 +97,28 @@ box.info.replication[4].upstream.status
>  -- Cleanup.
>  test_run:cmd('switch default')
>  test_run:drop_cluster(SERVERS)
> +
> +--
> +-- gh-3278: test different replication and replication_connect_quorum configs.
> +--
> +
> +-- For next test try to find port with no tarantool running on it.
> +remote = require('net.box')
> +attempt = 0
> +port = 32768 + math.random(32768)
> +test_run:cmd("setopt delimiter ';'")
> +while attempt < 10 do
> +    s = remote.connect('localhost:'..port)
> +    if s.state ~= 'error' then
> +        port = 32768 + math.random(32768)
> +        attempt = attempt + 1
> +    else
> +        break
> +    end
> +end;
> +test_run:cmd("setopt delimiter ''");
> +test_run:cmd("create server replica with rpl_master=default, script='replication/replica_params.lua'")
> +test_run:cmd("start server replica with args='0 0 "..port.."'")
> +test_run:cmd("restart server replica with args='0 1 "..port.."'")
> +test_run:cmd('switch replica')
> +box.info.status -- running (old: orphan)
> diff --git a/test/replication/replica_params.lua b/test/replication/replica_params.lua
> new file mode 100644
> index 000000000..4f8ee5d0a
> --- /dev/null
> +++ b/test/replication/replica_params.lua
> @@ -0,0 +1,23 @@
> +#!/usr/bin/env tarantool
> +
> +local quorum = tonumber(arg[1])
> +local n_replics = tonumber(arg[2])
> +local addr = '127.0.0.1:'..arg[3]
> +listen = os.getenv("LISTEN")
> +-- Test different replicaset configurations:
> +-- First, when the only address in the replicaset is itself.
> +repl = {}
> +-- To test situation with second master unavailable, add
> +-- second address (should be empty).
> +if n_replics == 1 then repl = { addr } end
> +if n_replics == 2 then repl = { listen, addr } end
> +
> +box.cfg({
> +    listen              = listen,
> +    replication         = repl,
> +    memtx_memory        = 100 * 1024 * 1024,
> +    replication_connect_quorum = quorum,
> +    replication_connect_timeout = 0.1,
> +})
> +
> +require('console').listen(os.getenv('ADMIN'))

Why all this complexity? Why don't you just use the test case from
my previous email? It's much more straightforward and easier to
understand. All you need to do is create replica_no_quorum.lua that
has replication_connect_quorum=0 and replication_connect_timeout=0.1
and then add the following test case to replication/quorum.test.lua:

box.schema.user.grant('guest', 'replication')
test_run:cmd("create server replica with rpl_master=default, script='replication/replica_no_quorum.lua'")
test_run:cmd("start server replica")
test_run:cmd("switch replica")
box.info.status -- running
test_run:cmd("switch default")
test_run:cmd("stop server replica")
listen = box.cfg.listen
box.cfg{listen = ''}
test_run:cmd("start server replica")
test_run:cmd("switch replica")
box.info.status -- running
test_run:cmd("switch default")
test_run:cmd("stop server replica")
test_run:cmd("cleanup server replica")
box.schema.user.revoke('guest', 'replication')
box.cfg{listen = listen}



More information about the Tarantool-patches mailing list