github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/downstream_diff_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 db1="downstream_diff_index1" 9 tb1="t1" 10 db2="downstream_diff_index2" 11 tb2="t2" 12 db="downstream_diff_index" 13 tb="t" 14 15 function run() { 16 # create table in mysql with pk 17 run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 18 run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 19 # create table in tidb with different pk 20 run_sql_file $cur/data/tidb.prepare.sql $TIDB_HOST $TIDB_PORT $TIDB_PASSWORD 21 22 # start DM worker and master 23 run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml 24 check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT 25 26 # worker will inject delete/update sql check 27 inject_points=( 28 "github.com/pingcap/tiflow/pkg/sqlmodel/DownstreamTrackerWhereCheck=return()" 29 ) 30 export GO_FAILPOINTS="$(join_string \; ${inject_points[@]})" 31 run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml 32 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT 33 dmctl_operate_source create $cur/conf/source1.yaml $SOURCE_ID1 34 35 run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml 36 check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT 37 dmctl_operate_source create $cur/conf/source2.yaml $SOURCE_ID2 38 39 # start DM task 40 dmctl_start_task "$cur/conf/dm-task.yaml" "--remove-meta" 41 # check full load data 42 run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where c1<100;" "count(1): 6" 43 44 # downstream create diff uk 45 run_sql_tidb "alter table ${db}.${tb} add unique key(c2);" 46 47 # db1 increment data with update and delete 48 run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 49 # check update data 50 run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where c1=1 and c3='111';" "count(1): 1" 51 check_log_contain_with_retry '\[UpdateWhereColumnsCheck\] \[Columns="\[c2\]"\]' $WORK_DIR/worker1/log/dm-worker.log 52 # check delete data 53 run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where c1=2;" "count(1): 1" 54 check_log_contain_with_retry '\[DeleteWhereColumnsCheck\] \[Columns="\[c2\]"\]' $WORK_DIR/worker1/log/dm-worker.log 55 56 # alter schema to test pk 57 run_sql_tidb "alter table ${db}.${tb} add primary key(c3);" 58 run_sql_source1 "alter table ${db1}.${tb1} drop column c2;" 59 run_sql_source2 "alter table ${db2}.${tb2} drop column c2;" 60 61 # db2 increment data with update and delete 62 run_sql_file $cur/data/db2.increment.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2 63 # check update data 64 run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where c1=3 and c3='333';" "count(1): 1" 65 check_log_contain_with_retry '\[UpdateWhereColumnsCheck\] \[Columns="\[c3\]"\]' $WORK_DIR/worker2/log/dm-worker.log 66 # check delete data 67 run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where c1=1;" "count(1): 1" 68 check_log_contain_with_retry '\[DeleteWhereColumnsCheck\] \[Columns="\[c3\]"\]' $WORK_DIR/worker2/log/dm-worker.log 69 70 run_sql_tidb_with_retry "select count(1) from ${db}.varchar20000 where c=1;" "count(1): 1" 71 } 72 73 cleanup_data downstream_diff_index 74 # also cleanup dm processes in case of last run failed 75 cleanup_process $* 76 run $* 77 cleanup_process $* 78 export GO_FAILPOINTS='' 79 80 echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"