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