mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 10:10:50 +00:00
Added test for MATERIALIZE TTL IN PARTITION.
This commit is contained in:
parent
8a8142049a
commit
850925325e
@ -46,8 +46,17 @@ def get_random_string(length):
|
||||
return str(result_list)
|
||||
|
||||
|
||||
def get_used_disks_for_table(node, table_name):
|
||||
return node.query("select disk_name from system.parts where table == '{}' and active=1 order by modification_time".format(table_name)).strip().split('\n')
|
||||
def get_used_disks_for_table(node, table_name, partition=None):
|
||||
if partition is None:
|
||||
suffix = ""
|
||||
else:
|
||||
suffix = "and partition='{}'".format(partition)
|
||||
return node.query("""
|
||||
SELECT disk_name
|
||||
FROM system.parts
|
||||
WHERE table == '{name}' AND active=1 {suffix}
|
||||
ORDER BY modification_time
|
||||
""".format(name=table_name, suffix=suffix)).strip().split('\n')
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Flappy test")
|
||||
@ -587,6 +596,68 @@ def test_ttls_do_not_work_after_alter(started_cluster, name, engine, positive, b
|
||||
node1.query("DROP TABLE IF EXISTS {}".format(name))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("name,engine", [
|
||||
("mt_test_materialize_ttl_in_partition","MergeTree()"),
|
||||
("replicated_mt_test_materialize_ttl_in_partition","ReplicatedMergeTree('/clickhouse/test_materialize_ttl_in_partition', '1')"),
|
||||
])
|
||||
def test_materialize_ttl_in_partition(started_cluster, name, engine):
|
||||
try:
|
||||
node1.query("""
|
||||
CREATE TABLE {name} (
|
||||
p1 Int8,
|
||||
s1 String,
|
||||
d1 DateTime
|
||||
) ENGINE = {engine}
|
||||
ORDER BY p1
|
||||
PARTITION BY p1
|
||||
SETTINGS storage_policy='small_jbod_with_external'
|
||||
""".format(name=name, engine=engine))
|
||||
|
||||
data = [] # 5MB in total
|
||||
for i in range(5):
|
||||
data.append((str(i), "'{}'".format(get_random_string(1024 * 1024)), "toDateTime({})".format(time.time()-1))) # 1MB row
|
||||
node1.query("INSERT INTO {} (p1, s1, d1) VALUES {}".format(name, ",".join(["(" + ",".join(x) + ")" for x in data])))
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
used_disks = get_used_disks_for_table(node1, name)
|
||||
assert set(used_disks) == {"jbod1"}
|
||||
|
||||
node1.query("""
|
||||
ALTER TABLE {name}
|
||||
MODIFY TTL
|
||||
d1 TO DISK 'external'
|
||||
""".format(name=name))
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
used_disks = get_used_disks_for_table(node1, name)
|
||||
assert set(used_disks) == {"jbod1"}
|
||||
|
||||
node1.query("""
|
||||
ALTER TABLE {name}
|
||||
MATERIALIZE TTL IN PARTITION 2
|
||||
""".format(name=name))
|
||||
|
||||
node1.query("""
|
||||
ALTER TABLE {name}
|
||||
MATERIALIZE TTL IN PARTITION 4
|
||||
""".format(name=name))
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
used_disks_sets = []
|
||||
for i in range(len(data)):
|
||||
used_disks_sets.append(set(get_used_disks_for_table(node1, name, partition=i)))
|
||||
|
||||
assert used_disks_sets == [{"jbod1"}, {"jbod1"}, {"external"}, {"jbod1"}, {"external"}]
|
||||
|
||||
assert node1.query("SELECT count() FROM {name}".format(name=name)).strip() == str(len(data))
|
||||
|
||||
finally:
|
||||
node1.query("DROP TABLE IF EXISTS {}".format(name))
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Flappy test")
|
||||
@pytest.mark.parametrize("name,engine,positive", [
|
||||
("mt_test_alter_multiple_ttls_positive", "MergeTree()", True),
|
||||
|
Loading…
Reference in New Issue
Block a user