ClickHouse/tests/integration/test_send_request_to_leader_replica/test.py
2021-03-19 14:48:28 +03:00

77 lines
3.5 KiB
Python

import pytest
from helpers.cluster import ClickHouseCluster
from helpers.test_tools import assert_eq_with_retry
cluster = ClickHouseCluster(__file__)
node1 = cluster.add_instance('node1', main_configs=['configs/remote_servers.xml'],
user_configs=['configs/user_good_restricted.xml'], with_zookeeper=True)
node2 = cluster.add_instance('node2', main_configs=['configs/remote_servers.xml'],
user_configs=['configs/user_good_restricted.xml'], with_zookeeper=True)
node3 = cluster.add_instance('node3', main_configs=['configs/remote_servers.xml'],
user_configs=['configs/user_good_allowed.xml'], with_zookeeper=True)
node4 = cluster.add_instance('node4', main_configs=['configs/remote_servers.xml'],
user_configs=['configs/user_good_allowed.xml'], with_zookeeper=True)
@pytest.fixture(scope="module")
def started_cluster():
try:
cluster.start()
for node in [node1, node2]:
node.query('''
CREATE TABLE sometable(date Date, id UInt32, value Int32)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/0/sometable', '{replica}', date, id, 8192);
'''.format(replica=node.name), user='awesome')
for node in [node3, node4]:
node.query('''
CREATE TABLE someothertable(date Date, id UInt32, value Int32)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/0/someothertable', '{replica}', date, id, 8192);
'''.format(replica=node.name), user='good')
yield cluster
finally:
cluster.shutdown()
@pytest.mark.parametrize("table,query,expected,n1,n2", [
pytest.param("sometable", "ALTER TABLE sometable DROP PARTITION 201706", '1', node1, node2, id="case1"),
pytest.param("sometable", "TRUNCATE TABLE sometable", '0', node1, node2, id="case2"),
pytest.param("sometable", "OPTIMIZE TABLE sometable", '4', node1, node2, id="case3"),
pytest.param("someothertable", "ALTER TABLE someothertable DROP PARTITION 201706", '1', node3, node4, id="case4"),
pytest.param("someothertable", "TRUNCATE TABLE someothertable", '0', node3, node4, id="case5"),
pytest.param("someothertable", "OPTIMIZE TABLE someothertable", '4', node3, node4, id="case6"),
])
def test_alter_table_drop_partition(started_cluster, table, query, expected, n1, n2):
to_insert = '''\
2017-06-16 111 0
2017-06-16 222 1
2017-06-16 333 2
2017-07-16 444 3
'''
n1.query("INSERT INTO {} FORMAT TSV".format(table), stdin=to_insert, user='good')
assert_eq_with_retry(n1, "SELECT COUNT(*) from {}".format(table), '4', user='good')
assert_eq_with_retry(n2, "SELECT COUNT(*) from {}".format(table), '4', user='good')
### It maybe leader and everything will be ok
n1.query(query, user='good')
assert_eq_with_retry(n1, "SELECT COUNT(*) from {}".format(table), expected, user='good')
assert_eq_with_retry(n2, "SELECT COUNT(*) from {}".format(table), expected, user='good')
n1.query("INSERT INTO {} FORMAT TSV".format(table), stdin=to_insert, user='good')
assert_eq_with_retry(n1, "SELECT COUNT(*) from {}".format(table), '4', user='good')
assert_eq_with_retry(n2, "SELECT COUNT(*) from {}".format(table), '4', user='good')
### If node1 is leader than node2 will be slave
n2.query(query, user='good')
assert_eq_with_retry(n1, "SELECT COUNT(*) from {}".format(table), expected, user='good')
assert_eq_with_retry(n2, "SELECT COUNT(*) from {}".format(table), expected, user='good')