ClickHouse/tests/queries/0_stateless/01174_select_insert_isolation.sh

62 lines
1.9 KiB
Bash
Raw Normal View History

2021-04-08 17:20:45 +00:00
#!/usr/bin/env bash
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CURDIR"/../shell_config.sh
set -e
$CLICKHOUSE_CLIENT --query "DROP TABLE IF EXISTS mt";
$CLICKHOUSE_CLIENT --query "CREATE TABLE mt (n Int8, m Int8) ENGINE=MergeTree ORDER BY n PARTITION BY 0 < n";
function thread_insert_commit()
{
for i in {1..50}; do
$CLICKHOUSE_CLIENT --multiquery --query "
BEGIN TRANSACTION;
INSERT INTO mt VALUES ($i, $1);
INSERT INTO mt VALUES (-$i, $1);
COMMIT;";
done
}
function thread_insert_rollback()
{
for _ in {1..50}; do
$CLICKHOUSE_CLIENT --multiquery --query "
BEGIN TRANSACTION;
INSERT INTO mt VALUES (42, $1);
ROLLBACK;";
done
}
function thread_select()
{
trap "exit 0" INT
while true; do
2021-05-17 11:14:09 +00:00
# Result of `uniq | wc -l` must be 1 if the first and the last queries got the same result
2021-04-08 17:20:45 +00:00
$CLICKHOUSE_CLIENT --multiquery --query "
BEGIN TRANSACTION;
2021-05-17 11:14:09 +00:00
SELECT arraySort(groupArray(n)), arraySort(groupArray(m)), arraySort(groupArray(_part)) FROM mt;
2021-04-08 17:20:45 +00:00
SELECT throwIf((SELECT sum(n) FROM mt) != 0) FORMAT Null;
SELECT throwIf((SELECT count() FROM mt) % 2 != 0) FORMAT Null;
2021-05-17 11:14:09 +00:00
SELECT arraySort(groupArray(n)), arraySort(groupArray(m)), arraySort(groupArray(_part)) FROM mt;
COMMIT;" | tee -a ./wtf.log | uniq | wc -l | grep -v "^1$" && $CLICKHOUSE_CLIENT -q "SELECT * FROM system.parts
WHERE database='$CLICKHOUSE_DATABASE' AND table='mt'" ||:;
2021-04-08 17:20:45 +00:00
done
}
thread_insert_commit 1 & PID_1=$!
thread_insert_commit 2 & PID_2=$!
thread_insert_rollback 3 & PID_3=$!
thread_select & PID_4=$!
wait $PID_1 && wait $PID_2 && wait $PID_3
kill -INT $PID_4
wait
$CLICKHOUSE_CLIENT --multiquery --query "
BEGIN TRANSACTION;
SELECT count(), sum(n), sum(m=1), sum(m=2), sum(m=3) FROM mt;";
2021-05-18 17:07:29 +00:00
$CLICKHOUSE_CLIENT --query "DROP TABLE mt";