mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 10:52:30 +00:00
117 lines
3.4 KiB
Python
117 lines
3.4 KiB
Python
import pytest
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
|
|
node = cluster.add_instance(
|
|
"node1",
|
|
with_zookeeper=True,
|
|
macros={"replica": "r1"},
|
|
main_configs=["config/config.xml", "config/config1.xml"],
|
|
)
|
|
|
|
node2 = cluster.add_instance(
|
|
"node2",
|
|
with_zookeeper=True,
|
|
macros={"replica": "r2"},
|
|
main_configs=["config/config.xml", "config/config2.xml"],
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def started_cluster():
|
|
try:
|
|
cluster.start()
|
|
|
|
yield cluster
|
|
|
|
finally:
|
|
cluster.shutdown()
|
|
|
|
|
|
def test_table_db_limit(started_cluster):
|
|
# By the way, default database already exists.
|
|
for i in range(9):
|
|
node.query("create database db{}".format(i))
|
|
|
|
assert "TOO_MANY_DATABASES" in node.query_and_get_error(
|
|
"create database db_exp".format(i)
|
|
)
|
|
|
|
for i in range(10):
|
|
node.query("create table t{} (a Int32) Engine = Log".format(i))
|
|
|
|
# This checks that system tables are not accounted in the number of tables.
|
|
node.query("system flush logs")
|
|
|
|
# Regular tables
|
|
for i in range(10):
|
|
node.query("drop table t{}".format(i))
|
|
|
|
for i in range(10):
|
|
node.query("create table t{} (a Int32) Engine = Log".format(i))
|
|
|
|
assert "TOO_MANY_TABLES" in node.query_and_get_error(
|
|
"create table default.tx (a Int32) Engine = Log"
|
|
)
|
|
|
|
# Dictionaries
|
|
for i in range(10):
|
|
node.query(
|
|
"create dictionary d{} (a Int32) primary key a source(null()) layout(flat()) lifetime(1000)".format(
|
|
i
|
|
)
|
|
)
|
|
|
|
assert "TOO_MANY_TABLES" in node.query_and_get_error(
|
|
"create dictionary dx (a Int32) primary key a source(null()) layout(flat()) lifetime(1000)"
|
|
)
|
|
|
|
# Replicated tables
|
|
for i in range(10):
|
|
node.query("drop table t{}".format(i))
|
|
|
|
for i in range(3):
|
|
node.query(
|
|
"create table t{} on cluster 'cluster' (a Int32) Engine = ReplicatedMergeTree('/clickhouse/tables/t{}', '{{replica}}') order by a".format(
|
|
i, i
|
|
)
|
|
)
|
|
|
|
# Test limit on other replica
|
|
assert "Too many replicated tables" in node2.query_and_get_error(
|
|
"create table tx (a Int32) Engine = ReplicatedMergeTree('/clickhouse/tables/tx', '{replica}') order by a"
|
|
)
|
|
|
|
for i in range(3, 5):
|
|
node.query(
|
|
"create table t{} (a Int32) Engine = ReplicatedMergeTree('/clickhouse/tables/t{}', '{{replica}}') order by a".format(
|
|
i, i
|
|
)
|
|
)
|
|
|
|
assert "Too many replicated tables" in node.query_and_get_error(
|
|
"create table tx (a Int32) Engine = ReplicatedMergeTree('/clickhouse/tables/tx', '{replica}') order by a"
|
|
)
|
|
|
|
# Checks that replicated tables are also counted as regular tables
|
|
for i in range(5, 10):
|
|
node.query("create table t{} (a Int32) Engine = Log".format(i))
|
|
|
|
assert "TOO_MANY_TABLES" in node.query_and_get_error(
|
|
"create table tx (a Int32) Engine = Log"
|
|
)
|
|
|
|
# Cleanup
|
|
for i in range(10):
|
|
node.query("drop table t{} sync".format(i))
|
|
for i in range(3):
|
|
node2.query("drop table t{} sync".format(i))
|
|
node.query("system drop replica 'r1' from ZKPATH '/clickhouse/tables/tx'")
|
|
node.query("system drop replica 'r2' from ZKPATH '/clickhouse/tables/tx'")
|
|
for i in range(9):
|
|
node.query("drop database db{}".format(i))
|
|
for i in range(10):
|
|
node.query("drop dictionary d{}".format(i))
|