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