[Tarantool-patches] [PATCH 1/3 v2] replication: test clear_synchro_queue() function
Serge Petrenko
sergepetrenko at tarantool.org
Fri Nov 13 16:12:49 MSK 2020
12.11.2020 12:10, sergeyb at tarantool.org пишет:
> From: Sergey Bronnikov <sergeyb at tarantool.org>
>
> Part of #5055
> Part of #4849
Hi! Thanks for the patch!
Please see 2 comments below.
> ---
> test/replication/qsync_basic.result | 136 ++++++++++++++++++++++++++
> test/replication/qsync_basic.test.lua | 50 ++++++++++
> 2 files changed, 186 insertions(+)
>
> diff --git a/test/replication/qsync_basic.result b/test/replication/qsync_basic.result
> index bd3c3cce1..e848e305a 100644
> --- a/test/replication/qsync_basic.result
> +++ b/test/replication/qsync_basic.result
> @@ -32,6 +32,13 @@ s2.is_sync
> | - false
> | ...
>
> +--
> +-- gh-4849: clear synchro queue with unconfigured box
> +--
What do you mean by `unconfigured box`?
box.cfg is called when the default instance (master.lua) is started, before
the first test line.
If you really want to test `box.ctl.clear_synchro_queue` before box.cfg,
you need to do it in `app-tap/cfg.test.lua`. It has all the tests for
`box.ctl` options.
> +box.ctl.clear_synchro_queue()
> + | ---
> + | ...
> +
> -- Net.box takes sync into account.
> box.schema.user.grant('guest', 'super')
> | ---
> @@ -637,6 +644,135 @@ box.space.sync:count()
> | - 0
> | ...
>
> +--
> +-- gh-4849: clear synchro queue on a master
> +--
> +test_run:switch('default')
> + | ---
> + | - true
> + | ...
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout = 1000}
> + | ---
> + | ...
> +ok, err = nil
> + | ---
> + | ...
> +f = fiber.create(function() \
> + ok, err = pcall(box.space.sync.insert, box.space.sync, {10}) \
> +end)
> + | ---
> + | ...
> +f:status()
> + | ---
> + | - suspended
> + | ...
> +test_run:switch('replica')
> + | ---
> + | - true
> + | ...
> +test_run:wait_cond(function() return box.space.sync:get{10} ~= nil end)
> + | ---
> + | - true
> + | ...
> +test_run:switch('default')
> + | ---
> + | - true
> + | ...
> +box.cfg{replication_synchro_timeout = 0.1}
> + | ---
> + | ...
> +box.ctl.clear_synchro_queue()
> + | ---
> + | ...
> +test_run:switch('replica')
> + | ---
> + | - true
> + | ...
> +test_run:wait_cond(function() return box.space.sync:get{10} == nil end)
> + | ---
> + | - true
> + | ...
> +test_run:switch('default')
> + | ---
> + | - true
> + | ...
> +test_run:wait_cond(function() return f:status() == 'dead' end)
> + | ---
> + | - true
> + | ...
> +ok, err
> + | ---
> + | - false
> + | - Quorum collection for a synchronous transaction is timed out
> + | ...
> +test_run:wait_cond(function() return box.space.sync:get{10} == nil end)
> + | ---
> + | - true
> + | ...
> +
> +--
> +-- gh-4849: clear synchro queue on a replica, make sure no crashes
> +--
> +test_run:switch('default')
> + | ---
> + | - true
> + | ...
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout = 1000}
> + | ---
> + | ...
> +ok, err = nil
> + | ---
> + | ...
> +f = fiber.create(function() \
> + ok, err = pcall(box.space.sync.insert, box.space.sync, {9}) \
> +end)
> + | ---
> + | ...
> +f.status()
> + | ---
> + | - running
> + | ...
typo: should be `f:status()`
> +test_run:wait_cond(function() return box.space.sync:get{9} ~= nil end)
> + | ---
> + | - true
> + | ...
> +test_run:switch('replica')
> + | ---
> + | - true
> + | ...
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout=0.01}
> + | ---
> + | ...
> +box.ctl.clear_synchro_queue()
> + | ---
> + | ...
> +test_run:wait_cond(function() return box.space.sync:get{9} == nil end)
> + | ---
> + | - true
> + | ...
> +test_run:switch('default')
> + | ---
> + | - true
> + | ...
> +box.cfg{replication_synchro_timeout=0.01}
> + | ---
> + | ...
> +test_run:wait_cond(function() return f:status() == 'dead' end)
> + | ---
> + | - true
> + | ...
> +ok, err
> + | ---
> + | - false
> + | - Quorum collection for a synchronous transaction is timed out
> + | ...
> +test_run:wait_cond(function() return box.space.sync:get{9} == nil end)
> + | ---
> + | - true
> + | ...
> +
> +-- Note: cluster may be in a broken state here due to nature of previous test.
> +
> -- Cleanup.
> test_run:cmd('switch default')
> | ---
> diff --git a/test/replication/qsync_basic.test.lua b/test/replication/qsync_basic.test.lua
> index 94235547d..523dfa779 100644
> --- a/test/replication/qsync_basic.test.lua
> +++ b/test/replication/qsync_basic.test.lua
> @@ -13,6 +13,11 @@ s1:select{}
> s2 = box.schema.create_space('test2')
> s2.is_sync
>
> +--
> +-- gh-4849: clear synchro queue with unconfigured box
> +--
> +box.ctl.clear_synchro_queue()
> +
> -- Net.box takes sync into account.
> box.schema.user.grant('guest', 'super')
> netbox = require('net.box')
> @@ -248,6 +253,51 @@ for i = 1, 100 do box.space.sync:delete{i} end
> test_run:cmd('switch replica')
> box.space.sync:count()
>
> +--
> +-- gh-4849: clear synchro queue on a master
> +--
> +test_run:switch('default')
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout = 1000}
> +ok, err = nil
> +f = fiber.create(function() \
> + ok, err = pcall(box.space.sync.insert, box.space.sync, {10}) \
> +end)
> +f:status()
> +test_run:switch('replica')
> +test_run:wait_cond(function() return box.space.sync:get{10} ~= nil end)
> +test_run:switch('default')
> +box.cfg{replication_synchro_timeout = 0.1}
> +box.ctl.clear_synchro_queue()
> +test_run:switch('replica')
> +test_run:wait_cond(function() return box.space.sync:get{10} == nil end)
> +test_run:switch('default')
> +test_run:wait_cond(function() return f:status() == 'dead' end)
> +ok, err
> +test_run:wait_cond(function() return box.space.sync:get{10} == nil end)
> +
> +--
> +-- gh-4849: clear synchro queue on a replica, make sure no crashes
> +--
> +test_run:switch('default')
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout = 1000}
> +ok, err = nil
> +f = fiber.create(function() \
> + ok, err = pcall(box.space.sync.insert, box.space.sync, {9}) \
> +end)
> +f.status()
> +test_run:wait_cond(function() return box.space.sync:get{9} ~= nil end)
> +test_run:switch('replica')
> +box.cfg{replication_synchro_quorum = 3, replication_synchro_timeout=0.01}
> +box.ctl.clear_synchro_queue()
> +test_run:wait_cond(function() return box.space.sync:get{9} == nil end)
> +test_run:switch('default')
> +box.cfg{replication_synchro_timeout=0.01}
> +test_run:wait_cond(function() return f:status() == 'dead' end)
> +ok, err
> +test_run:wait_cond(function() return box.space.sync:get{9} == nil end)
> +
> +-- Note: cluster may be in a broken state here due to nature of previous test.
> +
> -- Cleanup.
> test_run:cmd('switch default')
>
--
Serge Petrenko
More information about the Tarantool-patches
mailing list