1include/master-slave.inc 2[connection master] 3*** Test 1 ******************************************************** 4* test native NDB$OLD() conflict resolution 5* test with both allowed "conflict column" types, uint32 and uint64 6******************************************************************* 7insert into mysql.ndb_replication values ("test", "t1", 0, NULL, "NDB$OLD(X)"); 8create table t1 (a int, b varchar(32), X int unsigned, d varchar(9), primary key (a, d)) engine ndb; 9create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb; 10************************************************ 11* some basic positive testing, i.e. no conflicts 12************************************************ 13*** insert some data 14begin; 15insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1'); 16insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12'); 17insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123'); 18insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1'); 19insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12'); 20insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123'); 21commit; 22*** master - update all 23begin; 24update t1 set b="Master t1 X=2", X=X+1; 25update t2 set b="Master t2 c=2", c=c+1; 26commit; 27*** slave - check update all 28select * from t1 order by a, d; 29a b X d 301 Master t1 X=2 2 1 312 Master t1 X=2 2 12 323 Master t1 X=2 2 123 33select * from t2 order by a, d; 34a b c d 351 Master t2 c=2 2 1 362 Master t2 c=2 2 12 373 Master t2 c=2 2 123 38SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 39VARIABLE_VALUE-@init_ndb_conflict_fn_max 400 41SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 42VARIABLE_VALUE-@init_ndb_conflict_fn_old 430 44SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 45VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 460 47SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 48VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 490 50SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 51server_id master_server_id master_epoch count a d 52SELECT * FROM `t1$EX` ORDER BY a, d; 53server_id master_server_id master_epoch count a d 54SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 55SELECT * FROM `t2$EX` ORDER BY a, d; 56*** master - update 2 rows in different tables 57update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2; 58update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3; 59*** slave - check update 2 rows in different tables 60select * from t1 order by a, d; 61a b X d 621 Master t1 X=2 2 1 632 Master t1 a=2 at X=3 3 12 643 Master t1 X=2 2 123 65select * from t2 order by a, d; 66a b c d 671 Master t2 c=2 2 1 682 Master t2 c=2 2 12 693 Master t2 a=3 at c=3 3 123 70SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 71VARIABLE_VALUE-@init_ndb_conflict_fn_max 720 73SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 74VARIABLE_VALUE-@init_ndb_conflict_fn_old 750 76SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 77VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 780 79SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 80VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 810 82SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 83server_id master_server_id master_epoch count a d 84SELECT * FROM `t1$EX` ORDER BY a, d; 85server_id master_server_id master_epoch count a d 86SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 87SELECT * FROM `t2$EX` ORDER BY a, d; 88*** master - delete all 89delete from t1; 90delete from t2; 91*** slave - check delete all 92select * from t1 order by a, d; 93a b X d 94select * from t2 order by a, d; 95a b c d 96SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 97VARIABLE_VALUE-@init_ndb_conflict_fn_max 980 99SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 100VARIABLE_VALUE-@init_ndb_conflict_fn_old 1010 102SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 103VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 1040 105SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 106VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 1070 108SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 109server_id master_server_id master_epoch count a d 110SELECT * FROM `t1$EX` ORDER BY a, d; 111server_id master_server_id master_epoch count a d 112SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 113SELECT * FROM `t2$EX` ORDER BY a, d; 114************************ 115* start conflict testing 116************************ 117*** master - insert some data 118begin; 119insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111'); 120insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222'); 121insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333'); 122insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333'); 123insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111'); 124insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222'); 125insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333'); 126insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333'); 127commit; 128*** slave - check conflict info, no conflicts yet 129SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 130VARIABLE_VALUE-@init_ndb_conflict_fn_max 1310 132SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 133VARIABLE_VALUE-@init_ndb_conflict_fn_old 1340 135SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 136VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 1370 138SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 139VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 1400 141SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 142server_id master_server_id master_epoch count a d 143SELECT * FROM `t1$EX` ORDER BY a, d; 144server_id master_server_id master_epoch count a d 145SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 146SELECT * FROM `t2$EX` ORDER BY a, d; 147*** slave - check insert some data 148select * from t1 order by a, d; 149a b X d 1501 Master t1 a=1 at X=10 10 111 1512 Master t1 a=2 at X=10 10 111222 1523 Master t1 a=3 at X=10 10 111222333 1534 Master t1 a=4 at X=10 10 111222333 154select * from t2 order by a, d; 155a b c d 1561 Master t2 a=1 at c=10 10 111 1572 Master t2 a=2 at c=10 10 111222 1583 Master t2 a=3 at c=10 10 111222333 1594 Master t2 a=4 at c=10 10 111222333 160*** slave - update some data to cause conflicts 161begin; 162update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111'; 163update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222'; 164update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333'; 165update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333'; 166update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1; 167update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2; 168update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3; 169update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4; 170commit; 171*** master - update some data to cause conflicts 172begin; 173update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111'; 174update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222'; 175update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333'; 176delete from t1 where a = 4; 177update t2 set b="Master t2 a=1 at c=11", c=11 where a=1; 178update t2 set b="Master t2 a=2 at c=11", c=11 where a=2; 179update t2 set b="Master t2 a=3 at c=11", c=11 where a=3; 180delete from t2 where a = 4; 181commit; 182*** slave - check conflict info, there should be some 183SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 184VARIABLE_VALUE-@init_ndb_conflict_fn_max 1850 186SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 187VARIABLE_VALUE-@init_ndb_conflict_fn_old 1883 189SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 190VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 1910 192SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 193VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 1940 195SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 196server_id master_server_id master_epoch count a d 1972 1 # 1 # # 1982 1 # 2 # # 1992 1 # 3 # # 200SELECT * FROM `t1$EX` ORDER BY a, d; 201server_id master_server_id master_epoch count a d 2022 1 # # 1 111 2032 1 # # 2 111222 2042 1 # # 3 111222333 205SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 206SELECT * FROM `t2$EX` ORDER BY a, d; 207*** slave - check update some data that causes conflicts 208select * from t1 order by a, d; 209a b X d 2101 Slave t1 a=1 at X=12 12 111 2112 Slave t1 a=2 at X=12 12 111222 2123 Slave t1 a=3 at X=12 12 111222333 213select * from t2 order by a, d; 214a b c d 2151 Master t2 a=1 at c=11 11 111 2162 Master t2 a=2 at c=11 11 111222 2173 Master t2 a=3 at c=11 11 111222333 218*** slave - correct some data to correspond to the master 219update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111'; 220delete from t1 where a = 4; 221*** master - update some data, use higher timestamp 222begin; 223update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111'; 224update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222'; 225update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333'; 226update t2 set b="Master t2 a=1 at c=13", c=13 where a=1; 227update t2 set b="Master t2 a=2 at c=13", c=13 where a=2; 228update t2 set b="Master t2 a=3 at c=13", c=13 where a=3; 229commit; 230*** slave - check conflict info, change depends on calling test 231SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 232VARIABLE_VALUE-@init_ndb_conflict_fn_max 2330 234SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 235VARIABLE_VALUE-@init_ndb_conflict_fn_old 2365 237SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 238VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 2390 240SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 241VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 2420 243SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 244server_id master_server_id master_epoch count a d 2452 1 # 1 # # 2462 1 # 2 # # 2472 1 # 3 # # 2482 1 # 4 # # 2492 1 # 5 # # 250SELECT * FROM `t1$EX` ORDER BY a, d; 251server_id master_server_id master_epoch count a d 2522 1 # # 1 111 2532 1 # # 2 111222 2542 1 # # 2 111222 2552 1 # # 3 111222333 2562 1 # # 3 111222333 257SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 258SELECT * FROM `t2$EX` ORDER BY a, d; 259*** slave - check higer timestamp 260select * from t1 order by a, d; 261a b X d 2621 Master t1 a=1 at X=13 13 111 2632 Slave t1 a=2 at X=12 12 111222 2643 Slave t1 a=3 at X=12 12 111222333 265select * from t2 order by a, d; 266a b c d 2671 Master t2 a=1 at c=13 13 111 2682 Master t2 a=2 at c=13 13 111222 2693 Master t2 a=3 at c=13 13 111222333 270drop table t1, t2; 271*** Test 2 ******************************************************** 272* test native NDB$OLD() conflict resolution 273* test with both allowed "conflict column" types, uint32 and uint64 274* test that setting binlog update option via table works equally well 275******************************************************************* 276set global ndb_log_update_as_write=1; 277update mysql.ndb_replication set binlog_type=4; 278create table t1 (a int, b varchar(32), X bigint unsigned, d varchar(9), primary key (a, d)) engine ndb; 279create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb; 280************************************************ 281* some basic positive testing, i.e. no conflicts 282************************************************ 283*** insert some data 284begin; 285insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1'); 286insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12'); 287insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123'); 288insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1'); 289insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12'); 290insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123'); 291commit; 292*** master - update all 293begin; 294update t1 set b="Master t1 X=2", X=X+1; 295update t2 set b="Master t2 c=2", c=c+1; 296commit; 297*** slave - check update all 298select * from t1 order by a, d; 299a b X d 3001 Master t1 X=2 2 1 3012 Master t1 X=2 2 12 3023 Master t1 X=2 2 123 303select * from t2 order by a, d; 304a b c d 3051 Master t2 c=2 2 1 3062 Master t2 c=2 2 12 3073 Master t2 c=2 2 123 308SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 309VARIABLE_VALUE-@init_ndb_conflict_fn_max 3100 311SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 312VARIABLE_VALUE-@init_ndb_conflict_fn_old 3130 314SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 315VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 3160 317SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 318VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 3190 320SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 321server_id master_server_id master_epoch count a d 322SELECT * FROM `t1$EX` ORDER BY a, d; 323server_id master_server_id master_epoch count a d 324SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 325SELECT * FROM `t2$EX` ORDER BY a, d; 326*** master - update 2 rows in different tables 327update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2; 328update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3; 329*** slave - check update 2 rows in different tables 330select * from t1 order by a, d; 331a b X d 3321 Master t1 X=2 2 1 3332 Master t1 a=2 at X=3 3 12 3343 Master t1 X=2 2 123 335select * from t2 order by a, d; 336a b c d 3371 Master t2 c=2 2 1 3382 Master t2 c=2 2 12 3393 Master t2 a=3 at c=3 3 123 340SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 341VARIABLE_VALUE-@init_ndb_conflict_fn_max 3420 343SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 344VARIABLE_VALUE-@init_ndb_conflict_fn_old 3450 346SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 347VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 3480 349SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 350VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 3510 352SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 353server_id master_server_id master_epoch count a d 354SELECT * FROM `t1$EX` ORDER BY a, d; 355server_id master_server_id master_epoch count a d 356SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 357SELECT * FROM `t2$EX` ORDER BY a, d; 358*** master - delete all 359delete from t1; 360delete from t2; 361*** slave - check delete all 362select * from t1 order by a, d; 363a b X d 364select * from t2 order by a, d; 365a b c d 366SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 367VARIABLE_VALUE-@init_ndb_conflict_fn_max 3680 369SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 370VARIABLE_VALUE-@init_ndb_conflict_fn_old 3710 372SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 373VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 3740 375SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 376VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 3770 378SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 379server_id master_server_id master_epoch count a d 380SELECT * FROM `t1$EX` ORDER BY a, d; 381server_id master_server_id master_epoch count a d 382SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 383SELECT * FROM `t2$EX` ORDER BY a, d; 384************************ 385* start conflict testing 386************************ 387*** master - insert some data 388begin; 389insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111'); 390insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222'); 391insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333'); 392insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333'); 393insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111'); 394insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222'); 395insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333'); 396insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333'); 397commit; 398*** slave - check conflict info, no conflicts yet 399SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 400VARIABLE_VALUE-@init_ndb_conflict_fn_max 4010 402SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 403VARIABLE_VALUE-@init_ndb_conflict_fn_old 4040 405SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 406VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 4070 408SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 409VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 4100 411SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 412server_id master_server_id master_epoch count a d 413SELECT * FROM `t1$EX` ORDER BY a, d; 414server_id master_server_id master_epoch count a d 415SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 416SELECT * FROM `t2$EX` ORDER BY a, d; 417*** slave - check insert some data 418select * from t1 order by a, d; 419a b X d 4201 Master t1 a=1 at X=10 10 111 4212 Master t1 a=2 at X=10 10 111222 4223 Master t1 a=3 at X=10 10 111222333 4234 Master t1 a=4 at X=10 10 111222333 424select * from t2 order by a, d; 425a b c d 4261 Master t2 a=1 at c=10 10 111 4272 Master t2 a=2 at c=10 10 111222 4283 Master t2 a=3 at c=10 10 111222333 4294 Master t2 a=4 at c=10 10 111222333 430*** slave - update some data to cause conflicts 431begin; 432update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111'; 433update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222'; 434update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333'; 435update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333'; 436update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1; 437update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2; 438update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3; 439update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4; 440commit; 441*** master - update some data to cause conflicts 442begin; 443update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111'; 444update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222'; 445update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333'; 446delete from t1 where a = 4; 447update t2 set b="Master t2 a=1 at c=11", c=11 where a=1; 448update t2 set b="Master t2 a=2 at c=11", c=11 where a=2; 449update t2 set b="Master t2 a=3 at c=11", c=11 where a=3; 450delete from t2 where a = 4; 451commit; 452*** slave - check conflict info, there should be some 453SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 454VARIABLE_VALUE-@init_ndb_conflict_fn_max 4550 456SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 457VARIABLE_VALUE-@init_ndb_conflict_fn_old 4583 459SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 460VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 4610 462SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 463VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 4640 465SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 466server_id master_server_id master_epoch count a d 4672 1 # 1 # # 4682 1 # 2 # # 4692 1 # 3 # # 470SELECT * FROM `t1$EX` ORDER BY a, d; 471server_id master_server_id master_epoch count a d 4722 1 # # 1 111 4732 1 # # 2 111222 4742 1 # # 3 111222333 475SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 476SELECT * FROM `t2$EX` ORDER BY a, d; 477*** slave - check update some data that causes conflicts 478select * from t1 order by a, d; 479a b X d 4801 Slave t1 a=1 at X=12 12 111 4812 Slave t1 a=2 at X=12 12 111222 4823 Slave t1 a=3 at X=12 12 111222333 483select * from t2 order by a, d; 484a b c d 4851 Master t2 a=1 at c=11 11 111 4862 Master t2 a=2 at c=11 11 111222 4873 Master t2 a=3 at c=11 11 111222333 488*** slave - correct some data to correspond to the master 489update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111'; 490delete from t1 where a = 4; 491*** master - update some data, use higher timestamp 492begin; 493update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111'; 494update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222'; 495update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333'; 496update t2 set b="Master t2 a=1 at c=13", c=13 where a=1; 497update t2 set b="Master t2 a=2 at c=13", c=13 where a=2; 498update t2 set b="Master t2 a=3 at c=13", c=13 where a=3; 499commit; 500*** slave - check conflict info, change depends on calling test 501SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 502VARIABLE_VALUE-@init_ndb_conflict_fn_max 5030 504SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 505VARIABLE_VALUE-@init_ndb_conflict_fn_old 5065 507SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 508VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 5090 510SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 511VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 5120 513SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 514server_id master_server_id master_epoch count a d 5152 1 # 1 # # 5162 1 # 2 # # 5172 1 # 3 # # 5182 1 # 4 # # 5192 1 # 5 # # 520SELECT * FROM `t1$EX` ORDER BY a, d; 521server_id master_server_id master_epoch count a d 5222 1 # # 1 111 5232 1 # # 2 111222 5242 1 # # 2 111222 5252 1 # # 3 111222333 5262 1 # # 3 111222333 527SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 528SELECT * FROM `t2$EX` ORDER BY a, d; 529*** slave - check higer timestamp 530select * from t1 order by a, d; 531a b X d 5321 Master t1 a=1 at X=13 13 111 5332 Slave t1 a=2 at X=12 12 111222 5343 Slave t1 a=3 at X=12 12 111222333 535select * from t2 order by a, d; 536a b c d 5371 Master t2 a=1 at c=13 13 111 5382 Master t2 a=2 at c=13 13 111222 5393 Master t2 a=3 at c=13 13 111222333 540drop table t1, t2; 541*** Test 3 *********************************************************** 542* test that setting binlog type really also sets the "USE_UPDATE" flag 543* in this case it will result in conflict resolution failure, as 544* update_row never gets called 545* ******************************************************************** 546set global ndb_log_update_as_write=0; 547update mysql.ndb_replication set binlog_type=2; 548create table t1 (a int, b varchar(32), X int unsigned, d varchar(9), primary key (a, d)) engine ndb; 549create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb; 550************************************************ 551* some basic positive testing, i.e. no conflicts 552************************************************ 553*** insert some data 554begin; 555insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1'); 556insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12'); 557insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123'); 558insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1'); 559insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12'); 560insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123'); 561commit; 562*** master - update all 563begin; 564update t1 set b="Master t1 X=2", X=X+1; 565update t2 set b="Master t2 c=2", c=c+1; 566commit; 567*** slave - check update all 568select * from t1 order by a, d; 569a b X d 5701 Master t1 a=1 at X=1 1 1 5712 Master t1 a=2 at X=1 1 12 5723 Master t1 a=3 at X=1 1 123 573select * from t2 order by a, d; 574a b c d 5751 Master t2 c=2 2 1 5762 Master t2 c=2 2 12 5773 Master t2 c=2 2 123 578SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 579VARIABLE_VALUE-@init_ndb_conflict_fn_max 5800 581SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 582VARIABLE_VALUE-@init_ndb_conflict_fn_old 5833 584SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 585VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 5860 587SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 588VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 5890 590SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 591server_id master_server_id master_epoch count a d 5922 1 # 1 # # 5932 1 # 2 # # 5942 1 # 3 # # 595SELECT * FROM `t1$EX` ORDER BY a, d; 596server_id master_server_id master_epoch count a d 5972 1 # # 1 1 5982 1 # # 2 12 5992 1 # # 3 123 600SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 601SELECT * FROM `t2$EX` ORDER BY a, d; 602*** master - update 2 rows in different tables 603update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2; 604update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3; 605*** slave - check update 2 rows in different tables 606select * from t1 order by a, d; 607a b X d 6081 Master t1 a=1 at X=1 1 1 6092 Master t1 a=2 at X=1 1 12 6103 Master t1 a=3 at X=1 1 123 611select * from t2 order by a, d; 612a b c d 6131 Master t2 c=2 2 1 6142 Master t2 c=2 2 12 6153 Master t2 a=3 at c=3 3 123 616SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 617VARIABLE_VALUE-@init_ndb_conflict_fn_max 6180 619SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 620VARIABLE_VALUE-@init_ndb_conflict_fn_old 6214 622SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 623VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 6240 625SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 626VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 6270 628SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 629server_id master_server_id master_epoch count a d 6302 1 # 1 # # 6312 1 # 2 # # 6322 1 # 3 # # 6332 1 # 4 # # 634SELECT * FROM `t1$EX` ORDER BY a, d; 635server_id master_server_id master_epoch count a d 6362 1 # # 1 1 6372 1 # # 2 12 6382 1 # # 2 12 6392 1 # # 3 123 640SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 641SELECT * FROM `t2$EX` ORDER BY a, d; 642*** master - delete all 643delete from t1; 644delete from t2; 645*** slave - check delete all 646select * from t1 order by a, d; 647a b X d 648select * from t2 order by a, d; 649a b c d 650SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 651VARIABLE_VALUE-@init_ndb_conflict_fn_max 6520 653SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 654VARIABLE_VALUE-@init_ndb_conflict_fn_old 6554 656SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 657VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 6580 659SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 660VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 6610 662SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 663server_id master_server_id master_epoch count a d 6642 1 # 1 # # 6652 1 # 2 # # 6662 1 # 3 # # 6672 1 # 4 # # 668SELECT * FROM `t1$EX` ORDER BY a, d; 669server_id master_server_id master_epoch count a d 6702 1 # # 1 1 6712 1 # # 2 12 6722 1 # # 2 12 6732 1 # # 3 123 674SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 675SELECT * FROM `t2$EX` ORDER BY a, d; 676************************ 677* start conflict testing 678************************ 679*** master - insert some data 680begin; 681insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111'); 682insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222'); 683insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333'); 684insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333'); 685insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111'); 686insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222'); 687insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333'); 688insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333'); 689commit; 690*** slave - check conflict info, no conflicts yet 691SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 692VARIABLE_VALUE-@init_ndb_conflict_fn_max 6930 694SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 695VARIABLE_VALUE-@init_ndb_conflict_fn_old 6960 697SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 698VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 6990 700SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 701VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 7020 703SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 704server_id master_server_id master_epoch count a d 705SELECT * FROM `t1$EX` ORDER BY a, d; 706server_id master_server_id master_epoch count a d 707SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 708SELECT * FROM `t2$EX` ORDER BY a, d; 709*** slave - check insert some data 710select * from t1 order by a, d; 711a b X d 7121 Master t1 a=1 at X=10 10 111 7132 Master t1 a=2 at X=10 10 111222 7143 Master t1 a=3 at X=10 10 111222333 7154 Master t1 a=4 at X=10 10 111222333 716select * from t2 order by a, d; 717a b c d 7181 Master t2 a=1 at c=10 10 111 7192 Master t2 a=2 at c=10 10 111222 7203 Master t2 a=3 at c=10 10 111222333 7214 Master t2 a=4 at c=10 10 111222333 722*** slave - update some data to cause conflicts 723begin; 724update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111'; 725update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222'; 726update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333'; 727update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333'; 728update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1; 729update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2; 730update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3; 731update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4; 732commit; 733*** master - update some data to cause conflicts 734begin; 735update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111'; 736update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222'; 737update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333'; 738delete from t1 where a = 4; 739update t2 set b="Master t2 a=1 at c=11", c=11 where a=1; 740update t2 set b="Master t2 a=2 at c=11", c=11 where a=2; 741update t2 set b="Master t2 a=3 at c=11", c=11 where a=3; 742delete from t2 where a = 4; 743commit; 744*** slave - check conflict info, there should be some 745SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 746VARIABLE_VALUE-@init_ndb_conflict_fn_max 7470 748SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 749VARIABLE_VALUE-@init_ndb_conflict_fn_old 7503 751SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 752VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 7530 754SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 755VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 7560 757SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 758server_id master_server_id master_epoch count a d 7592 1 # 5 # # 7602 1 # 6 # # 7612 1 # 7 # # 762SELECT * FROM `t1$EX` ORDER BY a, d; 763server_id master_server_id master_epoch count a d 7642 1 # # 1 111 7652 1 # # 2 111222 7662 1 # # 3 111222333 767SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 768SELECT * FROM `t2$EX` ORDER BY a, d; 769*** slave - check update some data that causes conflicts 770select * from t1 order by a, d; 771a b X d 7721 Slave t1 a=1 at X=12 12 111 7732 Slave t1 a=2 at X=12 12 111222 7743 Slave t1 a=3 at X=12 12 111222333 775select * from t2 order by a, d; 776a b c d 7771 Master t2 a=1 at c=11 11 111 7782 Master t2 a=2 at c=11 11 111222 7793 Master t2 a=3 at c=11 11 111222333 780*** slave - correct some data to correspond to the master 781update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111'; 782delete from t1 where a = 4; 783*** master - update some data, use higher timestamp 784begin; 785update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111'; 786update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222'; 787update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333'; 788update t2 set b="Master t2 a=1 at c=13", c=13 where a=1; 789update t2 set b="Master t2 a=2 at c=13", c=13 where a=2; 790update t2 set b="Master t2 a=3 at c=13", c=13 where a=3; 791commit; 792*** slave - check conflict info, change depends on calling test 793SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 794VARIABLE_VALUE-@init_ndb_conflict_fn_max 7950 796SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 797VARIABLE_VALUE-@init_ndb_conflict_fn_old 7986 799SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 800VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 8010 802SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 803VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 8040 805SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 806server_id master_server_id master_epoch count a d 8072 1 # 5 # # 8082 1 # 6 # # 8092 1 # 7 # # 8102 1 # 8 # # 8112 1 # 9 # # 8122 1 # 10 # # 813SELECT * FROM `t1$EX` ORDER BY a, d; 814server_id master_server_id master_epoch count a d 8152 1 # # 1 111 8162 1 # # 1 111 8172 1 # # 2 111222 8182 1 # # 2 111222 8192 1 # # 3 111222333 8202 1 # # 3 111222333 821SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 822SELECT * FROM `t2$EX` ORDER BY a, d; 823*** slave - check higer timestamp 824select * from t1 order by a, d; 825a b X d 8261 Slave t1 a=1 at X=11 11 111 8272 Slave t1 a=2 at X=12 12 111222 8283 Slave t1 a=3 at X=12 12 111222333 829select * from t2 order by a, d; 830a b c d 8311 Master t2 a=1 at c=13 13 111 8322 Master t2 a=2 at c=13 13 111222 8333 Master t2 a=3 at c=13 13 111222333 834drop table t1, t2; 835*** Test 4 *********************************************************** 836* test with FULL rows and "USE_UPDATE" flag 837* ******************************************************************** 838set global ndb_log_update_as_write=0; 839update mysql.ndb_replication set binlog_type=7; 840create table t1 (a int, b varchar(32), X int unsigned, d varchar(9), primary key (a, d)) engine ndb; 841create table t2 (a int key, b varchar(32), c int unsigned, d varchar(9)) engine ndb; 842************************************************ 843* some basic positive testing, i.e. no conflicts 844************************************************ 845*** insert some data 846begin; 847insert into t1 values (1, "Master t1 a=1 at X=1", 1, '1'); 848insert into t1 values (2, "Master t1 a=2 at X=1", 1, '12'); 849insert into t1 values (3, "Master t1 a=3 at X=1", 1, '123'); 850insert into t2 values (1, "Master t2 a=1 at c=1", 1, '1'); 851insert into t2 values (2, "Master t2 a=2 at c=1", 1, '12'); 852insert into t2 values (3, "Master t2 a=3 at c=1", 1, '123'); 853commit; 854*** master - update all 855begin; 856update t1 set b="Master t1 X=2", X=X+1; 857update t2 set b="Master t2 c=2", c=c+1; 858commit; 859*** slave - check update all 860select * from t1 order by a, d; 861a b X d 8621 Master t1 X=2 2 1 8632 Master t1 X=2 2 12 8643 Master t1 X=2 2 123 865select * from t2 order by a, d; 866a b c d 8671 Master t2 c=2 2 1 8682 Master t2 c=2 2 12 8693 Master t2 c=2 2 123 870SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 871VARIABLE_VALUE-@init_ndb_conflict_fn_max 8720 873SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 874VARIABLE_VALUE-@init_ndb_conflict_fn_old 8750 876SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 877VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 8780 879SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 880VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 8810 882SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 883server_id master_server_id master_epoch count a d 884SELECT * FROM `t1$EX` ORDER BY a, d; 885server_id master_server_id master_epoch count a d 886SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 887SELECT * FROM `t2$EX` ORDER BY a, d; 888*** master - update 2 rows in different tables 889update t1 set b="Master t1 a=2 at X=3", X=X+1 where a=2; 890update t2 set b="Master t2 a=3 at c=3", c=c+1 where a=3; 891*** slave - check update 2 rows in different tables 892select * from t1 order by a, d; 893a b X d 8941 Master t1 X=2 2 1 8952 Master t1 a=2 at X=3 3 12 8963 Master t1 X=2 2 123 897select * from t2 order by a, d; 898a b c d 8991 Master t2 c=2 2 1 9002 Master t2 c=2 2 12 9013 Master t2 a=3 at c=3 3 123 902SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 903VARIABLE_VALUE-@init_ndb_conflict_fn_max 9040 905SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 906VARIABLE_VALUE-@init_ndb_conflict_fn_old 9070 908SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 909VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 9100 911SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 912VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 9130 914SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 915server_id master_server_id master_epoch count a d 916SELECT * FROM `t1$EX` ORDER BY a, d; 917server_id master_server_id master_epoch count a d 918SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 919SELECT * FROM `t2$EX` ORDER BY a, d; 920*** master - delete all 921delete from t1; 922delete from t2; 923*** slave - check delete all 924select * from t1 order by a, d; 925a b X d 926select * from t2 order by a, d; 927a b c d 928SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 929VARIABLE_VALUE-@init_ndb_conflict_fn_max 9300 931SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 932VARIABLE_VALUE-@init_ndb_conflict_fn_old 9330 934SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 935VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 9360 937SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 938VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 9390 940SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 941server_id master_server_id master_epoch count a d 942SELECT * FROM `t1$EX` ORDER BY a, d; 943server_id master_server_id master_epoch count a d 944SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 945SELECT * FROM `t2$EX` ORDER BY a, d; 946************************ 947* start conflict testing 948************************ 949*** master - insert some data 950begin; 951insert into t1 values (1, "Master t1 a=1 at X=10", 10, '111'); 952insert into t1 values (2, "Master t1 a=2 at X=10", 10, '111222'); 953insert into t1 values (3, "Master t1 a=3 at X=10", 10, '111222333'); 954insert into t1 values (4, "Master t1 a=4 at X=10", 10, '111222333'); 955insert into t2 values (1, "Master t2 a=1 at c=10", 10, '111'); 956insert into t2 values (2, "Master t2 a=2 at c=10", 10, '111222'); 957insert into t2 values (3, "Master t2 a=3 at c=10", 10, '111222333'); 958insert into t2 values (4, "Master t2 a=4 at c=10", 10, '111222333'); 959commit; 960*** slave - check conflict info, no conflicts yet 961SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 962VARIABLE_VALUE-@init_ndb_conflict_fn_max 9630 964SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 965VARIABLE_VALUE-@init_ndb_conflict_fn_old 9660 967SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 968VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 9690 970SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 971VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 9720 973SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 974server_id master_server_id master_epoch count a d 975SELECT * FROM `t1$EX` ORDER BY a, d; 976server_id master_server_id master_epoch count a d 977SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 978SELECT * FROM `t2$EX` ORDER BY a, d; 979*** slave - check insert some data 980select * from t1 order by a, d; 981a b X d 9821 Master t1 a=1 at X=10 10 111 9832 Master t1 a=2 at X=10 10 111222 9843 Master t1 a=3 at X=10 10 111222333 9854 Master t1 a=4 at X=10 10 111222333 986select * from t2 order by a, d; 987a b c d 9881 Master t2 a=1 at c=10 10 111 9892 Master t2 a=2 at c=10 10 111222 9903 Master t2 a=3 at c=10 10 111222333 9914 Master t2 a=4 at c=10 10 111222333 992*** slave - update some data to cause conflicts 993begin; 994update t1 set b="Slave t1 a=1 at X=12", X=12 where a=1 and d='111'; 995update t1 set b="Slave t1 a=2 at X=12", X=12 where a=2 and d='111222'; 996update t1 set b="Slave t1 a=3 at X=12", X=12 where a=3 and d='111222333'; 997update t1 set b="Slave t1 a=4 at X=12", X=12 where a=4 and d='111222333'; 998update t2 set b="Slave t2 a=1 at c=12", c=12 where a=1; 999update t2 set b="Slave t2 a=2 at c=12", c=12 where a=2; 1000update t2 set b="Slave t2 a=3 at c=12", c=12 where a=3; 1001update t2 set b="Slave t2 a=4 at c=12", c=12 where a=4; 1002commit; 1003*** master - update some data to cause conflicts 1004begin; 1005update t1 set b="Master t1 a=1 at X=11", X=11 where a=1 and d='111'; 1006update t1 set b="Master t1 a=2 at X=11", X=11 where a=2 and d='111222'; 1007update t1 set b="Master t1 a=3 at X=11", X=11 where a=3 and d='111222333'; 1008delete from t1 where a = 4; 1009update t2 set b="Master t2 a=1 at c=11", c=11 where a=1; 1010update t2 set b="Master t2 a=2 at c=11", c=11 where a=2; 1011update t2 set b="Master t2 a=3 at c=11", c=11 where a=3; 1012delete from t2 where a = 4; 1013commit; 1014*** slave - check conflict info, there should be some 1015SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 1016VARIABLE_VALUE-@init_ndb_conflict_fn_max 10170 1018SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 1019VARIABLE_VALUE-@init_ndb_conflict_fn_old 10204 1021SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 1022VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 10230 1024SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 1025VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 10260 1027SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 1028server_id master_server_id master_epoch count a d 10292 1 # 1 # # 10302 1 # 2 # # 10312 1 # 3 # # 10322 1 # 4 # # 1033SELECT * FROM `t1$EX` ORDER BY a, d; 1034server_id master_server_id master_epoch count a d 10352 1 # # 1 111 10362 1 # # 2 111222 10372 1 # # 3 111222333 10382 1 # # 4 111222333 1039SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 1040SELECT * FROM `t2$EX` ORDER BY a, d; 1041*** slave - check update some data that causes conflicts 1042select * from t1 order by a, d; 1043a b X d 10441 Slave t1 a=1 at X=12 12 111 10452 Slave t1 a=2 at X=12 12 111222 10463 Slave t1 a=3 at X=12 12 111222333 10474 Slave t1 a=4 at X=12 12 111222333 1048select * from t2 order by a, d; 1049a b c d 10501 Master t2 a=1 at c=11 11 111 10512 Master t2 a=2 at c=11 11 111222 10523 Master t2 a=3 at c=11 11 111222333 1053*** slave - correct some data to correspond to the master 1054update t1 set b="Slave t1 a=1 at X=11", X=11 where a=1 and d='111'; 1055delete from t1 where a = 4; 1056*** master - update some data, use higher timestamp 1057begin; 1058update t1 set b="Master t1 a=1 at X=13", X=13 where a=1 and d='111'; 1059update t1 set b="Master t1 a=2 at X=13", X=13 where a=2 and d='111222'; 1060update t1 set b="Master t1 a=3 at X=13", X=13 where a=3 and d='111222333'; 1061update t2 set b="Master t2 a=1 at c=13", c=13 where a=1; 1062update t2 set b="Master t2 a=2 at c=13", c=13 where a=2; 1063update t2 set b="Master t2 a=3 at c=13", c=13 where a=3; 1064commit; 1065*** slave - check conflict info, change depends on calling test 1066SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX"; 1067VARIABLE_VALUE-@init_ndb_conflict_fn_max 10680 1069SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_old FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_OLD"; 1070VARIABLE_VALUE-@init_ndb_conflict_fn_old 10716 1072SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_MAX_DEL_WIN"; 1073VARIABLE_VALUE-@init_ndb_conflict_fn_max_del_win 10740 1075SELECT VARIABLE_VALUE-@init_ndb_conflict_fn_epoch FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE "NDB_CONFLICT_FN_EPOCH"; 1076VARIABLE_VALUE-@init_ndb_conflict_fn_epoch 10770 1078SELECT server_id, master_server_id, master_epoch, count, a, d FROM `t1$EX` ORDER BY server_id, master_server_id, master_epoch, count; 1079server_id master_server_id master_epoch count a d 10802 1 # 1 # # 10812 1 # 2 # # 10822 1 # 3 # # 10832 1 # 4 # # 10842 1 # 5 # # 10852 1 # 6 # # 1086SELECT * FROM `t1$EX` ORDER BY a, d; 1087server_id master_server_id master_epoch count a d 10882 1 # # 1 111 10892 1 # # 2 111222 10902 1 # # 2 111222 10912 1 # # 3 111222333 10922 1 # # 3 111222333 10932 1 # # 4 111222333 1094SELECT * FROM `t2$EX` ORDER BY server_id, master_server_id, master_epoch, count; 1095SELECT * FROM `t2$EX` ORDER BY a, d; 1096*** slave - check higer timestamp 1097select * from t1 order by a, d; 1098a b X d 10991 Master t1 a=1 at X=13 13 111 11002 Slave t1 a=2 at X=12 12 111222 11013 Slave t1 a=3 at X=12 12 111222333 1102select * from t2 order by a, d; 1103a b c d 11041 Master t2 a=1 at c=13 13 111 11052 Master t2 a=2 at c=13 13 111222 11063 Master t2 a=3 at c=13 13 111222333 1107drop table t1, t2; 1108*** test cleanup 1109include/rpl_end.inc 1110