ClickHouse/tests/queries/0_stateless/03032_async_backup_restore.sh
2024-04-18 18:04:10 +02:00

58 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CUR_DIR"/../shell_config.sh
${CLICKHOUSE_CLIENT} -nm --query "
DROP TABLE IF EXISTS tbl;
DROP TABLE IF EXISTS tbl2;
CREATE TABLE tbl (a Int32) ENGINE = MergeTree() ORDER BY tuple();
INSERT INTO tbl VALUES (2), (80), (-12345);
"
function start_async()
{
local command="$1"
local first_column="s/^\([^\t]*\)\t.*/\1/"
${CLICKHOUSE_CLIENT} --query "$command" | sed "${first_column}"
}
function wait_status()
{
local operation_id="$1"
local expected_status="$2"
local timeout=60
local start=$EPOCHSECONDS
while true; do
local current_status
current_status=$(${CLICKHOUSE_CLIENT} --query "SELECT status FROM system.backups WHERE id='${operation_id}'")
if [ "${current_status}" == "${expected_status}" ]; then
echo "${current_status}"
break
fi
if ((EPOCHSECONDS-start > timeout )); then
echo "Timeout while waiting for operation ${operation_id} to come to status ${expected_status}. The current status is ${current_status}."
exit 1
fi
sleep 0.1
done
}
# Making a backup.
backup_name="Disk('backups', '${CLICKHOUSE_TEST_UNIQUE_NAME}')"
backup_operation_id=$(start_async "BACKUP TABLE tbl TO ${backup_name} ASYNC")
wait_status "${backup_operation_id}" "BACKUP_CREATED"
# Restoring from that backup.
restore_operation_id=$(start_async "RESTORE TABLE tbl AS tbl2 FROM ${backup_name} ASYNC")
wait_status "${restore_operation_id}" "RESTORED"
# Check the result of that restoration.
${CLICKHOUSE_CLIENT} --query "SELECT * FROM tbl2"
${CLICKHOUSE_CLIENT} -nm --query "
DROP TABLE tbl;
DROP TABLE tbl2;
"