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! >>>>>>"