github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/drop_column_with_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  
     9  function run() {
    10  	run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    11  	# need to return error three times, first for switch to remote binlog, second for auto retry
    12  	inject_points=(
    13  		"github.com/pingcap/tiflow/dm/syncer/binlogstream/SyncerGetEventError=1*return"
    14  		"github.com/pingcap/tiflow/dm/syncer/binlogstream/GetEventError=3*return"
    15  	)
    16  	export GO_FAILPOINTS="$(join_string \; ${inject_points[@]})"
    17  
    18  	# start DM worker and master
    19  	run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml
    20  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
    21  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
    22  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
    23  
    24  	# operate mysql config to worker
    25  	cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml
    26  	sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml
    27  	dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1
    28  
    29  	# start DM task. don't check error because it will meet injected error soon
    30  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    31  		"start-task $cur/conf/dm-task.yaml --remove-meta"
    32  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    33  		"query-status test" \
    34  		"\"relayCatchUpMaster\": true" 1
    35  
    36  	# use sync_diff_inspector to check full dump loader
    37  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
    38  
    39  	check_log_contain_with_retry "mock upstream instance restart" $WORK_DIR/worker1/log/dm-worker.log
    40  	check_log_contain_with_retry "meet error when read from local binlog, will switch to remote binlog" $WORK_DIR/worker1/log/dm-worker.log
    41  
    42  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    43  		"query-status test" \
    44  		"go-mysql returned an error" 1 \
    45  		"\"stage\": \"Paused\"" 1 \
    46  		"\"isCanceled\": false" 1
    47  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    48  		"pause-task test" \
    49  		"\"result\": true" 2 \
    50  		"go-mysql returned an error" 1
    51  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    52  		"query-status test" \
    53  		"go-mysql returned an error" 1 \
    54  		"\"stage\": \"Paused\"" 1 \
    55  		"\"isCanceled\": true" 1
    56  
    57  	sleep 5
    58  	check_log_not_contains $WORK_DIR/worker1/log/dm-worker.log "dispatch auto resume task"
    59  
    60  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    61  		"resume-task test" \
    62  		"\"result\": true" 2
    63  
    64  	run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    65  
    66  	# use sync_diff_inspector to check data now!
    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  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    71  		"query-status test" \
    72  		"\"stage\": \"Running\"" 2 \
    73  		"\"synced\": true" 1
    74  
    75  	# check column covered by multi-column indices won't drop, and its indices won't drop
    76  	run_sql "alter table drop_column_with_index.t1 drop column c2;" $MYSQL_PORT1 $MYSQL_PASSWORD1
    77  	run_sql "show index from drop_column_with_index.t1" $TIDB_PORT $TIDB_PASSWORD
    78  	check_count "Column_name: c2" 3
    79  
    80  	export GO_FAILPOINTS=""
    81  }
    82  
    83  cleanup_data drop_column_with_index
    84  # also cleanup dm processes in case of last run failed
    85  cleanup_process $*
    86  run $*
    87  cleanup_process $*
    88  
    89  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"