github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/drop_column_with_index/run.sh (about) 1 #!/bin/bash 2 3 set -eu 4 5 cur=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 6 source $cur/../_utils/test_prepare 7 WORK_DIR=$TEST_DIR/$TEST_NAME 8 9 function run() { 10 run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 11 # need to return error three times, first for switch to remote binlog, second for auto retry 12 inject_points=( 13 "github.com/pingcap/tiflow/dm/syncer/binlogstream/SyncerGetEventError=1*return" 14 "github.com/pingcap/tiflow/dm/syncer/binlogstream/GetEventError=3*return" 15 ) 16 export GO_FAILPOINTS="$(join_string \; ${inject_points[@]})" 17 18 # start DM worker and master 19 run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 20 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 21 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 22 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 23 24 # operate mysql config to worker 25 cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml 26 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml 27 dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1 28 29 # start DM task. don't check error because it will meet injected error soon 30 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 31 "start-task $cur/conf/dm-task.yaml --remove-meta" 32 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 33 "query-status test" \ 34 "\"relayCatchUpMaster\": true" 1 35 36 # use sync_diff_inspector to check full dump loader 37 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 38 39 check_log_contain_with_retry "mock upstream instance restart" $WORK_DIR/worker1/log/dm-worker.log 40 check_log_contain_with_retry "meet error when read from local binlog, will switch to remote binlog" $WORK_DIR/worker1/log/dm-worker.log 41 42 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 43 "query-status test" \ 44 "go-mysql returned an error" 1 \ 45 "\"stage\": \"Paused\"" 1 \ 46 "\"isCanceled\": false" 1 47 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 48 "pause-task test" \ 49 "\"result\": true" 2 \ 50 "go-mysql returned an error" 1 51 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 52 "query-status test" \ 53 "go-mysql returned an error" 1 \ 54 "\"stage\": \"Paused\"" 1 \ 55 "\"isCanceled\": true" 1 56 57 sleep 5 58 check_log_not_contains $WORK_DIR/worker1/log/dm-worker.log "dispatch auto resume task" 59 60 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 61 "resume-task test" \ 62 "\"result\": true" 2 63 64 run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 65 66 # use sync_diff_inspector to check data now! 67 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 68 69 run_sql_file $cur/data/db1.increment2.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 70 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 71 "query-status test" \ 72 "\"stage\": \"Running\"" 2 \ 73 "\"synced\": true" 1 74 75 # check column covered by multi-column indices won't drop, and its indices won't drop 76 run_sql "alter table drop_column_with_index.t1 drop column c2;" $MYSQL_PORT1 $MYSQL_PASSWORD1 77 run_sql "show index from drop_column_with_index.t1" $TIDB_PORT $TIDB_PASSWORD 78 check_count "Column_name: c2" 3 79 80 export GO_FAILPOINTS="" 81 } 82 83 cleanup_data drop_column_with_index 84 # also cleanup dm processes in case of last run failed 85 cleanup_process $* 86 run $* 87 cleanup_process $* 88 89 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"