test: extend existing test to check that a joining node can map addresses of all pre-existing nodes during join

This commit is contained in:
Gleb Natapov
2024-09-12 16:37:20 +03:00
parent bddaf498df
commit 9e4cd32096
2 changed files with 15 additions and 7 deletions

View File

@@ -6650,6 +6650,10 @@ future<join_node_response_result> storage_service::join_node_response_handler(jo
co_return join_node_response_result{};
}
if (utils::get_local_injector().enter("join_node_response_drop_expiring")) {
_group0->modifiable_address_map().force_drop_expiring_entries();
}
try {
co_return co_await std::visit(overloaded_functor {
[&] (const join_node_response_params::accepted& acc) -> future<join_node_response_result> {

View File

@@ -27,16 +27,20 @@ async def test_long_join(manager: ManagerClient) -> None:
await asyncio.gather(task)
@pytest.mark.asyncio
async def test_long_join_drop_wntries_on_bootstrapping(manager: ManagerClient) -> None:
async def test_long_join_drop_entries_on_bootstrapping(manager: ManagerClient) -> None:
"""The test checks that join works even if expiring entries are dropped
on the joining node between placement of the join request and its processing"""
s1 = await manager.server_add()
servers = await manager.servers_add(2)
inj = 'topology_coordinator_pause_before_processing_backlog'
await manager.api.enable_injection(s1.ip_addr, inj, one_shot=True)
s2 = await manager.server_add(start=False, config={
[await manager.api.enable_injection(s.ip_addr, inj, one_shot=True) for s in servers]
s = await manager.server_add(start=False, config={
'error_injections_at_startup': ['pre_server_start_drop_expiring']
})
task = asyncio.create_task(manager.server_start(s2.server_id))
await manager.server_sees_other_server(s1.ip_addr, s2.ip_addr, interval=300)
await manager.api.message_injection(s1.ip_addr, inj)
task = asyncio.create_task(manager.server_start(s.server_id))
log = await manager.server_open_log(s.server_id)
await log.wait_for("init - starting gossiper")
servers.append(s)
await manager.servers_see_each_other(servers, interval=300)
await manager.api.enable_injection(s.ip_addr, 'join_node_response_drop_expiring', one_shot=True)
[await manager.api.message_injection(s.ip_addr, inj) for s in servers[:-1]]
await asyncio.gather(task)