github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/handle_error_3/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  source $cur/../_utils/handle_error_lib.sh
     8  WORK_DIR=$TEST_DIR/$TEST_NAME
     9  
    10  # 4189, 4190, 4191, 4192, 4214, 4218
    11  function DM_4189_CASE() {
    12  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
    13  	run_sql_source2 "insert into ${db}.${tb1} values(2);"
    14  	run_sql_source1 "alter table ${db}.${tb1} add column c varchar(20) character set utf32;"
    15  	run_sql_source2 "alter table ${db}.${tb1} add column c varchar(20) character set utf32;"
    16  
    17  	run_sql_source1 "insert into ${db}.${tb1} values(3,3);"
    18  	run_sql_source2 "insert into ${db}.${tb1} values(4,4);"
    19  
    20  	run_sql_source1 "alter table ${db}.${tb1} add column d varchar(20) character set utf32;"
    21  	run_sql_source2 "alter table ${db}.${tb1} add column d varchar(20) character set utf32;"
    22  
    23  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    24  		"query-status test" \
    25  		"Unknown character set" 2
    26  
    27  	first_pos1=$(get_start_pos 127.0.0.1:$MASTER_PORT $source1)
    28  	first_pos2=$(get_start_pos 127.0.0.1:$MASTER_PORT $source2)
    29  	first_name1=$(get_start_name 127.0.0.1:$MASTER_PORT $source1)
    30  	first_name2=$(get_start_name 127.0.0.1:$MASTER_PORT $source2)
    31  	second_pos1=$(get_next_query_pos $MYSQL_PORT1 $MYSQL_PASSWORD1 $first_pos1)
    32  	second_pos2=$(get_next_query_pos $MYSQL_PORT2 $MYSQL_PASSWORD2 $first_pos2)
    33  
    34  	if [ "$second_pos1" = "$second_pos2" ]; then
    35  		run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    36  			"binlog replace test -b $first_name1:$second_pos1 alter table ${db}.${tb1} add column d varchar(20);" \
    37  			"\"result\": true" 3
    38  	else
    39  		# WARN: may replace unknown event like later insert, test will fail
    40  		# It hasn't happened yet.
    41  		run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    42  			"binlog replace test -b $first_name1:$second_pos1 alter table ${db}.${tb1} add column d varchar(20);" \
    43  			"\"result\": true" 3
    44  
    45  		run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    46  			"query-status test" \
    47  			"Unknown character set" 2
    48  
    49  		run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    50  			"binlog replace test -b $first_name2:$second_pos2 alter table ${db}.${tb1} add column d varchar(20);" \
    51  			"\"result\": true" 3
    52  	fi
    53  
    54  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    55  		"query-status test" \
    56  		"Unknown character set" 2
    57  
    58  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    59  		"binlog replace test alter table ${db}.${tb1} add column c varchar(20);" \
    60  		"\"result\": true" 3
    61  
    62  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    63  		"query-status test" \
    64  		"\"result\": true" 3
    65  
    66  	run_sql_source1 "insert into ${db}.${tb1} values(5,5,5);"
    67  	run_sql_source2 "insert into ${db}.${tb1} values(6,6,6);"
    68  
    69  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where id<100;" "count(1): 6"
    70  }
    71  
    72  function DM_4189() {
    73  	run_case 4189 "double-source-pessimistic" "init_table 11 21" "clean_table" "pessimistic"
    74  	run_case 4189 "double-source-optimistic" "init_table 11 21" "clean_table" "optimistic"
    75  
    76  	# test different error locations
    77  	run_case 4189 "double-source-pessimistic" "init_table 11 21;run_sql_source1 \"insert into ${db}.${tb1} values(100);\"" "clean_table" "pessimistic"
    78  	run_case 4189 "double-source-optimistic" "init_table 11 21;run_sql_source1 \"insert into ${db}.${tb1} values(100);\"" "clean_table" "optimistic"
    79  }
    80  
    81  # 4210, 4212
    82  function DM_4210_CASE() {
    83  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
    84  	run_sql_source1 "alter table ${db}.${tb1} add column c int unique;"
    85  	run_sql_source1 "insert into ${db}.${tb1} values(2,2);"
    86  	run_sql_source1 "alter table ${db}.${tb1} add column d int unique;"
    87  
    88  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    89  		"query-status test" \
    90  		"unsupported add column 'c' constraint UNIQUE KEY" 1
    91  
    92  	first_pos1=$(get_start_pos 127.0.0.1:$MASTER_PORT $source1)
    93  	first_name1=$(get_start_name 127.0.0.1:$MASTER_PORT $source1)
    94  	second_pos1=$(get_next_query_pos $MYSQL_PORT1 $MYSQL_PASSWORD1 $first_pos1)
    95  
    96  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    97  		"binlog replace test -b $first_name1:$second_pos1 alter table ${db}.${tb1} add column d int;alter table ${db}.${tb1} add unique(d);" \
    98  		"\"result\": true" 2
    99  
   100  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   101  		"query-status test" \
   102  		"unsupported add column 'c' constraint UNIQUE KEY" 1
   103  
   104  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   105  		"binlog replace test alter table ${db}.${tb1} add column e int unique;" \
   106  		"\"result\": true" 2
   107  
   108  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   109  		"query-status test" \
   110  		"unsupported add column 'e' constraint UNIQUE KEY" 1
   111  
   112  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   113  		"binlog replace test alter table ${db}.${tb1} add column c int;alter table ${db}.${tb1} add unique(c);" \
   114  		"\"result\": true" 2
   115  
   116  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   117  		"query-status test" \
   118  		"\"result\": true" 2
   119  
   120  	run_sql_source1 "insert into ${db}.${tb1} values(3,3,3);"
   121  
   122  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb} where id<100;" "count(1): 3"
   123  }
   124  
   125  function DM_4210() {
   126  	run_case 4210 "single-source-no-sharding" "init_table 11" "clean_table" ""
   127  }
   128  
   129  # 4193, 4221, 4225, 4227, 4228
   130  function DM_4193_CASE() {
   131  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
   132  	run_sql_source2 "insert into ${db}.${tb1} values(2);"
   133  
   134  	run_sql_source1 "alter table ${db}.${tb1} modify id varchar(10);"
   135  	run_sql_source1 "alter table ${db}.${tb1} modify id varchar(20);"
   136  	run_sql_source1 "alter table ${db}.${tb1} modify id varchar(30);"
   137  
   138  	run_sql_source2 "alter table ${db}.${tb1} modify id varchar(10);"
   139  	run_sql_source2 "alter table ${db}.${tb1} modify id varchar(20);"
   140  	run_sql_source2 "alter table ${db}.${tb1} modify id varchar(30);"
   141  
   142  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   143  		"query-status test" \
   144  		"Unsupported modify column: this column has primary key flag" 2
   145  
   146  	first_pos1=$(get_start_pos 127.0.0.1:$MASTER_PORT $source1)
   147  	first_pos2=$(get_start_pos 127.0.0.1:$MASTER_PORT $source2)
   148  	first_name1=$(get_start_name 127.0.0.1:$MASTER_PORT $source1)
   149  	first_name2=$(get_start_name 127.0.0.1:$MASTER_PORT $source2)
   150  
   151  	temp_pos1=$(get_next_query_pos $MYSQL_PORT1 $MYSQL_PASSWORD1 $first_pos1)
   152  	temp_pos2=$(get_next_query_pos $MYSQL_PORT2 $MYSQL_PASSWORD2 $first_pos2)
   153  	second_pos1=$(get_next_query_pos $MYSQL_PORT1 $MYSQL_PASSWORD1 $temp_pos1)
   154  	second_pos2=$(get_next_query_pos $MYSQL_PORT2 $MYSQL_PASSWORD2 $temp_pos2)
   155  
   156  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   157  		"binlog skip test -s $source1 -b $first_name1:$first_pos1" \
   158  		"\"result\": true" 2
   159  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   160  		"binlog skip test -s $source2 -b $first_name2:$first_pos2" \
   161  		"\"result\": true" 2
   162  
   163  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   164  		"query-status test" \
   165  		"Unsupported modify column: this column has primary key flag" 2
   166  
   167  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   168  		"binlog revert test -s $source1 -b $first_name1:$first_pos1" \
   169  		"operator not exist" 1
   170  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   171  		"binlog revert test -s $source2 -b $first_name2:$first_pos2" \
   172  		"operator not exist" 1
   173  
   174  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   175  		"binlog skip test -s $source1 -b $first_name1:$second_pos1" \
   176  		"\"result\": true" 2
   177  
   178  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   179  		"binlog revert test -b $first_name1:$second_pos1" \
   180  		"operator not exist" 1
   181  
   182  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   183  		"binlog skip test -s $source1 -b $first_name1:$second_pos1" \
   184  		"\"result\": true" 2
   185  
   186  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   187  		"binlog revert test -s $source2 -b $first_name2:$second_pos2" \
   188  		"operator not exist" 1
   189  
   190  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   191  		"query-status test" \
   192  		'"stage": "Paused"' 2
   193  
   194  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   195  		"binlog skip test" \
   196  		"\"result\": true" 3
   197  
   198  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   199  		"query-status test" \
   200  		"Unsupported modify column: this column has primary key flag" 1
   201  
   202  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   203  		"binlog skip test" \
   204  		"\"result\": true" 2
   205  
   206  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   207  		"query-status test" \
   208  		"\"result\": true" 3
   209  
   210  	run_sql_source1 "insert into ${db}.${tb1} values(3);"
   211  	run_sql_source2 "insert into ${db}.${tb1} values(4);"
   212  
   213  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb};" "count(1): 4"
   214  }
   215  
   216  function DM_4193() {
   217  	run_case 4193 "double-source-pessimistic" "init_table 11 21" "clean_table" "pessimistic"
   218  	run_case 4193 "double-source-optimistic" "init_table 11 21" "clean_table" "optimistic"
   219  }
   220  
   221  function DM_4230_CASE() {
   222  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
   223  	run_sql_source1 "alter table ${db}.${tb1} add column c int unique;"
   224  
   225  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   226  		"query-status test" \
   227  		"unsupported add column 'c' constraint UNIQUE KEY" 1
   228  
   229  	run_sql_source1 "insert into ${db}.${tb1} values(2,2);"
   230  
   231  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   232  		"binlog replace test alter table ${db}.${tb1} add column d int unique;" \
   233  		"\"result\": true" 2
   234  
   235  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   236  		"query-status test" \
   237  		"unsupported add column 'd' constraint UNIQUE KEY" 1
   238  
   239  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   240  		"binlog revert test" \
   241  		"\"result\": true" 2
   242  
   243  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   244  		"query-status test" \
   245  		"unsupported add column 'c' constraint UNIQUE KEY" 1
   246  
   247  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   248  		"binlog replace test alter table ${db}.${tb1} add column c int;" \
   249  		"\"result\": true" 2
   250  
   251  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   252  		"query-status test" \
   253  		"\"result\": true" 2
   254  
   255  	run_sql_source1 "insert into ${db}.${tb1} values(3,3);"
   256  
   257  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb};" "count(1): 3"
   258  }
   259  
   260  function DM_4230() {
   261  	run_case 4230 "single-source-no-sharding" "init_table 11" "clean_table" ""
   262  }
   263  
   264  # 4177, 4178, 4179, 4181, 4183, 4188, 4180, 4182
   265  function DM_4177_CASE() {
   266  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
   267  	run_sql_source1 "alter table ${db}.${tb1} modify id varchar(10);"
   268  
   269  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   270  		"query-status test" \
   271  		"Unsupported modify column" 1
   272  
   273  	start_location=$(get_start_location 127.0.0.1:$MASTER_PORT $source1)
   274  
   275  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   276  		"binlog skip wrong-task" \
   277  		"\"result\": false" 1 \
   278  		"task wrong-task.*not exist" 1
   279  
   280  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   281  		"binlog skip" \
   282  		"Usage" 1
   283  
   284  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   285  		"binlog skip test -b $start_location -s wrong-source" \
   286  		"source wrong-source.*not found" 1
   287  
   288  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   289  		"binlog skip test -b mysql-bin|1111 -s wrong-source" \
   290  		"invalid --binlog-pos" 1
   291  
   292  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   293  		"query-status test" \
   294  		"Unsupported modify column" 1
   295  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   296  		"binlog skip test" \
   297  		"\"result\": true" 2
   298  
   299  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   300  		"binlog skip test" \
   301  		"\"result\": false" 1 \
   302  		"source.*has no error" 1
   303  
   304  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   305  		"binlog replace test \"alter table ${db}.${tb1} add column c int;\"" \
   306  		"\"result\": false" 1 \
   307  		"source.*has no error" 1
   308  
   309  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   310  		"binlog skip test -b mysql-bin.000000:00000" \
   311  		"\"result\": true" 2
   312  
   313  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   314  		"binlog aaa test" \
   315  		"Available Commands" 1
   316  
   317  	run_sql_source1 "insert into ${db}.${tb1} values(2);"
   318  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb};" "count(1): 2"
   319  }
   320  
   321  function DM_4177() {
   322  	run_case 4177 "single-source-no-sharding" "init_table 11" "clean_table" ""
   323  	# 4184
   324  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   325  		"binlog skip test" \
   326  		"task.*not exist" 1
   327  	# 4223
   328  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   329  		"binlog replace test alter table ${db}.${tb1} add column c int" \
   330  		"task.*not exist" 1
   331  	# 4197
   332  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   333  		"binlog revert test" \
   334  		"task.*not exist" 1
   335  }
   336  
   337  function DM_4231_CASE() {
   338  	# trigger a flush checkpoint
   339  	run_sql_source1 "alter table ${db}.${tb1} add key (id);"
   340  
   341  	run_sql_source1 "insert into ${db}.${tb1} values(1);"
   342  	run_sql_source1 "alter table ${db}.${tb1} add column c int unique;"
   343  
   344  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   345  		"query-status test" \
   346  		"unsupported add column 'c' constraint UNIQUE KEY" 1
   347  
   348  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   349  		"binlog replace test \"alter table ${db}.${tb1} add column c int; alter table ${db}.${tb1} add column d int unique;\"" \
   350  		"\"result\": true" 2
   351  
   352  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   353  		"query-status test" \
   354  		"unsupported add column 'd' constraint UNIQUE KEY" 1
   355  
   356  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   357  		"binlog skip test" \
   358  		"\"result\": true" 2
   359  
   360  	run_sql_source1 "insert into ${db}.${tb1} values(2,2);"
   361  	run_sql_tidb_with_retry "select count(1) from ${db}.${tb};" "count(1): 2"
   362  }
   363  
   364  function DM_4231() {
   365  	run_case 4231 "single-source-no-sharding" "init_table 11" "clean_table" ""
   366  }
   367  
   368  function run() {
   369  	init_cluster
   370  	init_database
   371  
   372  	implement=(4189 4210 4193 4230 4177 4231)
   373  	for i in ${implement[@]}; do
   374  		DM_${i}
   375  		sleep 1
   376  	done
   377  }
   378  
   379  cleanup_data $db
   380  # also cleanup dm processes in case of last run failed
   381  cleanup_process $*
   382  run $*
   383  cleanup_process $*
   384  
   385  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"