mirror of
https://github.com/MariaDB/server.git
synced 2025-03-02 17:23:16 +01: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.
207 lines
7.6 KiB
PHP
207 lines
7.6 KiB
PHP
################### include/rpl_stmt_seq.inc ###########################
|
|
# #
|
|
# Check if a given SQL statement (->$my_stmt) / AUTOCOMMIT mode / #
|
|
# storage engine somehow involved causes COMMIT or ROLLBACK. #
|
|
# #
|
|
# #
|
|
# The typical test sequence #
|
|
# ------------------------- #
|
|
# 1. master connection: INSERT without commit #
|
|
# check table content of master and slave #
|
|
# 2. master connection: EXECUTE the statement #
|
|
# check table content of master and slave #
|
|
# 3. master connection: ROLLBACK #
|
|
# check table content of master and slave #
|
|
# 4. flush the logs #
|
|
# #
|
|
# The variables #
|
|
# $show_binlog -- print binlog entries #
|
|
# 0 - default + fits to the file with #
|
|
# results #
|
|
# 1 - useful for debugging #
|
|
# This variable is used within #
|
|
# include/rpl_stmt_seq.inc. #
|
|
# $manipulate -- Manipulation of the binary logs #
|
|
# 0 - do nothing #
|
|
# 1 - so that the output of SHOW BINLOG #
|
|
# EVENTS IN <current log> contains only #
|
|
# commands of the current test sequence #
|
|
# This is especially useful, if the #
|
|
# $show_binlog is set to 1 and many #
|
|
# subtest are executed. #
|
|
# This variable is used within #
|
|
# include/rpl_stmt_seq.inc. #
|
|
# have to be set before sourcing this script. #
|
|
# #
|
|
# Please be very careful when editing this routine, because the #
|
|
# handling of the $variables is extreme sensitive. #
|
|
# #
|
|
########################################################################
|
|
|
|
# Last update:
|
|
# 2007-02-12 ML Replace comments via SQL by "--echo ..."
|
|
#
|
|
|
|
let $VERSION=`select version()`;
|
|
|
|
--echo
|
|
--echo ######## $my_stmt ########
|
|
|
|
|
|
###############################################################
|
|
# Predict the number of the current log
|
|
###############################################################
|
|
# Disable the logging of the log number computation.
|
|
--disable_query_log
|
|
# $_log_num_n should contain the number of the current binlog in numeric style.
|
|
# If this routine is called for the first time, $_log_num will not initialized
|
|
# and contain the value '' instead of '1'. So we will correct it here.
|
|
#
|
|
eval set @aux= IF('$_log_num_n' = '', '1', '$_log_num_n');
|
|
let $_log_num_n= `SELECT @aux`;
|
|
eval set @aux= LPAD('$_log_num_n',6,'0');
|
|
# SELECT @aux AS "@aux is";
|
|
#
|
|
# $_log_num_s should contain the number of the current binlog in string style.
|
|
let $_log_num_s= `select @aux`;
|
|
# eval SELECT '$log_num' ;
|
|
--enable_query_log
|
|
|
|
###############################################################
|
|
# INSERT
|
|
###############################################################
|
|
--echo
|
|
--echo -------- switch to master -------
|
|
connection master;
|
|
# Maybe it would be smarter to use a table with an autoincrement column.
|
|
let $MAX= `SELECT MAX(f1) FROM t1` ;
|
|
eval INSERT INTO t1 SET f1= $MAX + 1;
|
|
# results before DDL(to be tested)
|
|
SELECT MAX(f1) FROM t1;
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= master-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
sync_slave_with_master;
|
|
|
|
--echo
|
|
--echo -------- switch to slave --------
|
|
connection slave;
|
|
# results before DDL(to be tested)
|
|
SELECT MAX(f1) FROM t1;
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= slave-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
|
|
###############################################################
|
|
# command to be tested
|
|
###############################################################
|
|
--echo
|
|
--echo -------- switch to master -------
|
|
connection master;
|
|
eval $my_stmt;
|
|
# Devaluate $my_stmt, to detect script bugs
|
|
let $my_stmt= ERROR: YOU FORGOT TO FILL IN THE STATEMENT;
|
|
# results after DDL(to be tested)
|
|
SELECT MAX(f1) FROM t1;
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= master-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
sync_slave_with_master;
|
|
|
|
--echo
|
|
--echo -------- switch to slave --------
|
|
connection slave;
|
|
# results after DDL(to be tested)
|
|
SELECT MAX(f1) FROM t1;
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= slave-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
|
|
###############################################################
|
|
# ROLLBACK
|
|
###############################################################
|
|
--echo
|
|
--echo -------- switch to master -------
|
|
connection master;
|
|
ROLLBACK;
|
|
# results after final ROLLBACK
|
|
SELECT MAX(f1) FROM t1;
|
|
# Try to detect if the DDL command caused that the INSERT is committed
|
|
# $MAX holds the highest/last value just before the insert of MAX + 1
|
|
--disable_query_log
|
|
eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
|
|
IF(MAX(f1) = $MAX + 1, 'committed', 'not committed')),
|
|
IF((MAX(f1) = $MAX + 1) XOR NOT $my_master_commit,
|
|
' (Succeeded)',
|
|
' (Failed)')) AS ""
|
|
FROM mysqltest1.t1;
|
|
--enable_query_log
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= master-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
sync_slave_with_master;
|
|
|
|
--echo
|
|
--echo -------- switch to slave --------
|
|
connection slave;
|
|
# results after final ROLLBACK
|
|
SELECT MAX(f1) FROM t1;
|
|
--disable_query_log
|
|
eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE: The INSERT is ',
|
|
IF(MAX(f1) = $MAX + 1, 'committed', 'not committed')),
|
|
IF((MAX(f1) = $MAX + 1) XOR NOT $my_slave_commit,
|
|
' (Succeeded)',
|
|
' (Failed)')) AS ""
|
|
FROM mysqltest1.t1;
|
|
--enable_query_log
|
|
if ($show_binlog)
|
|
{
|
|
--let $binlog_file= slave-bin.$_log_num_s
|
|
--source include/show_binlog_events.inc
|
|
}
|
|
|
|
###############################################################
|
|
# Manipulate binlog
|
|
###############################################################
|
|
if ($manipulate)
|
|
{
|
|
#### Manipulate the binary logs,
|
|
# so that the output of SHOW BINLOG EVENTS IN <current log>
|
|
# contains only commands of the current test sequence.
|
|
# - flush the master and the slave log
|
|
# ---> both start to write into new logs with incremented number
|
|
# - increment $_log_num_n
|
|
--echo
|
|
--echo -------- switch to master -------
|
|
connection master;
|
|
flush logs;
|
|
# sleep 1;
|
|
# eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
|
sync_slave_with_master;
|
|
|
|
--echo
|
|
--echo -------- switch to slave --------
|
|
connection slave;
|
|
# the final content of the binary log
|
|
flush logs;
|
|
# The next sleep is urgent needed.
|
|
# Without this sleep the slaves crashes often, when the SHOW BINLOG
|
|
# is executed. :-(
|
|
# sleep 1;
|
|
# eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
|
inc $_log_num_n;
|
|
}
|
|
|
|
--echo
|
|
--echo -------- switch to master -------
|
|
connection master;
|