ClickHouse/tests/queries/0_stateless/02421_truncate_isolation_no_merges.sh
2022-11-23 15:16:10 +00:00

206 lines
6.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Tags: no-fasttest, no-replicated-database, no-ordinary-database, long
set -e -o pipefail
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CURDIR"/../shell_config.sh
# shellcheck source=./transactions.lib
. "$CURDIR"/transactions.lib
function reset_table()
{
table=${1:-"tt"}
$CLICKHOUSE_CLIENT -q "drop table if exists $table"
$CLICKHOUSE_CLIENT -q "create table $table (n int) engine=MergeTree order by tuple()"
# In order to preserve parts names merges have to be disabled
$CLICKHOUSE_CLIENT -q "system stop merges $table"
$CLICKHOUSE_CLIENT -q "insert into $table values (1)" # inserts all_1_1_0
$CLICKHOUSE_CLIENT -q "insert into $table values (2)" # inserts all_2_2_0
$CLICKHOUSE_CLIENT -q "insert into $table values (3)" # inserts all_3_3_0
}
function concurrent_drop_after()
{
echo "concurrent_drop_after"
reset_table
tx 11 "begin transaction"
tx 11 "select count() from tt"
tx 11 "truncate table tt"
$CLICKHOUSE_CLIENT --database_atomic_wait_for_drop_and_detach_synchronously=0 -q "drop table tt"
tx 11 "commit"
}
concurrent_drop_after
function concurrent_drop_before()
{
echo "concurrent_drop_before"
reset_table
tx 21 "begin transaction"
tx 21 "select count() from tt"
$CLICKHOUSE_CLIENT -q "drop table tt"
tx 21 "truncate table tt" | grep -Eo "UNKNOWN_TABLE" | uniq
tx 21 "rollback"
}
concurrent_drop_before
function concurrent_insert()
{
echo "concurrent_insert"
reset_table
tx 31 "begin transaction"
tx 32 "begin transaction"
tx 31 "insert into tt values (1)" # inserts all_4_4_0
tx 32 "insert into tt values (2)" # inserts all_5_5_0
tx 31 "insert into tt values (3)" # inserts all_6_6_0
tx 31 "truncate table tt" # creates all_1_4_1 all_6_6_1
tx 31 "commit"
tx 32 "commit"
$CLICKHOUSE_CLIENT -q "select n from tt order by n"
$CLICKHOUSE_CLIENT -q "select name, rows from system.parts
where table='tt' and database=currentDatabase() and active
order by name"
}
concurrent_insert
function concurrent_drop_part_before()
{
echo "concurrent_drop_part_before"
reset_table
tx 41 "begin transaction"
tx 42 "begin transaction"
tx 42 "alter table tt drop part 'all_2_2_0'"
tx 41 "truncate table tt" | grep -Eo "SERIALIZATION_ERROR" | uniq
tx 41 "commit" | grep -Eo "INVALID_TRANSACTION" | uniq
tx 42 "commit"
$CLICKHOUSE_CLIENT -q "select n from tt order by n"
$CLICKHOUSE_CLIENT -q "select name, rows from system.parts
where table='tt' and database=currentDatabase() and active
order by name"
reset_table
}
concurrent_drop_part_before
function read_from_snapshot()
{
echo "read_from_snapshot"
reset_table
tx 51 "begin transaction"
tx 51 "select count() from tt"
tx 52 "begin transaction"
tx 52 "truncate table tt"
tx 51 "select count() from tt"
tx 52 "select count() from tt"
tx 52 "commit"
tx 51 "select count() from tt"
tx 51 "commit"
$CLICKHOUSE_CLIENT -q "select count() from tt"
}
read_from_snapshot
function concurrent_drop_part_after()
{
echo "concurrent_drop_part_after"
reset_table drop_part_after_table
tx 61 "begin transaction"
tx 62 "begin transaction"
tx 61 "truncate table drop_part_after_table"
tx 62 "alter table drop_part_after_table drop part 'all_2_2_0'" | grep -Eo "NO_SUCH_DATA_PART" | uniq
tx 61 "commit"
tx 62 "commit" | grep -Eo "INVALID_TRANSACTION" | uniq
$CLICKHOUSE_CLIENT -q "select n from drop_part_after_table order by n"
$CLICKHOUSE_CLIENT -q "select name, rows from system.parts
where table='drop_part_after_table' and database=currentDatabase() and active
order by name"
$CLICKHOUSE_CLIENT -q "system flush logs"
$CLICKHOUSE_CLIENT -q "select event_type, part_name from system.part_log
where table='drop_part_after_table' and database=currentDatabase()
order by part_name"
}
concurrent_drop_part_after
function concurrent_truncate_notx_after()
{
echo "concurrent_truncate_notx_after"
reset_table
tx 71 "begin transaction"
tx 71 "select count() from tt"
tx 71 "alter table tt drop part 'all_2_2_0'"
$CLICKHOUSE_CLIENT -q "truncate table tt"
# return 0, since truncate was out of transaction
# it would be better if exception raised
tx 71 "select count() from tt"
tx 71 "commit"
$CLICKHOUSE_CLIENT -q "select count() from tt"
}
concurrent_truncate_notx_after
function concurrent_truncate_notx_before()
{
echo "concurrent_truncate_notx_before"
reset_table
tx 81 "begin transaction"
tx 81 "select count() from tt"
$CLICKHOUSE_CLIENT -q "truncate table tt"
tx 81 "alter table tt drop part 'all_2_2_0'" | grep -Eo "NO_SUCH_DATA_PART" | uniq
tx 81 "select count() from tt" | grep -Eo "INVALID_TRANSACTION" | uniq
tx 81 "commit" | grep -Eo "INVALID_TRANSACTION" | uniq
$CLICKHOUSE_CLIENT -q "select count() from tt"
}
concurrent_truncate_notx_before
function concurrent_rollback_truncate()
{
echo "concurrent_rollback_truncate"
reset_table
tx 91 "begin transaction"
tx 92 "begin transaction"
tx 91 "truncate table tt"
tx_async 91 "rollback"
tx 92 "truncate table tt" | grep -vwe "PART_IS_TEMPORARILY_LOCKED" -vwe "SERIALIZATION_ERROR" ||:
tx 92 "rollback"
tx_wait 91
$CLICKHOUSE_CLIENT -q "select count() from tt"
}
concurrent_rollback_truncate