########################################################################### # # This test suite checks the following statements: # - SET <instance id>.<option name> = <option value>; # - UNSET <instance id>.<option name> = <option value>; # - FLUSH INSTANCES; # # For SET/UNSET we check that: # - SET ignores spaces correctly; # - UNSET does not allow option-value part (= <option value>); # - SET/UNSET can be applied several times w/o error; # - SET/UNSET is allowed only for stopped instances; # - SET/UNSET updates both the configuration cache in IM and # the configuration file; # # For FLUSH INSTANCES we check that: # - FLUSH INSTANCES is allowed only when all instances are stopped; # # According to the IM implementation details, we should play at least with the # following options: # - server_id # - port # - nonguarded # Let's test SET statement on the option 'server_id'. It's expected that # originally the instances have the following server ids and states: # - mysqld1: server_id: 1; running (online) # - mysqld2: server_id: 2; stopped (offline) # ########################################################################### --source include/im_check_os.inc ########################################################################### # # Check starting conditions. # ########################################################################### # - check the configuration file; --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- # - check the running instances. --connect (mysql1_con,localhost,root,,mysql,$IM_MYSQLD1_PORT,$IM_MYSQLD1_SOCK) --connection mysql1_con SHOW VARIABLES LIKE 'server_id'; --connection default # - check the internal cache. SHOW INSTANCES; ########################################################################### # # Check that SET/UNSET is allowed only for stopped instances. # ########################################################################### # - check that SET/UNSET is denied for running instances; --error 3015 # ER_INSTANCE_IS_ACTIVE UNSET mysqld1.server_id; --error 3015 # ER_INSTANCE_IS_ACTIVE SET mysqld1.server_id = 11; # - check that SET/UNSET is denied for active instances: # - create dummy misconfigured instance; # - start it; # - try to set/unset options; CREATE INSTANCE mysqld3 datadir = '/'; START INSTANCE mysqld3; # FIXME: START INSTANCE should be synchronous. --sleep 3 # should be longer than monitoring interval and enough to start instance. # NOTE: We can not analyze state of the instance here -- it can be Failed or # Starting because Instance Manager is trying to start the misconfigured # instance several times. --error 3015 # ER_INSTANCE_IS_ACTIVE UNSET mysqld3.server_id; --error 3015 # ER_INSTANCE_IS_ACTIVE SET mysqld3.server_id = 11; STOP INSTANCE mysqld3; # FIXME: STOP INSTANCE should be synchronous. --sleep 3 # should be longer than monitoring interval and enough to stop instance. --replace_column 3 VERSION_NUMBER 4 VERSION SHOW INSTANCE STATUS mysqld3; # - check that SET/UNSET succeed for stopped instances; # - check that SET/UNSET can be applied multiple times; UNSET mysqld2.server_id; UNSET mysqld2.server_id; --replace_column 2 option_value SHOW INSTANCE OPTIONS mysqld2; SET mysqld2.server_id = 2; SET mysqld2.server_id = 2; --replace_column 2 option_value SHOW INSTANCE OPTIONS mysqld2; # - check that UNSET does not allow option-value part (= <option value>); --error ER_SYNTAX_ERROR UNSET mysqld2.server_id = 11; # - check that SET/UNSET working properly with multiple options; SET mysqld2.aaa, mysqld3.bbb, mysqld2.ccc = 0010, mysqld3.ddd = 0020; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep ccc $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep ddd $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- UNSET mysqld2.aaa, mysqld3.bbb, mysqld2.ccc, mysqld3.ddd; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep ccc $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep ddd $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- # - check that if some instance name is invalid or the active is active, # whole SET-statement will not be executed; --error 3000 # ER_BAD_INSTANCE_NAME SET mysqld2.aaa, mysqld3.bbb, mysqld.ccc = 0010; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep ccc $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --error 3015 # ER_INSTANCE_IS_ACTIVE SET mysqld2.aaa, mysqld3.bbb, mysqld1.ccc = 0010; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep ccc $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- # - check that if some instance name is invalid or the active is active, # whole UNSET-statement will not be executed; --error 3000 # ER_BAD_INSTANCE_NAME UNSET mysqld2.server_id, mysqld3.server_id, mysqld.ccc; --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf; --echo -------------------------------------------------------------------- --error 3015 # ER_INSTANCE_IS_ACTIVE UNSET mysqld2.server_id, mysqld3.server_id, mysqld1.ccc; --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf; --echo -------------------------------------------------------------------- DROP INSTANCE mysqld3; # - check that spaces are handled correctly; SET mysqld2.server_id=222; SET mysqld2.server_id = 222; SET mysqld2.server_id = 222 ; SET mysqld2 . server_id = 222 ; SET mysqld2 . server_id = 222 , mysqld2 . aaa , mysqld2 . bbb ; --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- UNSET mysqld2 . aaa , mysqld2 . bbb ; --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- --exec grep aaa $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- --exec grep bbb $MYSQLTEST_VARDIR/im.cnf || true; --echo -------------------------------------------------------------------- ########################################################################### # # Check that SET/UNSET updates both the configuration cache in IM and # the configuration file. # ########################################################################### # - check that the configuration file has been updated (i.e. contains # server_id=SERVER_ID for mysqld2); --echo -------------------------------------------------------------------- --exec grep server_id $MYSQLTEST_VARDIR/im.cnf ; --echo -------------------------------------------------------------------- # - (for mysqld1) check that the running instance has not been affected: # connect to the instance and check that 'SHOW VARIABLES LIKE 'server_id'' # returns zero; --connection mysql1_con SHOW VARIABLES LIKE 'server_id'; --connection default # - check that internal cache of Instance Manager has been affected; # TODO: we should check only server_id option here. # SHOW INSTANCE OPTIONS mysqld2; ########################################################################### # # Check that FLUSH INSTANCES is allowed only when all instances are stopped. # ########################################################################### SHOW INSTANCES; --error 3016 # ER_THERE_IS_ACTIVE_INSTACE FLUSH INSTANCES; STOP INSTANCE mysqld1; # FIXME: STOP INSTANCE should be synchronous. --sleep 3 # should be longer than monitoring interval and enough to stop instance. SHOW INSTANCES; FLUSH INSTANCES;