ClickHouse/tests/integration/test_keeper_persistent_log_multinode/test.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

151 lines
4.3 KiB
Python
Raw Permalink Normal View History

2021-02-19 19:24:20 +00:00
#!/usr/bin/env python3
2024-09-27 10:19:39 +00:00
import os
2021-02-19 19:24:20 +00:00
import random
import string
import time
2024-09-27 10:19:39 +00:00
import pytest
import helpers.keeper_utils as keeper_utils
from helpers.cluster import ClickHouseCluster
2021-02-19 19:24:20 +00:00
cluster = ClickHouseCluster(__file__)
node1 = cluster.add_instance(
"node1",
main_configs=["configs/enable_keeper1.xml", "configs/use_keeper.xml"],
stay_alive=True,
)
node2 = cluster.add_instance(
"node2",
main_configs=["configs/enable_keeper2.xml", "configs/use_keeper.xml"],
stay_alive=True,
)
node3 = cluster.add_instance(
"node3",
main_configs=["configs/enable_keeper3.xml", "configs/use_keeper.xml"],
stay_alive=True,
)
2021-02-19 19:24:20 +00:00
from kazoo.client import KazooClient, KazooState
2022-09-06 10:58:14 +00:00
def wait_nodes():
keeper_utils.wait_nodes(cluster, [node1, node2, node3])
2021-02-19 19:24:20 +00:00
@pytest.fixture(scope="module")
def started_cluster():
try:
cluster.start()
2022-09-06 10:58:14 +00:00
wait_nodes()
2021-02-19 19:24:20 +00:00
yield cluster
finally:
cluster.shutdown()
2021-02-19 19:24:20 +00:00
def get_fake_zk(nodename, timeout=30.0):
_fake_zk_instance = KazooClient(
hosts=cluster.get_instance_ip(nodename) + ":9181", timeout=timeout
)
_fake_zk_instance.start()
return _fake_zk_instance
2021-02-19 19:24:20 +00:00
def stop_zk(zk):
try:
if zk:
zk.stop()
zk.close()
except:
pass
2021-02-19 19:24:20 +00:00
def test_restart_multinode(started_cluster):
try:
node1_zk = node2_zk = node3_zk = None
node1_zk = get_fake_zk("node1")
node2_zk = get_fake_zk("node2")
node3_zk = get_fake_zk("node3")
for i in range(100):
node1_zk.create(
"/test_read_write_multinode_node" + str(i),
("somedata" + str(i)).encode(),
)
for i in range(100):
if i % 10 == 0:
node1_zk.delete("/test_read_write_multinode_node" + str(i))
node2_zk.sync("/test_read_write_multinode_node0")
node3_zk.sync("/test_read_write_multinode_node0")
for i in range(100):
if i % 10 != 0:
assert (
node2_zk.get("/test_read_write_multinode_node" + str(i))[0]
== ("somedata" + str(i)).encode()
)
2021-02-19 19:24:20 +00:00
assert (
node3_zk.get("/test_read_write_multinode_node" + str(i))[0]
== ("somedata" + str(i)).encode()
)
2021-02-19 19:24:20 +00:00
else:
assert (
node2_zk.exists("/test_read_write_multinode_node" + str(i)) is None
)
2021-02-19 19:24:20 +00:00
assert (
node3_zk.exists("/test_read_write_multinode_node" + str(i)) is None
)
2021-02-19 19:24:20 +00:00
finally:
for zk in [node1_zk, node2_zk, node3_zk]:
stop_zk(zk)
node1.restart_clickhouse(kill=True)
node2.restart_clickhouse(kill=True)
node3.restart_clickhouse(kill=True)
2022-09-06 10:58:14 +00:00
wait_nodes()
2021-02-19 19:24:20 +00:00
for i in range(100):
try:
node1_zk = get_fake_zk("node1")
node2_zk = get_fake_zk("node2")
node3_zk = get_fake_zk("node3")
for i in range(100):
if i % 10 != 0:
assert (
node1_zk.get("/test_read_write_multinode_node" + str(i))[0]
== ("somedata" + str(i)).encode()
)
2021-02-19 19:24:20 +00:00
assert (
node2_zk.get("/test_read_write_multinode_node" + str(i))[0]
== ("somedata" + str(i)).encode()
)
2021-02-19 19:24:20 +00:00
assert (
node3_zk.get("/test_read_write_multinode_node" + str(i))[0]
== ("somedata" + str(i)).encode()
)
2021-02-19 19:24:20 +00:00
else:
assert (
node1_zk.exists("/test_read_write_multinode_node" + str(i))
is None
)
2021-02-19 19:24:20 +00:00
assert (
node2_zk.exists("/test_read_write_multinode_node" + str(i))
is None
)
2021-02-19 19:24:20 +00:00
assert (
node3_zk.exists("/test_read_write_multinode_node" + str(i))
is None
)
2021-02-19 19:24:20 +00:00
break
except Exception as ex:
print("Got exception as ex", ex)
finally:
for zk in [node1_zk, node2_zk, node3_zk]:
stop_zk(zk)