github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/lightning_mode/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 killall tidb-server 2>/dev/null || true 11 killall tikv-server 2>/dev/null || true 12 killall pd-server 2>/dev/null || true 13 14 run_downstream_cluster $WORK_DIR 15 16 run_sql_tidb "drop database if exists lightning_mode;" 17 export GO_FAILPOINTS='github.com/pingcap/tiflow/dm/pkg/conn/VeryLargeTable=return("t1")' 18 19 run_sql_both_source "SET @@GLOBAL.SQL_MODE='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'" 20 21 run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 22 check_contains 'Query OK, 2 rows affected' 23 run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 24 check_contains 'Query OK, 3 rows affected' 25 26 # start DM worker and master 27 run_dm_master_info_log $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 28 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 29 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 30 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 31 32 # operate mysql config to worker 33 cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml 34 cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml 35 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml 36 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker2/relay_log" $WORK_DIR/source2.yaml 37 # make sure source1 is bound to worker1 38 dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1 39 40 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 41 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 42 dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2 43 44 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 45 "check-task $cur/conf/dm-task.yaml" \ 46 "Downstream doesn't have enough space" 1 \ 47 "but we need 4EiB" 1 48 49 export GO_FAILPOINTS='' 50 kill_dm_master 51 run_dm_master_info_log $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 52 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 53 54 # start DM task 55 dmctl_start_task "$cur/conf/dm-task-dup.yaml" "--remove-meta" 56 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 57 "query-status test" \ 58 "\"stage\": \"Paused\"" 1 \ 59 '"progress": "100.00 %"' 2 \ 60 "please check \`dm_meta_test\`.\`conflict_error_v1\` to see the duplication" 1 61 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 62 "resume-task test" \ 63 "\"result\": true" 3 64 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 65 "query-status test" \ 66 'unit": "Sync"' 2 67 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 68 "stop-task test" \ 69 "\"result\": true" 3 70 run_sql_tidb "drop database if exists lightning_mode;" 71 72 # if not set duplicate detection, checksum will fail 73 cp $cur/conf/dm-task-dup.yaml $WORK_DIR/dm-task-dup.yaml 74 sed -i "/on-duplicate-physical/d" $WORK_DIR/dm-task-dup.yaml 75 dmctl_start_task "$WORK_DIR/dm-task-dup.yaml" "--remove-meta" 76 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 77 "query-status test" \ 78 "checksum mismatched, KV number in source files: 6, KV number in TiDB cluster: 3" 1 \ 79 '"unit": "Load"' 2 80 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 81 "resume-task test" 82 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 83 "query-status test" \ 84 'unit": "Sync"' 2 85 86 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 87 "stop-task test" \ 88 "\"result\": true" 3 89 run_sql_tidb "drop database if exists lightning_mode;" 90 run_sql_tidb "drop database if exists dm_meta;" 91 run_sql_tidb "drop database if exists lightning_metadata;" 92 93 task_conf=$(cat $cur/conf/task.json) 94 # create task 95 curl -X POST http://127.0.0.1:8261/api/v1/tasks -H "Content-Type: application/json" -d "$task_conf" 96 # start task 97 curl -X POST http://127.0.0.1:8261/api/v1/tasks/test/start 98 99 # use sync_diff_inspector to check full dump loader 100 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 101 102 run_sql_file $cur/data/db2.increment0.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 103 run_sql_source1 "flush logs" 104 run_sql_file $cur/data/db1.increment0.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 105 106 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 107 108 echo "check dump files have been cleaned" 109 ls $WORK_DIR/worker1/dumped_data.test && exit 1 || echo "worker1 auto removed dump files" 110 ls $WORK_DIR/worker2/dumped_data.test && exit 1 || echo "worker2 auto removed dump files" 111 112 echo "check no password in log" 113 check_log_not_contains $WORK_DIR/master/log/dm-master.log "123456" 114 check_log_not_contains $WORK_DIR/worker1/log/dm-worker.log "123456" 115 check_log_not_contains $WORK_DIR/worker2/log/dm-worker.log "123456" 116 117 run_sql_both_source "SET @@GLOBAL.SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'" 118 119 # restart to standalone tidb 120 killall -9 tidb-server 2>/dev/null || true 121 killall -9 tikv-server 2>/dev/null || true 122 killall -9 pd-server 2>/dev/null || true 123 rm -rf /tmp/tidb || true 124 run_tidb_server 4000 $TIDB_PASSWORD 125 export GO_FAILPOINTS='' 126 } 127 128 #cleanup_data lightning_mode 129 ## also cleanup dm processes in case of last run failed 130 #cleanup_process $* 131 #run $* 132 #cleanup_process $* 133 134 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"