github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/mariadb_master_down_and_up/case.sh (about)

     1  #!/bin/bash
     2  
     3  set -exu
     4  
     5  CUR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
     6  PATH=$CUR/../_utils:$PATH # for sync_diff_inspector
     7  
     8  source $CUR/lib.sh
     9  
    10  function clean_data() {
    11  	echo "-------clean_data--------"
    12  
    13  	exec_sql $slave_port "stop slave;"
    14  	exec_sql $slave_port "reset master;"
    15  
    16  	exec_sql $master_port "drop database if exists db1;"
    17  	exec_sql $master_port "drop database if exists db2;"
    18  	exec_sql $master_port "drop database if exists ${db};"
    19  	exec_sql $slave_port "drop database if exists db1;"
    20  	exec_sql $slave_port "drop database if exists db2;"
    21  	exec_sql $slave_port "drop database if exists ${db};"
    22  	exec_sql $slave_port "reset master;"
    23  	exec_tidb $tidb_port "drop database if exists db1;"
    24  	exec_tidb $tidb_port "drop database if exists db2;"
    25  	exec_tidb $tidb_port "drop database if exists ${db};"
    26  	rm -rf /tmp/dm_test
    27  }
    28  
    29  function cleanup_process() {
    30  	echo "-------cleanup_process--------"
    31  	pkill -hup dm-worker.test 2>/dev/null || true
    32  	pkill -hup dm-master.test 2>/dev/null || true
    33  	pkill -hup dm-syncer.test 2>/dev/null || true
    34  }
    35  
    36  function setup_replica() {
    37  	echo "-------setup_replica--------"
    38  
    39  	master_status=($(get_master_status))
    40  	master_gtid=$(exec_sql $master_port "select binlog_gtid_pos('${master_status[0]}', ${master_status[1]})" | awk 'NR==2')
    41  	exec_sql $slave_port "set global gtid_slave_pos = '$master_gtid';"
    42  
    43  	# master --> slave
    44  	change_master_to_gtid $slave_port $master_port
    45  }
    46  
    47  function run_dm_components_and_create_source() {
    48  	echo "-------run_dm_components--------"
    49  
    50  	pkill -9 dm-master || true
    51  	pkill -9 dm-worker || true
    52  
    53  	run_dm_master $WORK_DIR/master $MASTER_PORT $CUR/conf/dm-master.toml
    54  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    55  		"list-member" \
    56  		"alive" 1
    57  
    58  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $CUR/conf/dm-worker1.toml
    59  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    60  		"list-member" \
    61  		"free" 1
    62  	if [ "$1" = "relay" ]; then
    63  		run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    64  			"operate-source create $CUR/conf/source1_relay.yaml" \
    65  			"\"result\": true" 2
    66  	else
    67  		run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    68  			"operate-source create $CUR/conf/source1.yaml" \
    69  			"\"result\": true" 2
    70  	fi
    71  
    72  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    73  		"list-member" \
    74  		"alive" 1 \
    75  		"bound" 1
    76  }
    77  
    78  function gen_full_data() {
    79  	echo "-------gen_full_data--------"
    80  
    81  	exec_sql $master_port "create database ${db} collate latin1_bin;"
    82  	exec_sql $master_port "create table ${db}.${tb}(id int primary key, a int);"
    83  	for i in $(seq 1 100); do
    84  		exec_sql $master_port "insert into ${db}.${tb} values($i,$i);"
    85  	done
    86  }
    87  
    88  function start_task() {
    89  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    90  		"start-task $CUR/conf/task-pessimistic.yaml --remove-meta" \
    91  		"\"result\": true" 2
    92  }
    93  
    94  function verify_result() {
    95  	check_sync_diff $WORK_DIR $CUR/conf/diff_config.toml
    96  }
    97  
    98  function clean_task() {
    99  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   100  		"stop-task task_pessimistic" \
   101  		"\"result\": true" 2
   102  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   103  		"operate-source stop mysql-replica-01" \
   104  		"\"result\": true" 2
   105  }
   106  
   107  function test_master_down_and_up() {
   108  	cleanup_process
   109  	clean_data
   110  	install_sync_diff
   111  	setup_replica
   112  	gen_full_data
   113  	run_dm_components_and_create_source $1
   114  	start_task
   115  	verify_result
   116  	echo "-------start test--------"
   117  
   118  	for i in $(seq 201 250); do
   119  		exec_sql $master_port "insert into ${db}.${tb} values($i,$i);"
   120  	done
   121  	verify_result
   122  
   123  	# make master down
   124  	docker-compose -f $CUR/docker-compose.yml pause mariadb_master
   125  	# execute sqls in slave
   126  	for i in $(seq 401 450); do
   127  		exec_sql $slave_port "insert into ${db}.${tb} values($i,$i);"
   128  	done
   129  	verify_result
   130  
   131  	# make master up
   132  	docker-compose -f $CUR/docker-compose.yml unpause mariadb_master
   133  	for i in $(seq 501 550); do
   134  		exec_sql $master_port "insert into ${db}.${tb} values($i,$i);"
   135  	done
   136  
   137  	verify_result
   138  
   139  	clean_task
   140  	echo "CASE=test_master_down_and_up $1 success"
   141  }
   142  
   143  function run() {
   144  	wait_mysql 3306 1
   145  	wait_mysql 3307 2
   146  	test_master_down_and_up no_relay
   147  	test_master_down_and_up relay
   148  }
   149  
   150  run