diff --git a/src/box/box.h b/src/box/box.h index baddcf73f00729ad0d9f2ffde7380b17c76ba033..9dfb3fd2a4318a2f201e37672e39ac48f648d74b 100644 --- a/src/box/box.h +++ b/src/box/box.h @@ -174,6 +174,7 @@ void box_set_vinyl_max_tuple_size(void); void box_set_vinyl_cache(void); void box_set_vinyl_timeout(void); void box_set_replication_timeout(void); +void box_set_replication_connect_timeout(void); void box_set_replication_connect_quorum(void); extern "C" { diff --git a/src/box/lua/cfg.cc b/src/box/lua/cfg.cc index 5e88ca348910abca78b03c9e2a57eeeb331cc7f3..0ca150877e3a442c06d4f3c2936e7167a563dc5e 100644 --- a/src/box/lua/cfg.cc +++ b/src/box/lua/cfg.cc @@ -240,6 +240,17 @@ lbox_cfg_set_replication_timeout(struct lua_State *L) return 0; } +static int +lbox_cfg_set_replication_connect_timeout(struct lua_State *L) +{ + try { + box_set_replication_connect_timeout(); + } catch (Exception *) { + luaT_error(L); + } + return 0; +} + static int lbox_cfg_set_replication_connect_quorum(struct lua_State *L) { @@ -273,8 +284,8 @@ box_lua_cfg_init(struct lua_State *L) {"cfg_set_vinyl_cache", lbox_cfg_set_vinyl_cache}, {"cfg_set_vinyl_timeout", lbox_cfg_set_vinyl_timeout}, {"cfg_set_replication_timeout", lbox_cfg_set_replication_timeout}, - {"cfg_set_replication_connect_quorum", - lbox_cfg_set_replication_connect_quorum}, + {"cfg_set_replication_connect_timeout", lbox_cfg_set_replication_connect_timeout}, + {"cfg_set_replication_connect_quorum", lbox_cfg_set_replication_connect_quorum}, {NULL, NULL} }; diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index a9ccb5caec1f79da3bfee801e2378c0301c9b855..1c413ec6ad7f6d98bc027746c2a0153723692e08 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -182,6 +182,7 @@ local dynamic_cfg = { end, force_recovery = function() end, replication_timeout = private.cfg_set_replication_timeout, + replication_connect_timeout = private.cfg_set_replication_connect_timeout, replication_connect_quorum = private.cfg_set_replication_connect_quorum, } @@ -190,6 +191,7 @@ local dynamic_cfg_skip_at_load = { listen = true, replication = true, replication_timeout = true, + replication_connect_timeout = true, replication_connect_quorum = true, wal_dir_rescan_delay = true, custom_proc_title = true, diff --git a/test/replication/misc.result b/test/replication/misc.result index 97a7855c741d682b75cf088f18c2022895468672..ff0dbf5490da0ed3830a5a178ea6f502a3b37cbb 100644 --- a/test/replication/misc.result +++ b/test/replication/misc.result @@ -12,7 +12,10 @@ box.schema.user.grant('guest', 'replication') replication_timeout = box.cfg.replication_timeout --- ... -box.cfg{replication_timeout=0.05, replication={}} +replication_connect_timeout = box.cfg.replication_connect_timeout +--- +... +box.cfg{replication_timeout=0.05, replication_connect_timeout=0.05, replication={}} --- ... box.cfg{replication = {'127.0.0.1:12345', box.cfg.listen}} @@ -20,7 +23,7 @@ box.cfg{replication = {'127.0.0.1:12345', box.cfg.listen}} - error: 'Incorrect value for option ''replication'': failed to connect to one or more replicas' ... -box.cfg{replication_timeout = replication_timeout} +box.cfg{replication_timeout = replication_timeout, replication_connect_timeout = replication_connect_timeout} --- ... -- gh-3111 - Allow to rebootstrap a replica from a read-only master @@ -79,7 +82,7 @@ test_run:cmd("switch autobootstrap1") test_run = require('test_run').new() --- ... -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} --- ... test_run:cmd("switch autobootstrap2") @@ -89,7 +92,7 @@ test_run:cmd("switch autobootstrap2") test_run = require('test_run').new() --- ... -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} --- ... test_run:cmd("switch autobootstrap3") @@ -102,7 +105,7 @@ test_run = require('test_run').new() fiber=require('fiber') --- ... -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} --- ... _ = box.schema.space.create('test_timeout'):create_index('pk') diff --git a/test/replication/misc.test.lua b/test/replication/misc.test.lua index 85057976981552447f3c081752c113012d463fad..c05e521659b5788e59b0c893bebd75610fdb3e26 100644 --- a/test/replication/misc.test.lua +++ b/test/replication/misc.test.lua @@ -6,9 +6,10 @@ box.schema.user.grant('guest', 'replication') -- gh-2991 - Tarantool asserts on box.cfg.replication update if one of -- servers is dead replication_timeout = box.cfg.replication_timeout -box.cfg{replication_timeout=0.05, replication={}} +replication_connect_timeout = box.cfg.replication_connect_timeout +box.cfg{replication_timeout=0.05, replication_connect_timeout=0.05, replication={}} box.cfg{replication = {'127.0.0.1:12345', box.cfg.listen}} -box.cfg{replication_timeout = replication_timeout} +box.cfg{replication_timeout = replication_timeout, replication_connect_timeout = replication_connect_timeout} -- gh-3111 - Allow to rebootstrap a replica from a read-only master replica_uuid = uuid.new() @@ -30,14 +31,14 @@ test_run:create_cluster(SERVERS) test_run:wait_fullmesh(SERVERS) test_run:cmd("switch autobootstrap1") test_run = require('test_run').new() -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} test_run:cmd("switch autobootstrap2") test_run = require('test_run').new() -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} test_run:cmd("switch autobootstrap3") test_run = require('test_run').new() fiber=require('fiber') -box.cfg{replication_timeout = 0.01} +box.cfg{replication_timeout = 0.01, replication_connect_timeout=0.01} _ = box.schema.space.create('test_timeout'):create_index('pk') test_run:cmd("setopt delimiter ';'") function test_timeout()