ClickHouse/tests/queries/0_stateless/02361_fsync_profile_events.sh

77 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Tags: no-s3-storage, no-random-merge-tree-settings
# Tag no-s3-storage: s3 does not have fsync
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CUR_DIR"/../shell_config.sh
$CLICKHOUSE_CLIENT -nm -q "
drop table if exists data_fsync_pe;
create table data_fsync_pe (key Int) engine=MergeTree()
order by key
settings
min_rows_for_wide_part=2,
fsync_after_insert=1,
fsync_part_directory=1;
"
ret=1
# Retry in case of fsync/fdatasync was too fast
# (FileSyncElapsedMicroseconds/DirectorySyncElapsedMicroseconds was 0)
for i in {1..100}; do
query_id="insert-$i-$CLICKHOUSE_DATABASE"
$CLICKHOUSE_CLIENT --query_id "$query_id" -q "insert into data_fsync_pe values (1)"
read -r FileSync FileOpen DirectorySync FileSyncElapsedMicroseconds DirectorySyncElapsedMicroseconds <<<"$(
$CLICKHOUSE_CLIENT -nm --param_query_id "$query_id" -q "
system flush logs;
select
ProfileEvents['FileSync'],
ProfileEvents['FileOpen'],
ProfileEvents['DirectorySync'],
ProfileEvents['FileSyncElapsedMicroseconds']>0,
ProfileEvents['DirectorySyncElapsedMicroseconds']>0
from system.query_log
where
event_date >= yesterday() and
current_database = currentDatabase() and
query_id = {query_id:String} and
type = 'QueryFinish';
")"
# Non retriable errors
if [[ $FileSync -ne 7 ]]; then
echo "FileSync: $FileSync != 11" >&2
exit 2
fi
# Check that all files was synced
if [[ $FileSync -ne $FileOpen ]]; then
echo "$FileSync (FileSync) != $FileOpen (FileOpen)" >&2
exit 3
fi
if [[ $DirectorySync -ne 2 ]]; then
echo "DirectorySync: $DirectorySync != 2" >&2
exit 4
fi
# Retriable errors
if [[ $FileSyncElapsedMicroseconds -eq 0 ]]; then
continue
fi
if [[ $DirectorySyncElapsedMicroseconds -eq 0 ]]; then
continue
fi
# Everything is OK
ret=0
break
done
$CLICKHOUSE_CLIENT -q "drop table data_fsync_pe"
exit $ret