diff --git a/tests/integration/test_jbod_balancer/test.py b/tests/integration/test_jbod_balancer/test.py index 28eee63a088b..8c2966ff0564 100644 --- a/tests/integration/test_jbod_balancer/test.py +++ b/tests/integration/test_jbod_balancer/test.py @@ -9,6 +9,7 @@ import pytest from helpers.client import QueryRuntimeException from helpers.cluster import ClickHouseCluster +from helpers.wait_for_helpers import wait_for_merges cluster = ClickHouseCluster(__file__) @@ -67,7 +68,7 @@ def check_balance(node, table): partition, disk_name ) GROUP BY partition - HAVING gini < 0.2 + HAVING gini < 0.1 """.format( table ) @@ -76,6 +77,20 @@ def check_balance(node, table): assert set(partitions) == set(["0", "1"]) +def wait_until_fully_merged(node, table, retry=20): + for i in range(retry): + # Wait in-flight merges + wait_for_merges(node, table) + + # Check if we can assign new merges + try: + node.query(f"optimize table {table} settings optimize_throw_if_noop = 1") + except e: + return + + raise Exception(f"There are still merges on-going after {retry} assignments") + + def test_jbod_balanced_merge(start_cluster): try: node1.query( @@ -110,7 +125,7 @@ def task(i): p.map(task, range(200)) - time.sleep(1) + wait_until_fully_merged(node1, "tbl") check_balance(node1, "tbl") @@ -183,6 +198,8 @@ def task(i): p.map(task, range(200)) + wait_until_fully_merged(node1, "tbl") + node2.query("SYSTEM SYNC REPLICA tbl", timeout=10) check_balance(node1, "tbl")