github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/incompatible_ddl_changes/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  API_VERSION="v1alpha1"
     9  
    10  function incompatible_ddl() {
    11  	cleanup_data incompatible_ddl_changes
    12  
    13  	run_dm_master $WORK_DIR/master $MASTER_PORT1 $cur/conf/dm-master.toml
    14  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT1
    15  
    16  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
    17  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
    18  	dmctl_operate_source create $cur/conf/source1.yaml $SOURCE_ID1
    19  
    20  	run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    21  
    22  	dmctl_start_task_standalone $cur/conf/$1
    23  
    24  	run_sql_file $cur/data/db1.increment.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1
    25  
    26  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    27  		"query-status test" \
    28  		"\"result\": true" 2 \
    29  		"\"synced\": true" 1
    30  
    31  	# value range decrease
    32  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_mediumint smallint(6);"
    33  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    34  		"query-status test" \
    35  		"event value range decrease" 1
    36  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    37  		"binlog skip test" \
    38  		"\"result\": true" 2
    39  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_mediumint mediumint(7);"
    40  
    41  	# precision decrease
    42  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_decimal decimal(7,1);"
    43  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    44  		"query-status test" \
    45  		"event precision decrease" 1
    46  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    47  		"binlog skip test" \
    48  		"\"result\": true" 2
    49  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_decimal decimal(7,2);"
    50  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    51  		"query-status test" \
    52  		"event precision decrease" 1
    53  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    54  		"binlog skip test" \
    55  		"\"result\": true" 2
    56  
    57  	# modify column
    58  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_mediumint varchar(10);"
    59  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    60  		"query-status test" \
    61  		"event modify column" 1
    62  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    63  		"binlog skip test" \
    64  		"\"result\": true" 2
    65  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify column c_mediumint mediumint(7);"
    66  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    67  		"query-status test" \
    68  		"event modify column" 1
    69  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    70  		"binlog skip test" \
    71  		"\"result\": true" 2
    72  
    73  	# rename column
    74  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change c_mediumint c_mediumint_new mediumint(7);"
    75  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    76  		"query-status test" \
    77  		"event rename column" 1
    78  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    79  		"binlog skip test" \
    80  		"\"result\": true" 2
    81  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change c_mediumint_new c_mediumint mediumint(7);"
    82  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    83  		"query-status test" \
    84  		"event rename column" 1
    85  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    86  		"binlog skip test" \
    87  		"\"result\": true" 2
    88  
    89  	# drop column
    90  	run_sql_source1 "alter table incompatible_ddl_changes.t1 drop column c_json;"
    91  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    92  		"query-status test" \
    93  		"event drop column" 1
    94  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    95  		"binlog skip test" \
    96  		"\"result\": true" 2
    97  	run_sql_source1 "alter table incompatible_ddl_changes.t1 add column c_json json;"
    98  
    99  	# remove auto increment
   100  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change id id int(11)"
   101  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   102  		"query-status test" \
   103  		"event remove auto increment" 1
   104  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   105  		"binlog skip test" \
   106  		"\"result\": true" 2
   107  
   108  	# drop pk
   109  	run_sql_source1 "alter table incompatible_ddl_changes.t1 drop primary key"
   110  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   111  		"query-status test" \
   112  		"event drop primary key" 1
   113  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   114  		"binlog skip test" \
   115  		"\"result\": true" 2
   116  
   117  	# modify default value
   118  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change c_int c_int int default 1"
   119  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   120  		"query-status test" \
   121  		"event modify default value" 1
   122  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   123  		"binlog skip test" \
   124  		"\"result\": true" 2
   125  
   126  	# modify constraint
   127  	run_sql_source1 "alter table incompatible_ddl_changes.t1 add constraint c_int_unique unique(c_int)"
   128  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   129  		"query-status test" \
   130  		"event modify constraint" 1
   131  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   132  		"binlog skip test" \
   133  		"\"result\": true" 2
   134  
   135  	# drop uk
   136  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change c_int c_int int"
   137  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   138  		"query-status test" \
   139  		"drop unique key" 1
   140  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   141  		"binlog skip test" \
   142  		"\"result\": true" 2
   143  	# drop index
   144  	run_sql_source1 "alter table incompatible_ddl_changes.t1 drop index c_int_unique"
   145  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   146  		"query-status test" \
   147  		"event drop index" 1
   148  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   149  		"binlog skip test" \
   150  		"\"result\": true" 2
   151  
   152  	# modify column order
   153  	run_sql_source1 "alter table incompatible_ddl_changes.t1 change c_smallint c_smallint smallint(6) after c_json"
   154  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   155  		"query-status test" \
   156  		"event modify columns order" 1
   157  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   158  		"binlog skip test" \
   159  		"\"result\": true" 2
   160  
   161  	# modify charset
   162  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify c_char char(4) CHARACTER SET latin1;"
   163  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   164  		"query-status test" \
   165  		"event modify charset" 1
   166  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   167  		"binlog skip test" \
   168  		"\"result\": true" 2
   169  
   170  	# modify collation
   171  	run_sql_source1 "alter table incompatible_ddl_changes.t1 modify c_text text COLLATE utf8mb4_unicode_ci;"
   172  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   173  		"query-status test" \
   174  		"event modify collation" 1
   175  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   176  		"binlog skip test" \
   177  		"\"result\": true" 2
   178  
   179  	# modify storage engine
   180  	run_sql_source1 "alter table incompatible_ddl_changes.t1 engine = MyISAM;"
   181  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   182  		"query-status test" \
   183  		"event modify storage engine" 1
   184  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   185  		"binlog skip test" \
   186  		"\"result\": true" 2
   187  
   188  	# reorganize partition
   189  	run_sql_source1 "alter table incompatible_ddl_changes.t1 partition by range(id) (partition p0 values less than (100000))"
   190  	run_sql_source1 "alter table incompatible_ddl_changes.t1 reorganize partition p0 into ( partition n0 values less than (5), partition n1 values less than (100000));"
   191  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   192  		"query-status test" \
   193  		"event reorganize table partition" 1
   194  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   195  		"binlog skip test" \
   196  		"\"result\": true" 2
   197  
   198  	# truncate partition
   199  	run_sql_source1 "alter table incompatible_ddl_changes.t1 truncate partition n0"
   200  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   201  		"query-status test" \
   202  		"event truncate table partition" 1
   203  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   204  		"binlog skip test" \
   205  		"\"result\": true" 2
   206  
   207  	# rebuild partition
   208  	run_sql_source1 "alter table incompatible_ddl_changes.t1 rebuild partition n0,n1;"
   209  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   210  		"query-status test" \
   211  		"event rebuild table partition" 1
   212  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   213  		"binlog skip test" \
   214  		"\"result\": true" 2
   215  
   216  	# exchange partition
   217  	run_sql_source1 "create table incompatible_ddl_changes.tb1(id int) partition by range(id)(partition p0 values less than (100000), partition p1 values less than(1000000));"
   218  	run_sql_source1 "create table incompatible_ddl_changes.tb2(id int);"
   219  	run_sql_source1 "alter table incompatible_ddl_changes.tb1 exchange partition p0 with table incompatible_ddl_changes.tb2"
   220  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   221  		"query-status test" \
   222  		"event exchange table partition" 1
   223  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   224  		"binlog skip test" \
   225  		"\"result\": true" 2
   226  
   227  	# coalesce partition
   228  	run_sql_source1 "create table incompatible_ddl_changes.tb3(id int) partition by hash(id) partitions 6;"
   229  	run_sql_source1 "alter table incompatible_ddl_changes.tb3 coalesce partition 2;"
   230  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   231  		"query-status test" \
   232  		"event coalesce table partition" 1
   233  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   234  		"binlog skip test" \
   235  		"\"result\": true" 2
   236  
   237  	# rename index
   238  	run_sql_source1 "alter table incompatible_ddl_changes.tb3 add index idx(id);"
   239  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   240  		"query-status test" \
   241  		"event modify constraint" 1
   242  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   243  		"binlog skip test" \
   244  		"\"result\": true" 2
   245  	run_sql_source1 "alter table incompatible_ddl_changes.tb3 rename index idx to idx1;"
   246  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   247  		"query-status test" \
   248  		"event rename index" 1
   249  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   250  		"binlog skip test" \
   251  		"\"result\": true" 2
   252  
   253  	# drop partition
   254  	run_sql_source1 "alter table incompatible_ddl_changes.tb1 drop partition p0;"
   255  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   256  		"query-status test" \
   257  		"event drop table partition" 1
   258  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   259  		"binlog skip test" \
   260  		"\"result\": true" 2
   261  
   262  	# rename table
   263  	run_sql_source1 "rename table incompatible_ddl_changes.tb3 to incompatible_ddl_changes.tb4;"
   264  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   265  		"query-status test" \
   266  		"event rename table" 1
   267  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   268  		"binlog skip test" \
   269  		"\"result\": true" 2
   270  
   271  	# truncate table
   272  	run_sql_source1 "truncate table incompatible_ddl_changes.tb4;"
   273  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   274  		"query-status test" \
   275  		"event truncate table" 1
   276  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   277  		"binlog skip test" \
   278  		"\"result\": true" 2
   279  
   280  	# drop table
   281  	run_sql_source1 "drop table incompatible_ddl_changes.tb4;"
   282  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   283  		"query-status test" \
   284  		"event drop table" 1
   285  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   286  		"binlog skip test" \
   287  		"\"result\": true" 2
   288  
   289  	# drop database
   290  	run_sql_source1 "drop database incompatible_ddl_changes;"
   291  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   292  		"query-status test" \
   293  		"event drop database" 1
   294  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   295  		"binlog skip test" \
   296  		"\"result\": true" 2
   297  
   298  	run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   299  		"stop-task test"
   300  
   301  	cleanup_process $*
   302  	cleanup_data incompatible_ddl_changes
   303  }
   304  
   305  function run() {
   306  	incompatible_ddl dm-task.yaml
   307  	incompatible_ddl dm-task1.yaml
   308  }
   309  
   310  cleanup_data incompatible_ddl_changes
   311  # also cleanup dm processes in case of last run failed
   312  cleanup_process $*
   313  run $*
   314  cleanup_process $*
   315  
   316  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"