From fc7e5370a19631bd7166b18ae31c0efaecffc26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jadwiszczak?= Date: Mon, 6 Oct 2025 15:02:42 +0200 Subject: [PATCH] test/cluster/test_view_building_coordinator: add test for tablet migration The test pauses processing of the view building task and migrates it to another node. --- .../cluster/test_view_building_coordinator.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/cluster/test_view_building_coordinator.py b/test/cluster/test_view_building_coordinator.py index 788bfc41d0..eccf83533f 100644 --- a/test/cluster/test_view_building_coordinator.py +++ b/test/cluster/test_view_building_coordinator.py @@ -878,3 +878,34 @@ async def test_staging_sstables_with_tablet_merge(manager: ManagerClient): # And also fails here because not all staging sstables are processed after tablet merge. (#2) await assert_row_count_on_host(cql, new_hosts[0], ks, "mv", 1000) await manager.server_start(servers[1].server_id) + +@pytest.mark.asyncio +@skip_mode("release", "error injections are not supported in release mode") +async def test_tablet_migration_during_view_building(manager: ManagerClient): + node_count = 1 + server = new_server = await manager.server_add(cmdline=cmdline_loggers, property_file={"dc": "dc1", "rack": "r1"}) + cql, _ = await manager.get_ready_cql([server]) + await disable_tablet_load_balancing_on_all_servers(manager) + + async with new_test_keyspace(manager, f"WITH replication = {{'class': 'NetworkTopologyStrategy', 'replication_factor': 1}} AND tablets = {{'enabled': true}}") as ks: + await cql.run_async(f"CREATE TABLE {ks}.tab (key int, c int, v text, PRIMARY KEY (key, c)) WITH tablets = {{'min_tablet_count': 1}}") + await populate_base_table(cql, ks, "tab") + + new_server = await manager.server_add(cmdline=cmdline_loggers, property_file={"dc": "dc1", "rack": "r1"}) + + marks = await mark_all_servers(manager) + await pause_view_building_tasks(manager) + + await cql.run_async(f"CREATE MATERIALIZED VIEW {ks}.mv_cf_view1 AS SELECT * FROM {ks}.tab " + "WHERE c IS NOT NULL and key IS NOT NULL AND v IS NOT NULL PRIMARY KEY (c, key, v) ") + + await wait_for_some_view_build_tasks_to_get_stuck(manager, marks) + + s2_host_id = await manager.get_host_id(new_server.server_id) + replica = await get_tablet_replica(manager, server, ks, "tab", 0) + await manager.api.move_tablet(server.ip_addr, ks, "tab", replica[0], replica[1], s2_host_id, replica[1], 0) + + await unpause_view_building_tasks(manager) + + await wait_for_view(cql, 'mv_cf_view1', 2) + await check_view_contents(cql, ks, "tab", "mv_cf_view1")