@@ -902,30 +902,63 @@ function helpers.start_tarantool3_cluster(g, cfg)
902902end
903903
904904function 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
930963end
931964
0 commit comments