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