2020-07-27 19:35:38 +00:00
import pytest
from helpers . cluster import ClickHouseCluster
2020-09-16 04:26:10 +00:00
cluster = ClickHouseCluster ( __file__ )
2020-07-27 19:35:38 +00:00
2020-09-16 04:26:10 +00:00
node1 = cluster . add_instance ( ' node1 ' , with_zookeeper = True , image = ' yandex/clickhouse-server ' , tag = ' 19.4.5.35 ' ,
stay_alive = True , with_installed_binary = True )
node2 = cluster . add_instance ( ' node2 ' , with_zookeeper = True , image = ' yandex/clickhouse-server ' , tag = ' 19.4.5.35 ' ,
stay_alive = True , with_installed_binary = True )
node3 = cluster . add_instance ( ' node3 ' , with_zookeeper = True , image = ' yandex/clickhouse-server ' , tag = ' 19.4.5.35 ' ,
stay_alive = True , with_installed_binary = True )
2020-07-28 09:36:08 +00:00
node4 = cluster . add_instance ( ' node4 ' )
2020-07-27 19:35:38 +00:00
@pytest.fixture ( scope = " module " )
def started_cluster ( ) :
try :
cluster . start ( )
2020-09-21 21:09:50 +00:00
2020-07-27 19:35:38 +00:00
yield cluster
finally :
cluster . shutdown ( )
def test_backup_from_old_version ( started_cluster ) :
node1 . query ( " CREATE TABLE source_table(A Int64, B String) Engine = MergeTree order by tuple() " )
node1 . query ( " INSERT INTO source_table VALUES(1, ' 1 ' ) " )
assert node1 . query ( " SELECT COUNT() FROM source_table " ) == " 1 \n "
node1 . query ( " ALTER TABLE source_table ADD COLUMN Y String " )
node1 . query ( " ALTER TABLE source_table FREEZE PARTITION tuple(); " )
node1 . restart_with_latest_version ( )
2020-09-16 04:26:10 +00:00
node1 . query (
" CREATE TABLE dest_table (A Int64, B String, Y String) ENGINE = ReplicatedMergeTree( ' /test/dest_table1 ' , ' 1 ' ) ORDER BY tuple() " )
2020-07-27 19:35:38 +00:00
node1 . query ( " INSERT INTO dest_table VALUES(2, ' 2 ' , ' Hello ' ) " )
assert node1 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
2021-06-11 12:00:40 +00:00
node1 . exec_in_container ( [ ' find ' , ' /var/lib/clickhouse/shadow/1/data/default/source_table ' ] )
node1 . exec_in_container ( [ ' cp ' , ' -r ' , ' /var/lib/clickhouse/shadow/1/data/default/source_table/all_1_1_0/ ' , ' /var/lib/clickhouse/data/default/dest_table/detached ' ] )
2020-07-27 19:35:38 +00:00
assert node1 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
node1 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node1 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
node1 . query ( " ALTER TABLE dest_table DETACH PARTITION tuple() " )
node1 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node1 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
assert node1 . query ( " CHECK TABLE dest_table " ) == " 1 \n "
def test_backup_from_old_version_setting ( started_cluster ) :
node2 . query ( " CREATE TABLE source_table(A Int64, B String) Engine = MergeTree order by tuple() " )
node2 . query ( " INSERT INTO source_table VALUES(1, ' 1 ' ) " )
assert node2 . query ( " SELECT COUNT() FROM source_table " ) == " 1 \n "
node2 . query ( " ALTER TABLE source_table ADD COLUMN Y String " )
node2 . query ( " ALTER TABLE source_table FREEZE PARTITION tuple(); " )
node2 . restart_with_latest_version ( )
2020-09-16 04:26:10 +00:00
node2 . query (
" CREATE TABLE dest_table (A Int64, B String, Y String) ENGINE = ReplicatedMergeTree( ' /test/dest_table2 ' , ' 1 ' ) ORDER BY tuple() SETTINGS enable_mixed_granularity_parts = 1 " )
2020-07-27 19:35:38 +00:00
node2 . query ( " INSERT INTO dest_table VALUES(2, ' 2 ' , ' Hello ' ) " )
assert node2 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
2021-06-11 12:00:40 +00:00
node2 . exec_in_container ( [ ' cp ' , ' -r ' , ' /var/lib/clickhouse/shadow/1/data/default/source_table/all_1_1_0/ ' , ' /var/lib/clickhouse/data/default/dest_table/detached ' ] )
2020-07-27 19:35:38 +00:00
assert node2 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
node2 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node2 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
node2 . query ( " ALTER TABLE dest_table DETACH PARTITION tuple() " )
node2 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node2 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
2020-09-15 15:42:46 +00:00
assert node2 . query ( " CHECK TABLE dest_table " ) == " 1 \n "
2020-07-27 19:35:38 +00:00
def test_backup_from_old_version_config ( started_cluster ) :
node3 . query ( " CREATE TABLE source_table(A Int64, B String) Engine = MergeTree order by tuple() " )
node3 . query ( " INSERT INTO source_table VALUES(1, ' 1 ' ) " )
assert node3 . query ( " SELECT COUNT() FROM source_table " ) == " 1 \n "
node3 . query ( " ALTER TABLE source_table ADD COLUMN Y String " )
node3 . query ( " ALTER TABLE source_table FREEZE PARTITION tuple(); " )
def callback ( n ) :
2020-09-16 04:26:10 +00:00
n . replace_config ( " /etc/clickhouse-server/merge_tree_settings.xml " ,
2021-10-26 05:53:23 +00:00
" <clickhouse><merge_tree><enable_mixed_granularity_parts>1</enable_mixed_granularity_parts></merge_tree></clickhouse> " )
2020-07-27 19:35:38 +00:00
node3 . restart_with_latest_version ( callback_onstop = callback )
2020-09-16 04:26:10 +00:00
node3 . query (
" CREATE TABLE dest_table (A Int64, B String, Y String) ENGINE = ReplicatedMergeTree( ' /test/dest_table3 ' , ' 1 ' ) ORDER BY tuple() SETTINGS enable_mixed_granularity_parts = 1 " )
2020-07-27 19:35:38 +00:00
node3 . query ( " INSERT INTO dest_table VALUES(2, ' 2 ' , ' Hello ' ) " )
assert node3 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
2021-06-11 12:00:40 +00:00
node3 . exec_in_container ( [ ' cp ' , ' -r ' , ' /var/lib/clickhouse/shadow/1/data/default/source_table/all_1_1_0/ ' , ' /var/lib/clickhouse/data/default/dest_table/detached ' ] )
2020-07-27 19:35:38 +00:00
assert node3 . query ( " SELECT COUNT() FROM dest_table " ) == " 1 \n "
node3 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node3 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
node3 . query ( " ALTER TABLE dest_table DETACH PARTITION tuple() " )
node3 . query ( " ALTER TABLE dest_table ATTACH PARTITION tuple() " )
assert node3 . query ( " SELECT sum(A) FROM dest_table " ) == " 3 \n "
2020-09-15 15:42:46 +00:00
assert node3 . query ( " CHECK TABLE dest_table " ) == " 1 \n "
2020-07-28 09:36:08 +00:00
def test_backup_and_alter ( started_cluster ) :
2020-09-22 11:56:40 +00:00
node4 . query ( " CREATE DATABASE test ENGINE=Ordinary " ) # Different path in shadow/ with Atomic
2020-09-21 21:09:50 +00:00
node4 . query ( " CREATE TABLE test.backup_table(A Int64, B String, C Date) Engine = MergeTree order by tuple() " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " INSERT INTO test.backup_table VALUES(2, ' 2 ' , toDate( ' 2019-10-01 ' )) " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " ALTER TABLE test.backup_table FREEZE PARTITION tuple(); " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " ALTER TABLE test.backup_table DROP COLUMN C " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " ALTER TABLE test.backup_table MODIFY COLUMN B UInt64 " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " ALTER TABLE test.backup_table DROP PARTITION tuple() " )
2020-07-28 09:36:08 +00:00
2021-06-11 12:00:40 +00:00
node4 . exec_in_container ( [ ' cp ' , ' -r ' , ' /var/lib/clickhouse/shadow/1/data/test/backup_table/all_1_1_0/ ' , ' /var/lib/clickhouse/data/test/backup_table/detached ' ] )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
node4 . query ( " ALTER TABLE test.backup_table ATTACH PARTITION tuple() " )
2020-07-28 09:36:08 +00:00
2020-09-21 21:09:50 +00:00
assert node4 . query ( " SELECT sum(A) FROM test.backup_table " ) == " 2 \n "
assert node4 . query ( " SELECT B + 2 FROM test.backup_table " ) == " 4 \n "