test: add test to check if repair is properly aborted
This commit is contained in:
@@ -2464,6 +2464,8 @@ future<> repair::tablet_repair_task_impl::run() {
|
||||
throw abort_requested_exception();
|
||||
}
|
||||
|
||||
co_await utils::get_local_injector().inject("repair_tablet_repair_task_impl_run", utils::wait_for_message(10s));
|
||||
|
||||
std::unordered_map<dht::token_range, repair_neighbors> neighbors;
|
||||
neighbors[m.range] = m.neighbors;
|
||||
dht::token_range_vector ranges = {m.range};
|
||||
|
||||
@@ -221,3 +221,41 @@ async def test_batchlog_flush_in_repair_with_cache(manager):
|
||||
@skip_mode('release', 'error injections are not supported in release mode')
|
||||
async def test_batchlog_flush_in_repair_without_cache(manager):
|
||||
await do_batchlog_flush_in_repair(manager, 0);
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@skip_mode('release', 'error injections are not supported in release mode')
|
||||
async def test_repair_abort(manager):
|
||||
cfg = {'enable_tablets': True}
|
||||
await manager.server_add(config=cfg)
|
||||
await manager.server_add(config=cfg)
|
||||
servers = await manager.running_servers()
|
||||
|
||||
cql = manager.get_cql()
|
||||
|
||||
cql.execute("CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor': 2}")
|
||||
cql.execute("CREATE TABLE ks.tbl (pk int, ck int, PRIMARY KEY (pk, ck)) WITH tombstone_gc = {'mode': 'repair'}")
|
||||
|
||||
await manager.api.client.post(f"/task_manager/ttl", params={ "ttl": "100000" },
|
||||
host=servers[0].ip_addr)
|
||||
|
||||
await manager.api.enable_injection(servers[0].ip_addr, "repair_tablet_repair_task_impl_run", False, {})
|
||||
|
||||
# Start repair.
|
||||
sequence_number = await manager.api.client.post_json(f"/storage_service/repair_async/ks", host=servers[0].ip_addr)
|
||||
|
||||
# Get repair id.
|
||||
stats_list = await manager.api.client.get_json("/task_manager/list_module_tasks/repair", host=servers[0].ip_addr)
|
||||
ids = [stats["task_id"] for stats in stats_list if stats["sequence_number"] == sequence_number]
|
||||
assert len(ids) == 1
|
||||
id = ids[0]
|
||||
|
||||
# Abort repair.
|
||||
await manager.api.client.post("/storage_service/force_terminate_repair", host=servers[0].ip_addr)
|
||||
|
||||
await manager.api.message_injection(servers[0].ip_addr, "repair_tablet_repair_task_impl_run")
|
||||
await manager.api.disable_injection(servers[0].ip_addr, "repair_tablet_repair_task_impl_run")
|
||||
|
||||
# Check if repair was aborted.
|
||||
await manager.api.client.get_json(f"/task_manager/wait_task/{id}", host=servers[0].ip_addr)
|
||||
statuses = await manager.api.client.get_json(f"/task_manager/task_status_recursive/{id}", host=servers[0].ip_addr)
|
||||
assert all([status["state"] == "failed" for status in statuses])
|
||||
|
||||
Reference in New Issue
Block a user