github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/sequence_sharding_removemeta/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 run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 12 13 run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 14 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 15 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 16 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 17 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 18 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 19 # operate mysql config to worker 20 cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml 21 cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml 22 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml 23 sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker2/relay_log" $WORK_DIR/source2.yaml 24 dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1 25 dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2 26 27 check_metric_not_contains $MASTER_PORT 'dm_master_ddl_state_number' 3 28 29 # start DM task only 30 dmctl_start_task 31 32 # use sync_diff_inspector to check full dump loader 33 check_sync_diff $WORK_DIR $cur/conf/diff_config.toml 34 35 run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 36 run_sql_file $cur/data/db2.increment.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 37 38 sleep 3 39 # check task's ddl unsynced locks 40 task_name="sequence_sharding_removemeta" 41 lock_id="$task_name-\`sharding_target3\`.\`t_target\`" 42 ddl="ALTER TABLE \`sharding_target3\`.\`t_target\` ADD COLUMN \`d\` INT" 43 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 44 "shard-ddl-lock" \ 45 "\"ID\": \"$lock_id\"" 1 \ 46 "$ddl" 1 47 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 48 "query-status $TEST_NAME" \ 49 "this DM-worker doesn't receive any shard DDL of this group" 0 \ 50 "\"masterBinlog\": \"\"" 0 51 check_metric $MASTER_PORT 'dm_master_ddl_state_number{task="sequence_sharding_removemeta",type="Un-synced"}' 3 0 2 52 53 dmctl_stop_task $task_name 54 55 # clean downstream data 56 run_sql "drop database if exists sharding_target3" $TIDB_PORT $TIDB_PASSWORD 57 # run all the data 58 run_sql_file $cur/data/db2.increment2.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 59 # start again with remove-meta 60 dmctl_start_task "$cur/conf/dm-task.yaml" "--remove-meta" 61 sleep 3 62 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 63 "shard-ddl-lock" \ 64 "no DDL lock exists" 1 65 check_metric_not_contains $MASTER_PORT 'dm_master_ddl_state_number' 3 66 # use sync_diff_inspector to check full data 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 71 # test unlock-ddl-lock could work after stop-task 72 ddl="ALTER TABLE \`sharding_target3\`.\`t_target\` ADD COLUMN \`f\` INT" 73 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 74 "shard-ddl-lock" \ 75 "\"ID\": \"$lock_id\"" 1 \ 76 "$ddl" 1 77 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 78 "query-status $TEST_NAME" \ 79 "this DM-worker doesn't receive any shard DDL of this group" 1 80 81 check_metric $MASTER_PORT 'dm_master_ddl_state_number{task="sequence_sharding_removemeta",type="Un-synced"}' 3 0 2 82 dmctl_stop_task $task_name 83 84 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 85 "shard-ddl-lock unlock $lock_id" \ 86 "\"result\": true" 1 87 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ 88 "shard-ddl-lock" \ 89 "no DDL lock exists" 1 90 check_metric_not_contains $MASTER_PORT 'dm_master_ddl_state_number' 3 91 } 92 93 cleanup_data sharding_target3 94 # also cleanup dm processes in case of last run failed 95 cleanup_process $* 96 run $* 97 cleanup_process $* 98 99 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"