github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/lightning_mode/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  	killall tidb-server 2>/dev/null || true
    11  	killall tikv-server 2>/dev/null || true
    12  	killall pd-server 2>/dev/null || true
    13  
    14  	run_downstream_cluster $WORK_DIR
    15  
    16  	run_sql_tidb "drop database if exists lightning_mode;"
    17  	export GO_FAILPOINTS='github.com/pingcap/tiflow/dm/pkg/conn/VeryLargeTable=return("t1")'
    18  
    19  	run_sql_both_source "SET @@GLOBAL.SQL_MODE='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'"
    20  
    21  	run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    22  	check_contains 'Query OK, 2 rows affected'
    23  	run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2
    24  	check_contains 'Query OK, 3 rows affected'
    25  
    26  	# start DM worker and master
    27  	run_dm_master_info_log $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml
    28  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
    29  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
    30  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
    31  
    32  	# operate mysql config to worker
    33  	cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml
    34  	cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml
    35  	sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml
    36  	sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker2/relay_log" $WORK_DIR/source2.yaml
    37  	# make sure source1 is bound to worker1
    38  	dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1
    39  
    40  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
    41  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
    42  	dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2
    43  
    44  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    45  		"check-task $cur/conf/dm-task.yaml" \
    46  		"Downstream doesn't have enough space" 1 \
    47  		"but we need 4EiB" 1
    48  
    49  	export GO_FAILPOINTS=''
    50  	kill_dm_master
    51  	run_dm_master_info_log $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml
    52  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
    53  
    54  	# start DM task
    55  	dmctl_start_task "$cur/conf/dm-task-dup.yaml" "--remove-meta"
    56  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    57  		"query-status test" \
    58  		"\"stage\": \"Paused\"" 1 \
    59  		'"progress": "100.00 %"' 2 \
    60  		"please check \`dm_meta_test\`.\`conflict_error_v1\` to see the duplication" 1
    61  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    62  		"resume-task test" \
    63  		"\"result\": true" 3
    64  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    65  		"query-status test" \
    66  		'unit": "Sync"' 2
    67  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    68  		"stop-task test" \
    69  		"\"result\": true" 3
    70  	run_sql_tidb "drop database if exists lightning_mode;"
    71  
    72  	# if not set duplicate detection, checksum will fail
    73  	cp $cur/conf/dm-task-dup.yaml $WORK_DIR/dm-task-dup.yaml
    74  	sed -i "/on-duplicate-physical/d" $WORK_DIR/dm-task-dup.yaml
    75  	dmctl_start_task "$WORK_DIR/dm-task-dup.yaml" "--remove-meta"
    76  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    77  		"query-status test" \
    78  		"checksum mismatched, KV number in source files: 6, KV number in TiDB cluster: 3" 1 \
    79  		'"unit": "Load"' 2
    80  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    81  		"resume-task test"
    82  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    83  		"query-status test" \
    84  		'unit": "Sync"' 2
    85  
    86  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    87  		"stop-task test" \
    88  		"\"result\": true" 3
    89  	run_sql_tidb "drop database if exists lightning_mode;"
    90  	run_sql_tidb "drop database if exists dm_meta;"
    91  	run_sql_tidb "drop database if exists lightning_metadata;"
    92  
    93  	task_conf=$(cat $cur/conf/task.json)
    94  	# create task
    95  	curl -X POST http://127.0.0.1:8261/api/v1/tasks -H "Content-Type: application/json" -d "$task_conf"
    96  	# start task
    97  	curl -X POST http://127.0.0.1:8261/api/v1/tasks/test/start
    98  
    99  	# use sync_diff_inspector to check full dump loader
   100  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   101  
   102  	run_sql_file $cur/data/db2.increment0.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2
   103  	run_sql_source1 "flush logs"
   104  	run_sql_file $cur/data/db1.increment0.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
   105  
   106  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   107  
   108  	echo "check dump files have been cleaned"
   109  	ls $WORK_DIR/worker1/dumped_data.test && exit 1 || echo "worker1 auto removed dump files"
   110  	ls $WORK_DIR/worker2/dumped_data.test && exit 1 || echo "worker2 auto removed dump files"
   111  
   112  	echo "check no password in log"
   113  	check_log_not_contains $WORK_DIR/master/log/dm-master.log "123456"
   114  	check_log_not_contains $WORK_DIR/worker1/log/dm-worker.log "123456"
   115  	check_log_not_contains $WORK_DIR/worker2/log/dm-worker.log "123456"
   116  
   117  	run_sql_both_source "SET @@GLOBAL.SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"
   118  
   119  	# restart to standalone tidb
   120  	killall -9 tidb-server 2>/dev/null || true
   121  	killall -9 tikv-server 2>/dev/null || true
   122  	killall -9 pd-server 2>/dev/null || true
   123  	rm -rf /tmp/tidb || true
   124  	run_tidb_server 4000 $TIDB_PASSWORD
   125  	export GO_FAILPOINTS=''
   126  }
   127  
   128  #cleanup_data lightning_mode
   129  ## also cleanup dm processes in case of last run failed
   130  #cleanup_process $*
   131  #run $*
   132  #cleanup_process $*
   133  
   134  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"