Skip to content

Commit 9db8696

Browse files
test: retry cluster init if unhealthy
Sometimes cluster fails to bootstrap in tests. The reasons are yet unknown and likely unrelated to crud or maybe even crud tests setup. After this patch, in case cluster preparation had failed for a test, we retry to create a cluster up t three times. Part of #432
1 parent 99315a5 commit 9db8696

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

test/helper.lua

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -902,30 +902,63 @@ function helpers.start_tarantool3_cluster(g, cfg)
902902
end
903903

904904
function helpers.start_cluster(g, cartridge_cfg, vshard_cfg, tarantool3_cluster_cfg, opts)
905-
checks('table', '?table', '?table', '?table', {wait_crud_is_ready = '?boolean'})
905+
checks('table', '?table', '?table', '?table', {
906+
wait_crud_is_ready = '?boolean',
907+
backend = '?string',
908+
retries = '?number',
909+
})
906910

907911
opts = opts or {}
912+
908913
if opts.wait_crud_is_ready == nil then
909914
opts.wait_crud_is_ready = true
910915
end
911916

912-
if g.params.backend == helpers.backend.CARTRIDGE then
913-
helpers.skip_cartridge_unsupported()
914-
915-
helpers.start_cartridge_cluster(g, cartridge_cfg)
916-
elseif g.params.backend == helpers.backend.VSHARD then
917-
helpers.start_vshard_cluster(g, vshard_cfg)
918-
elseif g.params.backend == helpers.backend.CONFIG then
919-
helpers.skip_if_tarantool3_crud_roles_unsupported()
917+
if opts.backend == nil then
918+
opts.backend = g.params.backend
919+
end
920+
assert(opts.backend ~= nil, 'Please, provide backend')
920921

921-
helpers.start_tarantool3_cluster(g, tarantool3_cluster_cfg)
922+
local DEFAULT_RETRIES = 3
923+
if opts.retries == nil then
924+
opts.retries = DEFAULT_RETRIES
922925
end
923926

924-
g.router = g.cluster:server('router')
925-
assert(g.router ~= nil, 'router found')
927+
local current_attempt = 0
928+
while true do
929+
current_attempt = current_attempt + 1
930+
931+
if opts.backend == helpers.backend.CARTRIDGE then
932+
helpers.skip_cartridge_unsupported()
933+
934+
helpers.start_cartridge_cluster(g, cartridge_cfg)
935+
elseif opts.backend == helpers.backend.VSHARD then
936+
helpers.start_vshard_cluster(g, vshard_cfg)
937+
elseif opts.backend == helpers.backend.CONFIG then
938+
helpers.skip_if_tarantool3_crud_roles_unsupported()
926939

927-
if opts.wait_crud_is_ready then
928-
helpers.wait_crud_is_ready_on_cluster(g)
940+
helpers.start_tarantool3_cluster(g, tarantool3_cluster_cfg)
941+
end
942+
943+
g.router = g.cluster:server('router')
944+
assert(g.router ~= nil, 'router found')
945+
946+
local ok, err = false, nil -- luacheck: ignore
947+
if opts.wait_crud_is_ready then
948+
ok, err = pcall(helpers.wait_crud_is_ready_on_cluster, g, {backend = opts.backend})
949+
else
950+
ok = true
951+
end
952+
953+
if ok then
954+
break
955+
end
956+
957+
helpers.stop_cluster(g.cluster, opts.backend)
958+
959+
if current_attempt == opts.retries then
960+
error(err)
961+
end
929962
end
930963
end
931964

test/integration/role_test.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ end)
1313
g.before_each(function(cg)
1414
-- Tests are rather dangerous and may break the cluster,
1515
-- so it's safer to restart for each case.
16-
helpers.start_tarantool3_cluster(cg, cg.template_cfg)
17-
cg.router = cg.cluster:server('router')
18-
19-
helpers.wait_crud_is_ready_on_cluster(cg, {backend = helpers.backend.CONFIG})
16+
helpers.start_cluster(cg, nil, nil, cg.template_cfg, {
17+
backend = helpers.backend.CONFIG,
18+
})
2019
end)
2120

2221
g.after_each(function(cg)

test/unit/not_initialized_test.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ pgroup.before_all(function(g)
8383
cartridge_cfg_template,
8484
vshard_cfg_template,
8585
tarantool3_cluster_cfg_template,
86-
{wait_crud_is_ready = false}
86+
{wait_crud_is_ready = false, retries = 1}
8787
)
8888

8989
g.router = g.cluster:server('router')

0 commit comments

Comments
 (0)