github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/sharding2/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.dropdb.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 11 check_contains 'Query OK' 12 run_sql_file $cur/data/db2.dropdb.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 13 check_contains 'Query OK' 14 15 run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 16 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 17 18 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 19 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 20 # operate mysql config to worker 21 cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml 22 cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml 23 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml 24 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker2/relay_log" $WORK_DIR/source2.yaml 25 dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1 26 27 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 28 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 29 dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2 30 31 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 32 "start-relay -s $SOURCE_ID2 worker2" \ 33 "\"result\": true" 2 34 35 # start DM task only 36 dmctl_start_task 37 38 run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 39 run_sql_file $cur/data/db2.increment.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 40 41 # use sync_diff_inspector to check data now! 42 echo "check sync diff for the increment replication" 43 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 44 45 # restart DM task 46 dmctl_stop_task test 47 dmctl_start_task 48 49 run_sql_file $cur/data/db1.increment2.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 50 run_sql_file $cur/data/db2.increment2.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 51 52 # use sync_diff_inspector to check data now! 53 echo "check sync diff for the increment replication" 54 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 55 56 echo "kill dm-worker1" 57 kill_process dm-worker1 58 echo "kill dm-worker2" 59 kill_process dm-worker2 60 61 check_port_offline $WORKER1_PORT 20 62 check_port_offline $WORKER2_PORT 20 63 64 export GO_FAILPOINTS='github.com/pingcap/tiflow/dm/syncer/ExitAfterDDLBeforeFlush=return(true)' 65 66 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 67 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 68 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 69 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 70 71 run_sql_file $cur/data/db1.increment3.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 72 run_sql_file $cur/data/db2.increment3.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 73 74 check_port_offline $WORKER1_PORT 20 75 check_port_offline $WORKER2_PORT 20 76 77 # mock recover relay writer 78 export GO_FAILPOINTS='github.com/pingcap/tiflow/dm/relay/MockRecoverRelayWriter=return(true)' 79 80 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 81 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 82 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 83 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 84 85 check_log_contain_with_retry 'mock recover relay writer' $WORK_DIR/worker2/log/dm-worker.log 86 truncate -s 0 $WORK_DIR/worker2/log/dm-worker.log 87 88 run_sql_source1 'insert into sharding22.t1 values(16, "l", 16, 16, 16);' 89 run_sql_source2 'insert into sharding22.t1 values(17, "m", 17, 17, 17);' 90 91 # sync without relay 92 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 93 "stop-relay -s $SOURCE_ID2 worker2" \ 94 "\"result\": true" 2 95 96 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 97 98 # flush logs and flush checkpoints 99 run_sql_source1 'insert into sharding22.t1 values(18, "o", 18, 18, 18);' 100 run_sql_source1 'flush logs;' 101 run_sql_source1 'insert into sharding22.t1 values(19, "p", 19, 19, 19);' 102 run_sql_source1 'alter table sharding22.t1 add column new_col int;' 103 104 run_sql_source2 'insert into sharding22.t1 values(20, "q", 20, 20, 20);' 105 run_sql_source2 'flush logs;' 106 run_sql_source2 'insert into sharding22.t1 values(21, "r", 21, 21, 21);' 107 run_sql_source2 'alter table sharding22.t1 add column new_col int;' 108 109 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 110 111 # start-relay, purge relay dir and pull from checkpoint 112 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 113 "start-relay -s $SOURCE_ID2 worker2" \ 114 "\"result\": true" 2 115 116 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 117 "query-status -s $SOURCE_ID2" \ 118 "\"stage\": \"Running\"" 2 119 120 check_log_contain_with_retry 'will try purge whole relay dir for new relay log' $WORK_DIR/worker2/log/dm-worker.log 121 122 run_sql_source1 'insert into sharding22.t1 values(22, "s", 22, 22, 22, 22);' 123 run_sql_source2 'insert into sharding22.t1 values(23, "s", 23, 23, 23, 23);' 124 125 # use sync_diff_inspector to check data now! 126 echo "check sync diff for the increment replication" 127 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 128 129 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 130 "query-status test" \ 131 "\"stage\": \"Running\"" 3 \ 132 "\"unit\": \"Sync\"" 2 133 } 134 135 cleanup_data db_target 136 # also cleanup dm processes in case of last run failed 137 cleanup_process $* 138 run $* 139 cleanup_process $* 140 141 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"