############################################################################### # # # Variable Name: init_slave # # Scope: GLOBAL # # Access Type: Dynamic # # Data Type: string # # Default Value: # # Range: # # # # # # Creation Date: 2008-03-08 # # Author: Rizwan # # Modified: HHunger 2008-09-29 Fixed the bug by inserting the usual wait and # # SQL-Satements to control master and slave, # # deleted the sleep and made improvements like: # # - Replaced the opt file by dynamic variables, # # - Made the tests independant of the initial # # values of the global variables, # # - Reduced the test to the needed test case to # # save run time, # # - Beautification. # # # # Description: Test Cases of Dynamic System Variable init_slave # # that checks the behavior of this variable # # # # Reference: # # http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html # # # ############################################################################### source include/master-slave.inc; # Since a part of slave SQL thread initialisation happens after Slave_SQL_Running # has been set to Yes, there is a race condition between initialisation above and # init_slave setting given below. Synchronise slave applier with master to ensure # init_slave is complete and applier had processed few events like FD. --source include/sync_slave_sql_with_master.inc --disable_query_log call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); --enable_query_log # # save the current values SET @start_max_connections= @@global.max_connections; SET @start_init_slave= @@global.init_slave; # setting of a global value with an effect on the next start of the slave server # check that @@global.init_slave could be set SET NAMES utf8; let $my_init_slave= 'SET @@global.max_connections = @@global.max_connections + 1 -- комментарий'; eval SET @@global.init_slave = $my_init_slave; # show the data type of the variable --disable_warnings DROP TABLE IF EXISTS t1; CREATE TEMPORARY TABLE t1 AS SELECT @@global.init_slave AS my_column; --enable_warnings DESCRIBE t1; select length(my_column) from t1; DROP TABLE t1; # # check that the new setting of @@global.init_slave becomes immediately visible eval SELECT @@global.init_slave = $my_init_slave; --echo Expect 1 # wait for the slave threads have set the global variable. let $wait_timeout= 90; let $wait_condition= SELECT @@global.max_connections = @start_max_connections; --source include/wait_condition_sp.inc # check that the action in init_slave does not happen immediately --let $assert_text= @@global.max_connections = @start_max_connections --let $assert_cond= @@global.max_connections = @start_max_connections --source include/assert.inc --source include/restart_slave_sql.inc # Upon slave start, sync the applier with master, to ensure slave has # completed init_slave command execution and processed FD event from the # master. --connection master --source include/sync_slave_sql_with_master.inc # # wait for the slave threads have set the global variable. let $wait_timeout= 90; let $wait_condition= SELECT @@global.max_connections = @start_max_connections + 1; --source include/wait_condition_sp.inc # check that the action in init_slave was executed and had the intended effect --let $assert_text= @@global.max_connections = @start_max_connections + 1 --let $assert_cond= @@global.max_connections = @start_max_connections + 1 --source include/assert.inc # # Setting a variable(which is local to a session) and must not be visible SET @@global.init_slave = "SET @a=5"; # --source include/restart_slave_sql.inc # SHOW VARIABLES LIKE 'init_slave'; # expect NULL SELECT @a; --echo Expect NULL # # Clean up SET @@global.max_connections= @start_max_connections; SET @@global.init_slave= @start_init_slave; ################################################## # End of functionality Testing for init_slave # ################################################## --source include/rpl_end.inc