github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/mariadb_master_down_and_up/case.sh (about) 1 #!/bin/bash 2 3 set -exu 4 5 CUR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 6 PATH=$CUR/../_utils:$PATH # for sync_diff_inspector 7 8 source $CUR/lib.sh 9 10 function clean_data() { 11 echo "-------clean_data--------" 12 13 exec_sql $slave_port "stop slave;" 14 exec_sql $slave_port "reset master;" 15 16 exec_sql $master_port "drop database if exists db1;" 17 exec_sql $master_port "drop database if exists db2;" 18 exec_sql $master_port "drop database if exists ${db};" 19 exec_sql $slave_port "drop database if exists db1;" 20 exec_sql $slave_port "drop database if exists db2;" 21 exec_sql $slave_port "drop database if exists ${db};" 22 exec_sql $slave_port "reset master;" 23 exec_tidb $tidb_port "drop database if exists db1;" 24 exec_tidb $tidb_port "drop database if exists db2;" 25 exec_tidb $tidb_port "drop database if exists ${db};" 26 rm -rf /tmp/dm_test 27 } 28 29 function cleanup_process() { 30 echo "-------cleanup_process--------" 31 pkill -hup dm-worker.test 2>/dev/null || true 32 pkill -hup dm-master.test 2>/dev/null || true 33 pkill -hup dm-syncer.test 2>/dev/null || true 34 } 35 36 function setup_replica() { 37 echo "-------setup_replica--------" 38 39 master_status=($(get_master_status)) 40 master_gtid=$(exec_sql $master_port "select binlog_gtid_pos('${master_status[0]}', ${master_status[1]})" | awk 'NR==2') 41 exec_sql $slave_port "set global gtid_slave_pos = '$master_gtid';" 42 43 # master --> slave 44 change_master_to_gtid $slave_port $master_port 45 } 46 47 function run_dm_components_and_create_source() { 48 echo "-------run_dm_components--------" 49 50 pkill -9 dm-master || true 51 pkill -9 dm-worker || true 52 53 run_dm_master $WORK_DIR/master $MASTER_PORT $CUR/conf/dm-master.toml 54 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 55 "list-member" \ 56 "alive" 1 57 58 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $CUR/conf/dm-worker1.toml 59 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 60 "list-member" \ 61 "free" 1 62 if [ "$1" = "relay" ]; then 63 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 64 "operate-source create $CUR/conf/source1_relay.yaml" \ 65 "\"result\": true" 2 66 else 67 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 68 "operate-source create $CUR/conf/source1.yaml" \ 69 "\"result\": true" 2 70 fi 71 72 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 73 "list-member" \ 74 "alive" 1 \ 75 "bound" 1 76 } 77 78 function gen_full_data() { 79 echo "-------gen_full_data--------" 80 81 exec_sql $master_port "create database ${db} collate latin1_bin;" 82 exec_sql $master_port "create table ${db}.${tb}(id int primary key, a int);" 83 for i in $(seq 1 100); do 84 exec_sql $master_port "insert into ${db}.${tb} values($i,$i);" 85 done 86 } 87 88 function start_task() { 89 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 90 "start-task $CUR/conf/task-pessimistic.yaml --remove-meta" \ 91 "\"result\": true" 2 92 } 93 94 function verify_result() { 95 check_sync_diff $WORK_DIR $CUR/conf/diff_config.toml 96 } 97 98 function clean_task() { 99 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 100 "stop-task task_pessimistic" \ 101 "\"result\": true" 2 102 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 103 "operate-source stop mysql-replica-01" \ 104 "\"result\": true" 2 105 } 106 107 function test_master_down_and_up() { 108 cleanup_process 109 clean_data 110 install_sync_diff 111 setup_replica 112 gen_full_data 113 run_dm_components_and_create_source $1 114 start_task 115 verify_result 116 echo "-------start test--------" 117 118 for i in $(seq 201 250); do 119 exec_sql $master_port "insert into ${db}.${tb} values($i,$i);" 120 done 121 verify_result 122 123 # make master down 124 docker-compose -f $CUR/docker-compose.yml pause mariadb_master 125 # execute sqls in slave 126 for i in $(seq 401 450); do 127 exec_sql $slave_port "insert into ${db}.${tb} values($i,$i);" 128 done 129 verify_result 130 131 # make master up 132 docker-compose -f $CUR/docker-compose.yml unpause mariadb_master 133 for i in $(seq 501 550); do 134 exec_sql $master_port "insert into ${db}.${tb} values($i,$i);" 135 done 136 137 verify_result 138 139 clean_task 140 echo "CASE=test_master_down_and_up $1 success" 141 } 142 143 function run() { 144 wait_mysql 3306 1 145 wait_mysql 3307 2 146 test_master_down_and_up no_relay 147 test_master_down_and_up relay 148 } 149 150 run