Files
scylladb/test/cluster/test_long_join.py
Artsiom Mishuta d1198f8318 test.py: rename topology_custom folder to cluster
rename topology_custom folder to cluster
as it contains not only topology test cases
2025-03-04 10:32:44 +01:00

47 lines
2.1 KiB
Python

#
# Copyright (C) 2024-present ScyllaDB
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#
import pytest
import logging
import asyncio
from test.pylib.manager_client import ManagerClient
logger = logging.getLogger(__name__)
@pytest.mark.asyncio
async def test_long_join(manager: ManagerClient) -> None:
"""The test checks that join works even if expiring entries are dropped
between placement of the join request and its processing"""
s1 = await manager.server_add()
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)
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.enable_injection(s1.ip_addr, "handle_node_transition_drop_expiring", one_shot=True)
await manager.api.message_injection(s1.ip_addr, inj)
await asyncio.gather(task)
@pytest.mark.asyncio
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"""
servers = await manager.servers_add(2)
inj = 'topology_coordinator_pause_before_processing_backlog'
[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(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)