ClickHouse/tests/integration/test_always_fetch_merged/test.py
2024-09-27 10:19:49 +00:00

87 lines
2.3 KiB
Python

import time
import pytest
from helpers.cluster import ClickHouseCluster
from helpers.test_tools import assert_eq_with_retry
cluster = ClickHouseCluster(__file__)
node1 = cluster.add_instance("node1", with_zookeeper=True)
node2 = cluster.add_instance("node2", with_zookeeper=True)
@pytest.fixture(scope="module")
def started_cluster():
try:
cluster.start()
yield cluster
finally:
cluster.shutdown()
def test_replica_always_download(started_cluster):
node1.query_with_retry(
"""
CREATE TABLE IF NOT EXISTS test_table(
key UInt64,
value String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_table/replicated', '1')
ORDER BY tuple()
"""
)
node2.query_with_retry(
"""
CREATE TABLE IF NOT EXISTS test_table(
key UInt64,
value String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_table/replicated', '2')
ORDER BY tuple()
SETTINGS always_fetch_merged_part=1
"""
)
# Stop merges on single node
node1.query("SYSTEM STOP MERGES")
for i in range(0, 10):
node1.query_with_retry("INSERT INTO test_table VALUES ({}, '{}')".format(i, i))
assert node1.query("SELECT COUNT() FROM test_table") == "10\n"
assert_eq_with_retry(node2, "SELECT COUNT() FROM test_table", "10\n")
time.sleep(5)
# Nothing is merged
assert (
node1.query(
"SELECT COUNT() FROM system.parts WHERE table = 'test_table' and active=1"
)
== "10\n"
)
assert (
node2.query(
"SELECT COUNT() FROM system.parts WHERE table = 'test_table' and active=1"
)
== "10\n"
)
node1.query("SYSTEM START MERGES")
node1.query("OPTIMIZE TABLE test_table")
node2.query("SYSTEM SYNC REPLICA test_table")
node1_parts = node1.query(
"SELECT COUNT() FROM system.parts WHERE table = 'test_table' and active=1"
).strip()
node2_parts = node2.query(
"SELECT COUNT() FROM system.parts WHERE table = 'test_table' and active=1"
).strip()
assert int(node1_parts) < 10
assert int(node2_parts) < 10
node1.query_with_retry("DROP TABLE test_table SYNC")
node2.query_with_retry("DROP TABLE test_table SYNC")