Merge pull request #68160 from azat/tests/02122_join_group_by_timeout

tests: fix 02122_join_group_by_timeout flakiness
This commit is contained in:
Alexey Milovidov 2024-08-12 02:20:51 +02:00 committed by GitHub
commit d18a68f285
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 35 deletions

View File

@ -1,4 +1,6 @@
Code: 159 Code: 159
0 query_duration 1
0
query_duration 1
Code: 159 Code: 159
0 0

View File

@ -1,27 +1,23 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Tags: no-debug
# no-debug: Query is canceled by timeout after max_execution_time,
# but sending an exception to the client may hang
# for more than MAX_PROCESS_WAIT seconds in a slow debug build,
# and test will fail.
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh # shellcheck source=../shell_config.sh
. "$CURDIR"/../shell_config.sh . "$CURDIR"/../shell_config.sh
MAX_PROCESS_WAIT=5 TIMEOUT=5
IS_SANITIZER_OR_DEBUG=$($CLICKHOUSE_CLIENT -q "SELECT count() FROM system.warnings WHERE message like '%built with sanitizer%' or message like '%built in debug mode%'")
IS_SANITIZER=$($CLICKHOUSE_CLIENT -q "SELECT count() FROM system.warnings WHERE message like '%built with sanitizer%'") if [ "$IS_SANITIZER_OR_DEBUG" -gt 0 ]; then
if [ "$IS_SANITIZER" -gt 0 ]; then # Increase the timeout due to in debug/sanitizers build:
# Query may hang for more than 5 seconds, especially in tsan build # - client is slow
MAX_PROCESS_WAIT=15 # - stacktrace resolving is slow
TIMEOUT=15
fi fi
# TCP CLIENT: As of today (02/12/21) uses PullingAsyncPipelineExecutor # TCP CLIENT: As of today (02/12/21) uses PullingAsyncPipelineExecutor
### Should be cancelled after 1 second and return a 159 exception (timeout) ### Should be cancelled after 1 second and return a 159 exception (timeout)
timeout -s KILL $MAX_PROCESS_WAIT $CLICKHOUSE_CLIENT --max_execution_time 1 -q \ query_id=$(random_str 12)
"SELECT * FROM $CLICKHOUSE_CLIENT --query_id "$query_id" --max_execution_time 1 -q "
SELECT * FROM
( (
SELECT a.name as n SELECT a.name as n
FROM FROM
@ -34,28 +30,35 @@ timeout -s KILL $MAX_PROCESS_WAIT $CLICKHOUSE_CLIENT --max_execution_time 1 -q \
GROUP BY n GROUP BY n
) )
LIMIT 20 LIMIT 20
FORMAT Null" 2>&1 | grep -o "Code: 159" | sort | uniq FORMAT Null
" 2>&1 | grep -m1 -o "Code: 159"
$CLICKHOUSE_CLIENT -q "system flush logs"
${CLICKHOUSE_CURL} -q -sS "$CLICKHOUSE_URL" -d "select 'query_duration', round(query_duration_ms/1000) from system.query_log where current_database = '$CLICKHOUSE_DATABASE' and query_id = '$query_id' and type != 'QueryStart'"
### Should stop pulling data and return what has been generated already (return code 0) ### Should stop pulling data and return what has been generated already (return code 0)
timeout -s KILL $MAX_PROCESS_WAIT $CLICKHOUSE_CLIENT -q \ query_id=$(random_str 12)
"SELECT a.name as n $CLICKHOUSE_CLIENT --query_id "$query_id" -q "
FROM SELECT a.name as n
( FROM
SELECT 'Name' as name, number FROM system.numbers LIMIT 2000000 (
) AS a, SELECT 'Name' as name, number FROM system.numbers LIMIT 2000000
( ) AS a,
SELECT 'Name' as name2, number FROM system.numbers LIMIT 2000000 (
) as b SELECT 'Name' as name2, number FROM system.numbers LIMIT 2000000
FORMAT Null ) as b
SETTINGS max_execution_time = 1, timeout_overflow_mode = 'break' FORMAT Null
" SETTINGS max_execution_time = 1, timeout_overflow_mode = 'break'
"
echo $? echo $?
$CLICKHOUSE_CLIENT -q "system flush logs"
${CLICKHOUSE_CURL} -q -sS "$CLICKHOUSE_URL" -d "select 'query_duration', round(query_duration_ms/1000) from system.query_log where current_database = '$CLICKHOUSE_DATABASE' and query_id = '$query_id' and type != 'QueryStart'"
# HTTP CLIENT: As of today (02/12/21) uses PullingPipelineExecutor # HTTP CLIENT: As of today (02/12/21) uses PullingPipelineExecutor
### Should be cancelled after 1 second and return a 159 exception (timeout) ### Should be cancelled after 1 second and return a 159 exception (timeout)
${CLICKHOUSE_CURL} -q --max-time $MAX_PROCESS_WAIT -sS "$CLICKHOUSE_URL&max_execution_time=1" -d \ ${CLICKHOUSE_CURL} -q --max-time $TIMEOUT -sS "$CLICKHOUSE_URL&max_execution_time=1" -d "
"SELECT * FROM SELECT * FROM
( (
SELECT a.name as n SELECT a.name as n
FROM FROM
@ -68,12 +71,13 @@ ${CLICKHOUSE_CURL} -q --max-time $MAX_PROCESS_WAIT -sS "$CLICKHOUSE_URL&max_exec
GROUP BY n GROUP BY n
) )
LIMIT 20 LIMIT 20
FORMAT Null" 2>&1 | grep -o "Code: 159" | sort | uniq FORMAT Null
" 2>&1 | grep -o "Code: 159" | sort | uniq
### Should stop pulling data and return what has been generated already (return code 0) ### Should stop pulling data and return what has been generated already (return code 0)
${CLICKHOUSE_CURL} -q --max-time $MAX_PROCESS_WAIT -sS "$CLICKHOUSE_URL" -d \ ${CLICKHOUSE_CURL} -q --max-time $TIMEOUT -sS "$CLICKHOUSE_URL" -d "
"SELECT a.name as n SELECT a.name as n
FROM FROM
( (
SELECT 'Name' as name, number FROM system.numbers LIMIT 2000000 SELECT 'Name' as name, number FROM system.numbers LIMIT 2000000
@ -83,5 +87,5 @@ ${CLICKHOUSE_CURL} -q --max-time $MAX_PROCESS_WAIT -sS "$CLICKHOUSE_URL" -d \
) as b ) as b
FORMAT Null FORMAT Null
SETTINGS max_execution_time = 1, timeout_overflow_mode = 'break' SETTINGS max_execution_time = 1, timeout_overflow_mode = 'break'
" "
echo $? echo $?