mirror of
https://github.com/MariaDB/server.git
synced 2025-05-31 08:42:45 +03:00
Some of the test cases reference to binlog position and these position numbers are written into result explicitly. It is difficult to maintain if log event format changes. There are a couple of cases explicit position number appears, we handle them in different ways A. 'CHANGE MASTER ...' with MASTER_LOG_POS or/and RELAY_LOG_POS options Use --replace_result to mask them. B. 'SHOW BINLOG EVENT ...' Replaced by show_binlog_events.inc or wait_for_binlog_event.inc. show_binlog_events.inc file's function is enhanced by given $binlog_file and $binlog_limit. C. 'SHOW SLAVE STATUS', 'show_slave_status.inc' and 'show_slave_status2.inc' For the test cases just care a few items in the result of 'SHOW SLAVE STATUS', only the items related to each test case are showed. 'show_slave_status.inc' is rebuild, only the given items in $status_items will be showed. 'check_slave_is_running.inc' and 'check_slave_no_error.inc' and 'check_slave_param.inc' are auxiliary files helping to show running status and error information easily. mysql-test/extra/binlog_tests/binlog.test: It only cares whether current binlog file index is changed, so it is ok with 'show_master_status.inc' instead of 'show mater status'. mysql-test/extra/binlog_tests/blackhole.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/extra/rpl_tests/rpl_deadlock.test: Use 'check_slave_is_running.inc' instead of 'show_slave_status2.inc'. mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test: Use 'wait_for_slave_sql_error.inc' and 'ait_for_slave_sql_error_and_skip.inc' instead of 'show slave status'. mysql-test/extra/rpl_tests/rpl_flsh_tbls.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test: It is need now to give a error number, so use 'wait_for_slave_io_to_stop.inc' instead of 'wait_for_slave_io_error.inc'. mysql-test/extra/rpl_tests/rpl_insert_delayed.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/extra/rpl_tests/rpl_log.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. se 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/extra/rpl_tests/rpl_max_relay_size.test: se 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/extra/rpl_tests/rpl_reset_slave.test: Use 'show_slave_status.inc' instead of 'show_slave_status2.inc' statement. Use 'check_slave_no_error.inc' to simplify the check that there is no error. mysql-test/extra/rpl_tests/rpl_row_basic.test: Use 'check_slave_is_running.inc' to verify that Slave threads are running well. Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. mysql-test/extra/rpl_tests/rpl_row_tabledefs.test: Use 'show_slave_error_status_and_skip.inc' instead of 'show slave status'. mysql-test/include/check_slave_is_running.inc: To make sure both sql and io thread are running well. If not, the test will be aborted. mysql-test/include/check_slave_no_error.inc: To make sure both sql and io thread have no error. If not, the test will be aborted. mysql-test/include/get_relay_log_pos.inc: According to the position of a log event in master binlog file, find the peer position of a log event in relay log file. mysql-test/include/rpl_stmt_seq.inc: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/include/show_binlog_events.inc: Add two options $binlog_file and $binlog_limit for showing binlog events from different binlog files or/and given different limits on position or row number. mysql-test/include/show_rpl_debug_info.inc: Add 'SELECT NOW()' in the debug information. mysql-test/include/show_slave_status.inc: It's more clean and tidy Only the given columns of slave status are printed. mysql-test/include/test_fieldsize.inc: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/include/wait_for_binlog_event.inc: Use show_rpl_debug_info.inc instead of 'SHOW BINLOG EVENTS'. mysql-test/include/wait_for_slave_io_error.inc: Add $slave_io_errno and $show_slave_io_error, it waits only a given error. mysql-test/include/wait_for_slave_param.inc: Use die instead of exit. mysql-test/include/wait_for_slave_sql_error.inc: Add $slave_sql_errno and $show_slave_sql_error, it waits only a given error. mysql-test/include/wait_for_status_var.inc: Use die instead of exit. mysql-test/r/flush_block_commit_notembedded.result: It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'. mysql-test/r/multi_update.result: It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'. mysql-test/suite/binlog/r/binlog_innodb.result: It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'. mysql-test/suite/binlog/r/binlog_row_binlog.result: Position in the result of 'show master status' is replaced by '#'. mysql-test/suite/binlog/r/binlog_stm_binlog.result: Position in the result of 'show master status' is replaced by '#'. mysql-test/suite/binlog/t/binlog_innodb.test: It checks whether somethings are binlogged, so we use 'show_binlog_event.inc' instead of 'show master status'. mysql-test/suite/binlog/t/binlog_stm_binlog.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/bugs/r/rpl_bug36391.result: Position in the result of 'show master status' is replaced by '#'. mysql-test/suite/bugs/t/rpl_bug12691.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/bugs/t/rpl_bug36391.test: 'show master status' is replaced by 'show_master_status.inc'. Position in the result of 'show master status' is replaced by '#'. mysql-test/suite/engines/funcs/r/rpl_000015.result: It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'. mysql-test/suite/engines/funcs/t/rpl_000015.test: Use 'check_slave_is_running.inc' to verify that Slave threads are running well. mysql-test/suite/engines/funcs/t/rpl_REDIRECT.test: Use 'query_vertical SHOW SLAVE STATUS' instead of 'show slave status'. There is no status columns in the result file, for no slave exists on master's server. mysql-test/suite/engines/funcs/t/rpl_change_master.test: This test just care whether Read_Master_Log_Pos is equal to Exec_Master_Log_Pos after 'CHANGE MASTER ..'. So 'show slave status' is removed and just check the value of Read_Master_Log_Pos and Exec_Master_Log_Pos. mysql-test/suite/engines/funcs/t/rpl_empty_master_crash.test: We doesn't really need the statement. mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test: Just show Relay_Log_File, running status and error informations. Use 'check_slave_is_running.inc' to verify that Slave threads are running well. mysql-test/suite/engines/funcs/t/rpl_loaddata_s.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/engines/funcs/t/rpl_log_pos.test: Mask the explicit positions in the result file. Use 'check_slave_no_error.inc' to simplify the check that there is no error. Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/engines/funcs/t/rpl_rbr_to_sbr.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/engines/funcs/t/rpl_row_drop.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/engines/funcs/t/rpl_row_inexist_tbl.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/engines/funcs/t/rpl_row_until.test: Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements. Mask the explicit binary log positions in the result file. mysql-test/suite/engines/funcs/t/rpl_server_id1.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. Use 'check_slave_no_error.inc' to simplify the check that there is no error. mysql-test/suite/engines/funcs/t/rpl_server_id2.test: It doesn't really need in this test. mysql-test/suite/engines/funcs/t/rpl_slave_status.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/manual/t/rpl_replication_delay.test: Use 'show_slave_status.inc' instead of 'show slave status'. mysql-test/suite/parts/t/rpl_partition.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl/include/rpl_mixed_ddl.inc: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/include/rpl_mixed_dml.inc: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_000015.test: Use 'show_slave_status.inc' instead of 'show_slave_status2.inc'. mysql-test/suite/rpl/t/rpl_binlog_grant.test: Use 'wait_for_binlog_event.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_bug33931.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/rpl/t/rpl_change_master.test: This test just care whether Read_Master_Log_Pos is equal to Exec_Master_Log_Pos after 'CHANGE MASTER ..'. So 'show slave status' is removed and just check the value of Read_Master_Log_Pos and Exec_Master_Log_Pos. mysql-test/suite/rpl/t/rpl_critical_errors.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/rpl/t/rpl_dual_pos_advance.test: Mask the explicit position numbers in result file. It is restricted running on SBR, for it want to binlog 'set @a=1' statement. mysql-test/suite/rpl/t/rpl_empty_master_crash.test: It doesn't need in this test. mysql-test/suite/rpl/t/rpl_flushlog_loop.test: UUse 'check_slave_is_running.inc' and 'show_slave_status.inc' instead of 'show slave status' statement. mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test: Use 'wait_for_slave_io_error.inc' to wait the given io thread error happening. mysql-test/suite/rpl/t/rpl_grant.test: It doesn't need in this test. mysql-test/suite/rpl/t/rpl_incident.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl/t/rpl_known_bugs_detection.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave stutus'. mysql-test/suite/rpl/t/rpl_loaddata_fatal.test: Use 'wait_for_slave_sql_error_and_skip.inc' to wait the given sql thread error happening and then skip the event. There is no need to print the result of 'show slave stutus'. mysql-test/suite/rpl/t/rpl_log_pos.test: Use 'wait_for_slave_io_error.inc' to wait the given io thread error happening. There is no need to print the result of 'show slave status'. mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_replicate_do.test: Use 'show_slave_status.inc' instead of 'show slave status'. mysql-test/suite/rpl/t/rpl_rotate_logs.test: Use 'show_slave_status.inc' instead of 'show_slave_status2.inc'. mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_row_create_table.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_row_drop.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_row_until.test: Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements. mysql-test/suite/rpl/t/rpl_skip_error.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave status'. mysql-test/suite/rpl/t/rpl_slave_skip.test: Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and mask the explicit position number in the 'CHANGE MASTER' statements. mysql-test/suite/rpl/t/rpl_sp.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/suite/rpl/t/rpl_ssl.test: Use 'show_slave_status.inc' instead of 'show slave status'. mysql-test/suite/rpl/t/rpl_ssl1.test: Use 'show_slave_status.inc' instead of 'show slave status'. mysql-test/suite/rpl/t/rpl_stm_until.test: Use 'check_slave_param.inc' to check whether SQL Thread stop at a right position, and use binlog position variables instead of explicit number in the 'CHANGE MASTER' statements. mysql-test/suite/rpl/t/rpl_temporary_errors.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test: Use 'wait_for_slave_sql_error.inc' to wait the given sql thread error happening. There is no need to print the result of 'show slave status'. mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test: Mask master_log_pos and master_log_file mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test: Use 'check_slave_is_running.inc' instead of 'show slave status' statement. mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/t/alter_table-big.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/t/create-big.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/t/ctype_cp932_binlog_stm.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement. mysql-test/t/flush_block_commit_notembedded.test: It checks whether somethings are binlogged, so we using 'show_binlog_event.inc' instead of 'show master status'. mysql-test/t/multi_update.test: It checks whether somethings are binlogged, so we using 'wait_binlog_event.inc' instead of 'show master status'. mysql-test/t/sp_trans_log.test: Use 'show_binlog_events.inc' instead of 'show binlog events' statement.
263 lines
8.5 KiB
Plaintext
263 lines
8.5 KiB
Plaintext
--source include/have_ndb.inc
|
|
--source include/ndb_master-slave.inc
|
|
|
|
|
|
|
|
#
|
|
# Bug #11087
|
|
#
|
|
# connect to the master and create tabe t1 in gotoslave database
|
|
--connection master
|
|
CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0',
|
|
`nom` char(4) default NULL,
|
|
`prenom` char(4) default NULL,
|
|
PRIMARY KEY (`nid`))
|
|
ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
|
|
|
INSERT INTO t1 VALUES(1,"XYZ1","ABC1");
|
|
select * from t1 order by nid;
|
|
|
|
--sync_slave_with_master
|
|
# connect to slave and ensure data it there.
|
|
--connection slave
|
|
select * from t1 order by nid;
|
|
|
|
--connection master
|
|
delete from t1;
|
|
INSERT INTO t1 VALUES(1,"XYZ2","ABC2");
|
|
# Make sure all rows are on the master
|
|
select * from t1 order by nid;
|
|
|
|
# make sure all rows are on the slave.
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
# Bug #11087 would have row with nid 2 missing
|
|
select * from t1 order by nid;
|
|
|
|
--connection master
|
|
delete from t1;
|
|
insert into t1 values(1,"AA", "AA");
|
|
insert into t1 values(2,"BB", "BB");
|
|
insert into t1 values(3,"CC", "CC");
|
|
insert into t1 values(4,"DD", "DD");
|
|
|
|
begin;
|
|
# delete+insert = update
|
|
delete from t1 where nid = 1;
|
|
insert into t1 values (1,"A2", "A2");
|
|
|
|
# update+delete = delete
|
|
update t1 set nom="B2" where nid = 2;
|
|
delete from t1 where nid = 2;
|
|
|
|
# multi-update
|
|
update t1 set nom = "D2" where nid = 4;
|
|
delete from t1 where nid = 4;
|
|
insert into t1 values (4, "D3", "D3");
|
|
update t1 set nom = "D4" where nid = 4;
|
|
|
|
# insert+delete = nothing
|
|
insert into t1 values (5, "EE", "EE");
|
|
delete from t1 where nid = 5;
|
|
|
|
commit;
|
|
select * from t1 order by 1;
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select * from t1 order by 1;
|
|
--connection master
|
|
DROP table t1;
|
|
|
|
#
|
|
# Test replication of table with no primary key
|
|
#
|
|
--connection master
|
|
CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0',
|
|
`nom` char(4) default NULL,
|
|
`prenom` char(4) default NULL)
|
|
ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
|
|
|
INSERT INTO t1 VALUES(1,"XYZ1","ABC1"),(2,"AAA","BBB"),(3,"CCC","DDD");
|
|
select * from t1 order by nid;
|
|
|
|
--sync_slave_with_master
|
|
# connect to slave and ensure data it there.
|
|
--connection slave
|
|
select * from t1 order by nid;
|
|
|
|
--connection master
|
|
delete from t1 where nid = 2;
|
|
INSERT INTO t1 VALUES(4,"EEE","FFF");
|
|
# Make sure all rows are on the master
|
|
select * from t1 order by nid;
|
|
|
|
# make sure all rows are on the slave.
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select * from t1 order by nid;
|
|
|
|
--connection master
|
|
UPDATE t1 set nid=nid+1;
|
|
UPDATE t1 set nom="CCP" where nid = 4;
|
|
select * from t1 order by nid;
|
|
|
|
# make sure all rows are on the slave.
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select * from t1 order by nid;
|
|
|
|
--connection master
|
|
DROP table t1;
|
|
|
|
#
|
|
# Bug #27378 update becomes delete on slave
|
|
#
|
|
|
|
--connection master
|
|
CREATE TABLE `t1` (
|
|
`prid` int(10) unsigned NOT NULL,
|
|
`id_type` enum('IMSI','SIP') NOT NULL,
|
|
`fkimssub` varchar(50) NOT NULL,
|
|
`user_id` varchar(20) DEFAULT NULL,
|
|
`password` varchar(20) DEFAULT NULL,
|
|
`ptg_nbr` varchar(20) DEFAULT NULL,
|
|
`old_tmsi` int(10) unsigned DEFAULT NULL,
|
|
`new_tmsi` int(10) unsigned DEFAULT NULL,
|
|
`dev_capability` int(10) unsigned DEFAULT NULL,
|
|
`dev_oid` bigint(20) unsigned DEFAULT NULL,
|
|
`lac_cell_id` bigint(20) unsigned DEFAULT NULL,
|
|
`ms_classmark1` int(10) unsigned DEFAULT NULL,
|
|
`cipher_key` int(10) unsigned DEFAULT NULL,
|
|
`priid_master` int(10) unsigned DEFAULT NULL,
|
|
PRIMARY KEY (`prid`),
|
|
UNIQUE KEY `fkimssub` (`fkimssub`,`ptg_nbr`) USING HASH
|
|
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
|
|
|
INSERT INTO `t1` VALUES (183342,'IMSI','config3_sub_2Privates_3Publics_imssub_36668','user_id_73336','user_id_73336','73336',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(47617,'IMSI','config3_sub_2Privates_3Publics_imssub_9523','user_id_19046','user_id_19046','19046',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(200332,'IMSI','config3_sub_2Privates_3Publics_imssub_40066','user_id_80132','user_id_80132','80132',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(478882,'IMSI','config3_sub_2Privates_3Publics_imssub_95776','user_id_191552','user_id_191552','191552',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(490146,'IMSI','config3_sub_2Privates_3Publics_imssub_98029','user_id_196057','user_id_196057','196057',NULL,NULL,NULL,1010,NULL,NULL,NULL,NULL),(499301,'IMSI','config3_sub_2Privates_3Publics_imssub_99860','user_id_199719','user_id_199719','199719',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(506101,'IMSI','config3_sub_2Privates_3Publics_imssub_101220','user_id_202439','user_id_202439','202439',NULL,NULL,NULL,1010,NULL,NULL,NULL,NULL),(510142,'IMSI','config3_sub_2Privates_3Publics_imssub_102028','user_id_204056','user_id_204056','204056',NULL,NULL,NULL,1010,NULL,NULL,NULL,NULL),(515871,'IMSI','config3_sub_2Privates_3Publics_imssub_103174','user_id_206347','user_id_206347','206347',NULL,NULL,NULL,1010,NULL,NULL,NULL,NULL),(209842,'IMSI','config3_sub_2Privates_3Publics_imssub_41968','user_id_83936','user_id_83936','83936',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL),(365902,'IMSI','config3_sub_2Privates_3Publics_imssub_73180','user_id_146360','user_id_146360','146360',NULL,NULL,NULL,1010,NULL,NULL,NULL,NULL),(11892,'IMSI','config3_sub_2Privates_3Publics_imssub_2378','user_id_4756','user_id_4756','4756',NULL,NULL,NULL,123456789,NULL,NULL,NULL,NULL);
|
|
|
|
select count(*) from t1;
|
|
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select count(*) from t1;
|
|
|
|
--connection master
|
|
update t1 set dev_oid=dev_oid+1;
|
|
select count(*) from t1;
|
|
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select count(*) from t1;
|
|
|
|
--connection master
|
|
DROP table t1;
|
|
|
|
##################################################################
|
|
#
|
|
# Check that retries are made on the slave on some temporary errors
|
|
#
|
|
|
|
#
|
|
# 1. Deadlock
|
|
#
|
|
--connection master
|
|
CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0',
|
|
`nom` char(4) default NULL,
|
|
`prenom` char(4) default NULL,
|
|
PRIMARY KEY USING HASH (`nid`))
|
|
ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
|
INSERT INTO t1 VALUES(1,"XYZ1","ABC1");
|
|
|
|
# cause a lock on that row on the slave
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
--echo **** On Slave ****
|
|
BEGIN;
|
|
UPDATE t1 SET `nom`="LOCK" WHERE `nid`=1;
|
|
|
|
# set number of retries low so we fail the retries
|
|
set GLOBAL slave_transaction_retries=1;
|
|
|
|
# now do a change to this row on the master
|
|
# will deadlock on the slave because of lock above
|
|
--connection master
|
|
--echo **** On Master ****
|
|
UPDATE t1 SET `nom`="DEAD" WHERE `nid`=1;
|
|
|
|
--echo **** On Slave ****
|
|
# Wait for deadlock to be detected.
|
|
# When detected, the slave will stop, so we just wait for it to stop.
|
|
connection slave;
|
|
source include/wait_for_slave_sql_to_stop.inc;
|
|
|
|
# Replication should have stopped, since max retries were not enough.
|
|
# verify with show slave status
|
|
# 1205 = ER_LOCK_WAIT_TIMEOUT
|
|
--let $slave_sql_errno= 1205
|
|
--let $show_slave_sql_error= 1
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
# now set max retries high enough to succeed, and start slave again
|
|
set GLOBAL slave_transaction_retries=10;
|
|
source include/start_slave.inc;
|
|
# Wait for deadlock to be detected and retried.
|
|
# We want to wait until at least one retry has been made, but before
|
|
# the slave stops. currently, there is no safe way to do that: we
|
|
# would need to access the retry counter, but that is not exposed.
|
|
# Failing that, we just wait sufficiently long that one but not all
|
|
# retries have been made. See BUG#35183.
|
|
sleep 5;
|
|
|
|
# commit transaction to release lock on row and let replication succeed
|
|
select * from t1 order by nid;
|
|
COMMIT;
|
|
|
|
# verify that the row succeded to be applied on the slave
|
|
--connection master
|
|
--sync_slave_with_master
|
|
--connection slave
|
|
select * from t1 order by nid;
|
|
|
|
# cleanup
|
|
--connection master
|
|
DROP TABLE t1;
|
|
|
|
|
|
#
|
|
# BUG#18094
|
|
# Slave caches invalid table definition after atlters causes select failure
|
|
#
|
|
--connection master
|
|
CREATE TABLE t1 (c1 INT KEY) ENGINE=NDB;
|
|
|
|
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
|
|
|
ALTER TABLE t1 ADD c2 INT;
|
|
|
|
--sync_slave_with_master
|
|
connection slave;
|
|
SELECT * FROM t1 ORDER BY c1;
|
|
|
|
connection master;
|
|
ALTER TABLE t1 CHANGE c2 c2 TEXT CHARACTER SET utf8;
|
|
ALTER TABLE t1 CHANGE c2 c2 BLOB;
|
|
|
|
--sync_slave_with_master
|
|
connection slave;
|
|
# here we would get error 1412 prior to bug
|
|
SELECT * FROM t1 ORDER BY c1 LIMIT 5;
|
|
|
|
--connection master
|
|
TRUNCATE t1;
|
|
SELECT count(*) FROM t1;
|
|
INSERT INTO t1 VALUES (101,NULL),(102,NULL),(103,NULL),(104,NULL),(105,NULL),(106,NULL),(107,NULL),(108,NULL),(109,NULL),(1010,NULL);
|
|
--sync_slave_with_master
|
|
connection slave;
|
|
SELECT count(*) FROM t1;
|
|
SELECT c1 FROM t1 ORDER BY c1 LIMIT 5;
|
|
|
|
# cleanup
|
|
--connection master
|
|
DROP TABLE t1;
|
|
-- source include/master-slave-end.inc
|