2021-05-10 18:03:37 +00:00
#!/usr/bin/env bash
2023-10-27 14:19:08 +00:00
# Tags: long, no-parallel
2021-05-10 18:03:37 +00:00
CURDIR = $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd )
# shellcheck source=../shell_config.sh
. " $CURDIR " /../shell_config.sh
2021-08-10 13:34:40 +00:00
# shellcheck source=./replication.lib
. " $CURDIR " /replication.lib
2021-05-10 18:03:37 +00:00
2022-08-15 18:32:03 +00:00
2021-05-10 18:03:37 +00:00
declare -A engines
engines[ 0] = "MergeTree"
2021-06-01 16:26:54 +00:00
engines[ 1] = " ReplicatedMergeTree('/test/ $CLICKHOUSE_TEST_ZOOKEEPER_PREFIX /{shard}/src', '{replica}_' || toString(randConstant())) "
engines[ 2] = " ReplicatedMergeTree('/test/ $CLICKHOUSE_TEST_ZOOKEEPER_PREFIX /{shard}/src_' || toString(randConstant()), '{replica}') "
2021-05-10 18:03:37 +00:00
for ( ( i = 0; i<16; i++) ) do
$CLICKHOUSE_CLIENT -q " CREATE TABLE dst_ $i (p UInt64, k UInt64, v UInt64)
ENGINE = ReplicatedMergeTree( '/test/$CLICKHOUSE_TEST_ZOOKEEPER_PREFIX/dst' , '$i' )
2021-06-21 17:29:32 +00:00
PARTITION BY p % 10 ORDER BY k" 2>&1| grep -Pv " Retrying createReplica| created by another server at the same moment, will retry| is already started to be removing" 2>&1 &
2021-05-10 18:03:37 +00:00
engine = ${ engines [ $(( i % ${# engines [@] } )) ] }
$CLICKHOUSE_CLIENT -q " CREATE TABLE src_ $i (p UInt64, k UInt64, v UInt64) ENGINE= $engine
2021-06-21 17:29:32 +00:00
PARTITION BY p % 10 ORDER BY k" 2>&1| grep -Pv " Retrying createReplica| created by another server at the same moment, will retry| is already started to be removing" 2>&1 &
2021-05-10 18:03:37 +00:00
done
wait
2021-05-11 12:31:13 +00:00
#function create_drop_thread()
#{
2022-05-28 17:20:32 +00:00
# while true; do
# REPLICA=$(($RANDOM % 16))
# $CLICKHOUSE_CLIENT -q "DROP TABLE src_$REPLICA;"
# arr=("$@")
# engine=${arr[$RANDOM % ${#arr[@]}]}
# $CLICKHOUSE_CLIENT -q "CREATE TABLE src_$REPLICA (p UInt64, k UInt64, v UInt64) ENGINE=$engine PARTITION BY p % 10 ORDER BY k"
# sleep 0.$RANDOM;
# done
2021-05-11 12:31:13 +00:00
#}
2021-05-10 18:03:37 +00:00
function insert_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
REPLICA = $(( $RANDOM % 16 ))
LIMIT = $(( $RANDOM % 100 ))
$CLICKHOUSE_CLIENT -q " INSERT INTO $1 _ $REPLICA SELECT * FROM generateRandom('p UInt64, k UInt64, v UInt64') LIMIT $LIMIT " 2>/dev/null
done
2021-05-10 18:03:37 +00:00
}
function move_partition_src_dst_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
FROM_REPLICA = $(( $RANDOM % 16 ))
TO_REPLICA = $(( $RANDOM % 16 ))
PARTITION = $(( $RANDOM % 10 ))
$CLICKHOUSE_CLIENT -q " ALTER TABLE src_ $FROM_REPLICA MOVE PARTITION $PARTITION TO TABLE dst_ $TO_REPLICA " 2>/dev/null
sleep 0.$RANDOM ;
done
2021-05-10 18:03:37 +00:00
}
function replace_partition_src_src_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
FROM_REPLICA = $(( $RANDOM % 16 ))
TO_REPLICA = $(( $RANDOM % 16 ))
PARTITION = $(( $RANDOM % 10 ))
$CLICKHOUSE_CLIENT -q " ALTER TABLE src_ $TO_REPLICA REPLACE PARTITION $PARTITION FROM src_ $FROM_REPLICA " 2>/dev/null
sleep 0.$RANDOM ;
done
2021-05-10 18:03:37 +00:00
}
function drop_partition_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
REPLICA = $(( $RANDOM % 16 ))
PARTITION = $(( $RANDOM % 10 ))
$CLICKHOUSE_CLIENT -q " ALTER TABLE dst_ $REPLICA DROP PARTITION $PARTITION " 2>/dev/null
sleep 0.$RANDOM ;
done
2021-05-10 18:03:37 +00:00
}
function optimize_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
REPLICA = $(( $RANDOM % 16 ))
TABLE = "src"
if ( ( RANDOM % 2 ) ) ; then
TABLE = "dst"
fi
$CLICKHOUSE_CLIENT -q " OPTIMIZE TABLE ${ TABLE } _ $REPLICA " 2>/dev/null
sleep 0.$RANDOM ;
done
2021-05-10 18:03:37 +00:00
}
2021-07-06 16:51:23 +00:00
function drop_part_thread( )
{
2022-05-28 17:20:32 +00:00
while true; do
REPLICA = $(( $RANDOM % 16 ))
part = $( $CLICKHOUSE_CLIENT -q " SELECT name FROM system.parts WHERE active AND database=' $CLICKHOUSE_DATABASE ' and table='dst_ $REPLICA ' ORDER BY rand() LIMIT 1 " )
$CLICKHOUSE_CLIENT -q " ALTER TABLE dst_ $REPLICA DROP PART ' $part ' " 2>/dev/null
sleep 0.$RANDOM ;
done
2021-07-06 16:51:23 +00:00
}
2021-05-11 12:31:13 +00:00
#export -f create_drop_thread;
2022-05-28 17:20:32 +00:00
export -f insert_thread;
export -f move_partition_src_dst_thread;
export -f replace_partition_src_src_thread;
export -f drop_partition_thread;
export -f optimize_thread;
export -f drop_part_thread;
2021-05-10 18:03:37 +00:00
2021-05-13 14:23:00 +00:00
TIMEOUT = 60
2021-05-10 18:03:37 +00:00
2022-05-28 17:20:32 +00:00
#timeout $TIMEOUT bash -c "create_drop_thread ${engines[@]}" &
timeout $TIMEOUT bash -c 'insert_thread src' &
timeout $TIMEOUT bash -c 'insert_thread src' &
timeout $TIMEOUT bash -c 'insert_thread dst' &
timeout $TIMEOUT bash -c move_partition_src_dst_thread &
timeout $TIMEOUT bash -c replace_partition_src_src_thread &
timeout $TIMEOUT bash -c drop_partition_thread &
timeout $TIMEOUT bash -c optimize_thread &
timeout $TIMEOUT bash -c drop_part_thread &
2021-05-10 18:03:37 +00:00
wait
2021-08-10 13:34:40 +00:00
check_replication_consistency "dst_" "count(), sum(p), sum(k), sum(v)"
2022-08-24 15:27:56 +00:00
try_sync_replicas "src_" 300
2021-05-10 18:03:37 +00:00
2023-06-01 19:20:39 +00:00
$CLICKHOUSE_CLIENT -q "SELECT table, lost_part_count FROM system.replicas WHERE database=currentDatabase() AND lost_part_count!=0" ;
2021-05-10 18:03:37 +00:00
for ( ( i = 0; i<16; i++) ) do
2021-07-29 13:40:33 +00:00
$CLICKHOUSE_CLIENT -q " DROP TABLE dst_ $i " 2>& 1| grep -Fv "is already started to be removing" &
$CLICKHOUSE_CLIENT -q " DROP TABLE IF EXISTS src_ $i " 2>& 1| grep -Fv "is already started to be removing" &
2021-05-10 18:03:37 +00:00
done
2022-02-03 10:10:05 +00:00
2021-05-10 18:03:37 +00:00
wait