diff --git a/test/storage-luatest/auto_master_2_2_2_test.lua b/test/storage-luatest/auto_master_2_2_2_test.lua index 3000e58a..bae49924 100644 --- a/test/storage-luatest/auto_master_2_2_2_test.lua +++ b/test/storage-luatest/auto_master_2_2_2_test.lua @@ -287,3 +287,37 @@ test_group.test_noactivity_timeout_for_auto_master = function(g) _G.bucket_gc_wait() end, {g.replica_1_a:replicaset_uuid(), bid1, bid2}) end + +test_group.test_conn_manager_connect_self = function(g) + vtest.cluster_rebalancer_enable(g) + t.assert_equals(vtest.cluster_rebalancer_find(g), 'replica_1_a') + + g.replica_1_a:exec(function(uuid) + -- Create connections using rebalancer + local rebalancer = ivshard.storage.internal.rebalancer_service + ivtest.service_wait_for_new_ok(rebalancer, {on_yield = function() + ivshard.storage.internal.rebalancer_fiber:wakeup() + end}) + + -- Assert, that connection to self is created. + local replicaset = ivshard.storage.internal.replicasets[uuid] + ilt.assert_not_equals(replicaset.master, nil) + + local old_timeout = ivconst.REPLICA_NOACTIVITY_TIMEOUT + ivconst.REPLICA_NOACTIVITY_TIMEOUT = 0.01 + ifiber.sleep(ivconst.REPLICA_NOACTIVITY_TIMEOUT) + local conn_manager = ivshard.storage.internal.conn_manager_service + ivtest.service_wait_for_new_ok(conn_manager, {on_yield = function() + ivshard.storage.internal.conn_manager_fiber:wakeup() + end}) + ilt.assert_equals(replicaset.master, nil) + ivconst.REPLICA_NOACTIVITY_TIMEOUT = old_timeout + end, {g.replica_1_a:replicaset_uuid()}) + + -- Check, that assert not fails + local err_msg = 'conn_manager_f has been failed' + t.assert_equals(g.replica_1_a:grep_log(err_msg), nil) + + -- Cleanup + vtest.cluster_rebalancer_disable(g) +end diff --git a/vshard/storage/init.lua b/vshard/storage/init.lua index ccc4b1a5..ef34bd1f 100644 --- a/vshard/storage/init.lua +++ b/vshard/storage/init.lua @@ -3656,7 +3656,6 @@ local function conn_manager_collect_idle_conns() if c and replica.activity_ts and replica.activity_ts + consts.REPLICA_NOACTIVITY_TIMEOUT < ts then if replica == rs.master and rs.is_master_auto then - assert(rs ~= M.this_replicaset) rs.master = nil end replica.conn = nil