mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned
		
			
				
	
	
		
			249 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
###########################################################################
 | 
						|
#
 | 
						|
# 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)
 | 
						|
#
 | 
						|
# NOTE: each CREATE INSTANCE statement must specify socket-file-name, otherwise
 | 
						|
# this results of the test can be affected by another running test suite.
 | 
						|
#
 | 
						|
###########################################################################
 | 
						|
 | 
						|
--source include/im_check_env.inc
 | 
						|
 | 
						|
###########################################################################
 | 
						|
#
 | 
						|
# 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 = '/',
 | 
						|
  server_id = 3,
 | 
						|
  socket = "$MYSQL_TMP_DIR/mysqld_3.sock";
 | 
						|
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[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
 | 
						|
--echo --------------------------------------------------------------------
 | 
						|
--exec grep '^ddd[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
 | 
						|
--echo --------------------------------------------------------------------
 | 
						|
--exec grep '^ddd[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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[^a-zA-Z0-9_-]' $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;
 |