From de2100f7f037f26d0c08de6e26dea4e9398e7e2e Mon Sep 17 00:00:00 2001 From: Wenqi Mou Date: Tue, 21 Jan 2025 16:18:41 -0500 Subject: [PATCH] add tests Signed-off-by: Wenqi Mou --- br/tests/br_pitr/check/check_key_types.sh | 73 +++++++++++++++++++ .../br_pitr/incremental_data/key_types.sql | 38 ++++++++++ br/tests/br_pitr/prepare_data/key_types.sql | 33 +++++++++ br/tests/br_pitr/run.sh | 8 +- 4 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 br/tests/br_pitr/check/check_key_types.sh create mode 100644 br/tests/br_pitr/incremental_data/key_types.sql create mode 100644 br/tests/br_pitr/prepare_data/key_types.sql diff --git a/br/tests/br_pitr/check/check_key_types.sh b/br/tests/br_pitr/check/check_key_types.sh new file mode 100644 index 0000000000000..745bee9ff307e --- /dev/null +++ b/br/tests/br_pitr/check/check_key_types.sh @@ -0,0 +1,73 @@ +#!/bin/sh + +echo "=== Verifying Data Integrity ===" + +# Verify original table key data is intact +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.table_key_test;" +check_contains "cnt: 4" +run_sql "SELECT id, name, value FROM key_types_test.table_key_test ORDER BY id;" +check_contains "id: 1" +check_contains "name: test1" +check_contains "value: 100" +check_contains "id: 2" +check_contains "name: test2" +check_contains "value: 200" +check_contains "id: 3" +check_contains "name: test3" +check_contains "value: 300" + +# Verify new table key data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.table_key_test2;" +check_contains "cnt: 1" +run_sql "SELECT id, name, value FROM key_types_test.table_key_test2 ORDER BY id;" +check_contains "id: 1" +check_contains "name: test1" +check_contains "value: 100" + +# Verify original auto increment data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.auto_inc_test;" +check_contains "cnt: 4" +run_sql "SELECT id FROM key_types_test.auto_inc_test ORDER BY id;" +check_contains "id: 1" +check_contains "id: 2" +check_contains "id: 3" +check_contains "id: 4" + +# Verify new auto increment data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.auto_inc_test2;" +check_contains "cnt: 2" +run_sql "SELECT id FROM key_types_test.auto_inc_test2 ORDER BY id;" +check_contains "id: 1" +check_contains "id: 2" + +# Verify original sequence data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.sequence_test;" +check_contains "cnt: 4" +run_sql "SELECT id FROM key_types_test.sequence_test ORDER BY id;" +check_contains "id: 1" +check_contains "id: 3" +check_contains "id: 5" +check_contains "id: 7" + +# Verify new sequence data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.sequence_test2;" +check_contains "cnt: 2" +run_sql "SELECT id FROM key_types_test.sequence_test2 ORDER BY id;" +check_contains "id: 1" +check_contains "id: 3" + +# Verify original auto random data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.auto_random_test;" +check_contains "cnt: 4" +run_sql "SELECT name FROM key_types_test.auto_random_test ORDER BY id;" +check_contains "name: rand1" +check_contains "name: rand2" +check_contains "name: rand3" +check_contains "name: random4" + +# Verify new auto random data +run_sql "SELECT COUNT(*) as cnt FROM key_types_test.auto_random_test2;" +check_contains "cnt: 2" +run_sql "SELECT name FROM key_types_test.auto_random_test2 ORDER BY id;" +check_contains "name: rand1" +check_contains "name: rand2" diff --git a/br/tests/br_pitr/incremental_data/key_types.sql b/br/tests/br_pitr/incremental_data/key_types.sql new file mode 100644 index 0000000000000..8e16bbbf1a948 --- /dev/null +++ b/br/tests/br_pitr/incremental_data/key_types.sql @@ -0,0 +1,38 @@ +-- incremental changes to test during log backup + +-- test existing tables +INSERT INTO key_types_test.table_key_test VALUES (3, 'test3', 300); +INSERT INTO key_types_test.auto_inc_test (name) VALUES ('auto4'); +INSERT INTO key_types_test.sequence_test (name) VALUES ('seq4'); +INSERT INTO key_types_test.auto_random_test (name) VALUES ('random4'); + +-- Create new tables during log backup to test table creation with special keys +-- 1. New table with regular key +CREATE TABLE key_types_test.table_key_test2 ( + id INT PRIMARY KEY NONCLUSTERED, + name VARCHAR(255), + value INT +); +INSERT INTO key_types_test.table_key_test2 VALUES (1, 'test1', 100); + +-- 2. New table with auto increment +CREATE TABLE key_types_test.auto_inc_test2 ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(255) +); +INSERT INTO key_types_test.auto_inc_test2 (name) VALUES ('auto1'), ('auto2'); + +-- 3. New sequence and table using it +CREATE SEQUENCE key_types_test.seq2 START WITH 1 INCREMENT BY 2 NOCACHE; +CREATE TABLE key_types_test.sequence_test2 ( + id INT PRIMARY KEY DEFAULT NEXT VALUE FOR key_types_test.seq2, + name VARCHAR(255) +); +INSERT INTO key_types_test.sequence_test2 (name) VALUES ('seq1'), ('seq2'); + +-- 4. New table with auto random +CREATE TABLE key_types_test.auto_random_test2 ( + id BIGINT PRIMARY KEY AUTO_RANDOM(5), + name VARCHAR(255) +); +INSERT INTO key_types_test.auto_random_test2 (name) VALUES ('rand1'), ('rand2'); diff --git a/br/tests/br_pitr/prepare_data/key_types.sql b/br/tests/br_pitr/prepare_data/key_types.sql new file mode 100644 index 0000000000000..f4b65867be5e5 --- /dev/null +++ b/br/tests/br_pitr/prepare_data/key_types.sql @@ -0,0 +1,33 @@ +-- Test cases for different key types during PITR restore + +-- 1. regular table key +CREATE DATABASE IF NOT EXISTS key_types_test; +CREATE TABLE key_types_test.table_key_test ( + id INT PRIMARY KEY NONCLUSTERED, + name VARCHAR(255), + value INT +); +INSERT INTO key_types_test.table_key_test VALUES (1, 'test1', 100), (2, 'test2', 200); + +-- 2. auto Increment ID Key Test +CREATE TABLE key_types_test.auto_inc_test ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(255) +); + +INSERT INTO key_types_test.auto_inc_test (name) VALUES ('auto1'), ('auto2'), ('auto3'); + +-- 3. sequence Key Test +CREATE SEQUENCE key_types_test.seq1 START WITH 1 INCREMENT BY 2 NOCACHE; +CREATE TABLE key_types_test.sequence_test ( + id INT PRIMARY KEY DEFAULT NEXT VALUE FOR key_types_test.seq1, + name VARCHAR(255) +); +INSERT INTO key_types_test.sequence_test (name) VALUES ('seq1'), ('seq2'), ('seq3'); + +-- 4. auto Random Table ID Key Test +CREATE TABLE key_types_test.auto_random_test ( + id BIGINT PRIMARY KEY AUTO_RANDOM(5), + name VARCHAR(255) +); +INSERT INTO key_types_test.auto_random_test (name) VALUES ('rand1'), ('rand2'), ('rand3'); \ No newline at end of file diff --git a/br/tests/br_pitr/run.sh b/br/tests/br_pitr/run.sh index 0816537b7b087..6ee6a70c0885c 100644 --- a/br/tests/br_pitr/run.sh +++ b/br/tests/br_pitr/run.sh @@ -37,7 +37,7 @@ restart_services_allowing_huge_index echo "prepare the data" run_sql_file $CUR/prepare_data/delete_range.sql run_sql_file $CUR/prepare_data/ingest_repair.sql -# ... +run_sql_file $CUR/prepare_data/key_types.sql # check something after prepare the data prepare_delete_range_count=$(run_sql "select count(*) DELETE_RANGE_CNT from (select * from mysql.gc_delete_range union all select * from mysql.gc_delete_range_done) del_range;" | tail -n 1 | awk '{print $2}') @@ -65,7 +65,7 @@ run_br --pd $PD_ADDR backup full -s "local://$TEST_DIR/$PREFIX/inc" --lastbackup echo "load the incremental data" run_sql_file $CUR/incremental_data/delete_range.sql run_sql_file $CUR/incremental_data/ingest_repair.sql -# ... +run_sql_file $CUR/incremental_data/key_types.sql # run incremental snapshot backup, but this incremental backup will fail to restore. due to limitation of ddl. echo "run incremental backup with special ddl jobs, modify column e.g." @@ -95,6 +95,8 @@ check_result() { check_contains "DELETE_RANGE_CNT: $expect_delete_range" ## check feature compatibility between PITR and accelerate indexing bash $CUR/check/check_ingest_repair.sh + # check key types are restored correctly + bash $CUR/check/check_key_types.sh } # start a new cluster @@ -191,3 +193,5 @@ if [ $restore_fail -ne 1 ]; then echo 'pitr success on file lost' exit 1 fi + +echo "br pitr test passed"