github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/gbk/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  TASK_NAME="gbk"
     9  
    10  function test_from_tidb() {
    11  	cleanup_data_upstream gbk3
    12  
    13  	# check table can inherited charset from database
    14  	run_sql_source1 "use gbk; create table ddl1(b char(20));"
    15  	run_sql_tidb_with_retry "show create table gbk.ddl1;" "CHARSET=gbk"
    16  
    17  	# can't test "create table as select", because it is not supported in GTID mode
    18  
    19  	# test create table like
    20  	run_sql_source1 "use gbk; create table ddl2(a char(20) charset gbk, b char(20) charset utf8mb4);"
    21  	run_sql_source1 "use gbk; create table ddl2_copy like ddl2; insert into ddl2_copy values('一二三', '一二三');"
    22  	run_sql_tidb_with_retry "select hex(a) from gbk.ddl2_copy;" "D2BBB6FEC8FD"
    23  	run_sql_tidb_with_retry "select hex(b) from gbk.ddl2_copy;" "E4B880E4BA8CE4B889"
    24  
    25  	# test create partition table
    26  	run_sql_source1 "use gbk; create table ddl3(id int, a char(20) charset gbk) partition by hash(id) partitions 4;"
    27  	run_sql_tidb_with_retry "show create table gbk.ddl3;" "CHARSET=gbk"
    28  	run_sql_tidb_with_retry "show create table gbk.ddl3;" "ARTITION BY HASH (\`id\`) PARTITIONS 4"
    29  
    30  	# test alter database charset
    31  	run_sql_source1 "create database gbk3 charset utf8; alter database gbk3 charset gbk;"
    32  	run_sql_tidb_with_retry "show create database gbk3;" "CHARACTER SET gbk"
    33  
    34  	# test client use GBK encoding
    35  	run_sql "create table gbk.ddl4 (c int primary key comment '你好');" $MYSQL_PORT1 $MYSQL_PASSWORD1 "gbk"
    36  	run_sql_tidb_with_retry "show create table gbk.ddl4;" "COMMENT '你好'"
    37  }
    38  
    39  function run() {
    40  	run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml
    41  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
    42  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
    43  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
    44  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
    45  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
    46  
    47  	# operate mysql config to worker
    48  	cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml
    49  	cp $cur/conf/source2.yaml $WORK_DIR/source2.yaml
    50  	dmctl_operate_source create $WORK_DIR/source1.yaml $SOURCE_ID1
    51  	dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2
    52  
    53  	echo "prepare data"
    54  	run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    55  	run_sql_file $cur/data/db2.prepare.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2
    56  
    57  	echo "start task"
    58  	dmctl_start_task $cur/conf/dm-task.yaml "--remove-meta"
    59  
    60  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
    61  
    62  	echo "prepare incremental data"
    63  	run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    64  	run_sql_file $cur/data/db2.increment.sql $MYSQL_HOST2 $MYSQL_PORT2 $MYSQL_PASSWORD2
    65  
    66  	echo "check incremental phase"
    67  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
    68  
    69  	test_from_tidb
    70  
    71  	echo "prepare data for invalid connection test"
    72  	run_sql_source1 "CREATE TABLE IF NOT EXISTS gbk.invalid_conn_test1(i TINYINT, j INT UNIQUE KEY, k TINYINT, m TINYINT, n TINYINT, h TINYINT)"
    73  	run_sql_source1 "CREATE TABLE IF NOT EXISTS gbk.invalid_conn_test2(i TINYINT, j INT UNIQUE KEY, k TINYINT, m TINYINT, n TINYINT, h TINYINT)"
    74  	check_log_contain_with_retry 'finish to handle ddls in normal mode.*CREATE TABLE IF NOT EXISTS gbk.invalid_conn_test2' $WORK_DIR/worker1/log/dm-worker.log $WORK_DIR/worker2/log/dm-worker.log
    75  
    76  	kill_dm_worker
    77  
    78  	# test invalid connection with status running
    79  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"running\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
    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  	echo "start test invalid connection with status running"
    86  
    87  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN j SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
    88  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN j SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
    89  
    90  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` SMALLINT(4) NOT NULL DEFAULT '0'"
    91  	echo "check count"
    92  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` SMALLINT(4) NOT NULL DEFAULT '0'" 1
    93  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
    94  	echo "check test invalid connection with status running successfully"
    95  
    96  	kill_dm_worker
    97  
    98  	# test invalid connection with status queueing
    99  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"queueing\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   100  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   101  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   102  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   103  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   104  
   105  	echo "start test invalid connection with status queueing"
   106  
   107  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN m SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   108  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN m SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   109  
   110  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`m\` SMALLINT(4) NOT NULL DEFAULT '0'"
   111  	echo "check count"
   112  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`m\` SMALLINT(4) NOT NULL DEFAULT '0'" 1
   113  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   114  	echo "check test invalid connection with status queueing successfully"
   115  
   116  	kill_dm_worker
   117  
   118  	# test invalid connection with status none
   119  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"none\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   120  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   121  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   122  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   123  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   124  
   125  	echo "start test invalid connection with status none"
   126  
   127  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN n SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   128  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN n SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   129  
   130  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`n\` SMALLINT(4) NOT NULL DEFAULT '0'"
   131  	echo "check count"
   132  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`n\` SMALLINT(4) NOT NULL DEFAULT '0'" 1
   133  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   134  	echo "check test invalid connection with status none successfully"
   135  
   136  	kill_dm_worker
   137  
   138  	# test inserting data after invalid connection
   139  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   140  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   141  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   142  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   143  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   144  
   145  	echo "start test inserting data after invalid connection"
   146  
   147  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN h SMALLINT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   148  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (1,1,1,1,1,1)"
   149  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (2,2,2,2,2,2)"
   150  
   151  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`h\` SMALLINT(4) NOT NULL DEFAULT '0'"
   152  	echo "check count"
   153  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`h\` SMALLINT(4) NOT NULL DEFAULT '0'" 1
   154  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   155  	echo "check test inserting data after invalid connection successfully"
   156  
   157  	kill_dm_worker
   158  
   159  	# test adding UNIQUE on column with duplicate data
   160  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   161  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   162  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   163  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   164  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   165  
   166  	echo "start test adding UNIQUE on column with duplicate data"
   167  
   168  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (3,3,3,3,3,3)"
   169  	run_sql_tidb "INSERT INTO gbk.invalid_conn_test1 VALUES (3,4,4,4,4,4)"
   170  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 ADD UNIQUE(i)"
   171  
   172  	echo "check cancelled error"
   173  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   174  		"query-status gbk" \
   175  		"origin SQL: \[ALTER TABLE gbk.invalid_conn_test1 ADD UNIQUE(i)\]: DDL ALTER TABLE \`gbk\`.\`invalid_conn_test1\` ADD UNIQUE(\`i\`) executed in background and met error" 1
   176  	# manually synchronize upstream and downstream
   177  	run_sql_tidb "DELETE FROM gbk.invalid_conn_test1 WHERE j=4"
   178  	# manually resume
   179  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   180  		"resume-task gbk" \
   181  		"\"result\": true" 3
   182  	echo "check test adding UNIQUE on column with duplicate data successfully"
   183  
   184  	kill_dm_worker
   185  
   186  	# multi-schema change tests
   187  	# test invalid connection with status running (multi-schema change)
   188  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"running\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   189  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   190  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   191  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   192  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   193  
   194  	echo "start test invalid connection with status running (multi-schema change)"
   195  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN i INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN j INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   196  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN i INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN j INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   197  
   198  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`i\` INT(4) NOT NULL DEFAULT '0'"
   199  	echo "check count 1"
   200  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`i\` INT(4) NOT NULL DEFAULT '0'" 1
   201  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` INT(4) NOT NULL DEFAULT '0'"
   202  	echo "check count 2"
   203  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` INT(4) NOT NULL DEFAULT '0'" 1
   204  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   205  	echo "check test invalid connection with status running (multi-schema change) successfully"
   206  
   207  	kill_dm_worker
   208  
   209  	# test invalid connection with status queueing (multi-schema change)
   210  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"queueing\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   211  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   212  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   213  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   214  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   215  
   216  	echo "start test invalid connection with status queueing (multi-schema change)"
   217  
   218  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN k INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN m INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   219  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN k INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN m INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   220  
   221  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`k\` INT(4) NOT NULL DEFAULT '0'"
   222  	echo "check count 1"
   223  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`k\` INT(4) NOT NULL DEFAULT '0'" 1
   224  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`m\` INT(4) NOT NULL DEFAULT '0'"
   225  	echo "check count 2"
   226  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`m\` INT(4) NOT NULL DEFAULT '0'" 1
   227  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   228  	echo "check test invalid connection with status queueing (multi-schema change) successfully"
   229  
   230  	kill_dm_worker
   231  
   232  	# test invalid connection with status none (multi-schema change)
   233  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/TestStatus=1*return(\"none\");github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   234  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   235  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   236  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   237  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   238  
   239  	echo "start test invalid connection with status none (multi-schema change)"
   240  
   241  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN n INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN h INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   242  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test2 MODIFY COLUMN n INT(4) NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN h INT(4) NOT NULL DEFAULT _UTF8MB4'0'"
   243  
   244  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`n\` INT(4) NOT NULL DEFAULT '0'"
   245  	echo "check count 1"
   246  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`n\` INT(4) NOT NULL DEFAULT '0'" 1
   247  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`h\` INT(4) NOT NULL DEFAULT '0'"
   248  	echo "check count 2"
   249  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`h\` INT(4) NOT NULL DEFAULT '0'" 1
   250  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   251  	echo "check test invalid connection with status none (multi-schema change) successfully"
   252  
   253  	kill_dm_worker
   254  
   255  	# test inserting data after invalid connection (multi-schema change)
   256  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   257  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   258  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   259  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   260  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   261  
   262  	echo "start test inserting data after invalid connection (multi-schema change)"
   263  
   264  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 MODIFY COLUMN i TINYINT NOT NULL DEFAULT _UTF8MB4'0', MODIFY COLUMN j TINYINT NOT NULL DEFAULT _UTF8MB4'0'"
   265  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (5,5,5,5,5,5)"
   266  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (6,6,6,6,6,6)"
   267  
   268  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`i\` TINYINT NOT NULL DEFAULT '0'"
   269  	echo "check count 1"
   270  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`i\` TINYINT NOT NULL DEFAULT '0'" 1
   271  	run_sql_tidb_with_retry "ADMIN SHOW DDL JOB QUERIES LIMIT 10 OFFSET 0" "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` TINYINT NOT NULL DEFAULT '0'"
   272  	echo "check count 2"
   273  	check_count "ALTER TABLE \`gbk\`.\`invalid_conn_test1\` MODIFY COLUMN \`j\` TINYINT NOT NULL DEFAULT '0'" 1
   274  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   275  	echo "check test inserting data after invalid connection (multi-schema change) successfully"
   276  
   277  	kill_dm_worker
   278  
   279  	# test adding UNIQUE on column with duplicate data (multi-schema change)
   280  	export GO_FAILPOINTS="github.com/pingcap/tiflow/dm/syncer/TestHandleSpecialDDLError=return();github.com/pingcap/tiflow/dm/syncer/ChangeDuration=return()"
   281  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
   282  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
   283  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $cur/conf/dm-worker2.toml
   284  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT
   285  
   286  	echo "start test adding UNIQUE on column with duplicate data (multi-schema change)"
   287  
   288  	run_sql_source1 "INSERT INTO gbk.invalid_conn_test1 VALUES (7,7,7,7,7,7)"
   289  	run_sql_tidb "INSERT INTO gbk.invalid_conn_test1 VALUES (8,8,7,7,8,8)"
   290  	run_sql_source1 "ALTER TABLE gbk.invalid_conn_test1 ADD UNIQUE(k), ADD UNIQUE(m)"
   291  
   292  	echo "check cancelled error"
   293  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   294  		"query-status gbk" \
   295  		"origin SQL: \[ALTER TABLE gbk.invalid_conn_test1 ADD UNIQUE(k), ADD UNIQUE(m)\]: DDL ALTER TABLE \`gbk\`.\`invalid_conn_test1\` ADD UNIQUE(\`k\`) executed in background and met error" 1
   296  	echo "check test adding UNIQUE on column with duplicate data (multi-schema change) successfully"
   297  }
   298  
   299  cleanup_data gbk gbk2 gbk3
   300  # also cleanup dm processes in case of last run failed
   301  cleanup_process $*
   302  run $*
   303  cleanup_process $*
   304  
   305  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"