mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	This is a post-review patch.
Fixes the typelib implementation, available only in 5.1.11.
--event-scheduler cmdline : DISABLED | ON | OFF | 0 | 1
DISABLED - makes the scheduler unavailable during the server run
(ON|1)-  When the server is started the scheduler will be started. It can
         be stopped and restarted by setting appropriate values to
         GLOBAL event_scheduler
(OFF|0)- When the server is started, the scheduler won't be started. It
         can be started and again stopped by setting appropriate values to
         GLOBAL event_scheduler. _DEFAULT_ value
The GLOBAL variable event_scheduler can have the following values:
OFF | ON | 0 | 1
DISABLED is not possible and every attempt will end with an error that
it's not a valid value for the variable.
OFF | 0 - This is the pre-5.1.11 behavior - The scheduler stops, if not
          already stopped, and can be started again  by setting
          the value of the variable to ON|1.
ON | 1  - This is the pre-5.1.11 behavior - The scheduler starts, if not
          already started, and can be stopped again by setting the value
          of the variable to OFF|0.
mysql-test/r/events.result:
  update result
mysql-test/r/events_bugs.result:
  update result
mysql-test/r/events_logs_tests.result:
  update result
mysql-test/r/events_restart_phase1.result:
  update result
mysql-test/r/events_restart_phase3.result:
  update result
mysql-test/r/events_scheduling.result:
  update result
mysql-test/r/events_stress.result:
  update result
mysql-test/t/events.test:
  update test:
  2 -> off
  1 -> on
mysql-test/t/events_bugs.test:
  update test:
  2 -> off
  1 -> on
mysql-test/t/events_logs_tests.test:
  update test:
  2 -> off
  1 -> on
mysql-test/t/events_restart_phase1.test:
  update test:
  2 -> off
  1 -> on
mysql-test/t/events_restart_phase2-master.opt:
  update master file : 1 => on
mysql-test/t/events_scheduling.test:
  update test:
  2 -> off
  1 -> on
  
  add tests for event_scheduler global variable representation from
  SHOW VARIABLES.
mysql-test/t/events_stress.test:
  update test:
  2 -> off
  1 -> on
sql/events.cc:
  Implement two different TYPELIBs for --event-scheduler cmd line
  option and for GLOBAL variable event_scheduler
  
  --event-scheduler cmdline : DISABLED | ON | OFF | 0 | 1
  DISABLED - makes the scheduler unavailable during the server run
  (ON|1)-  When the server is started the scheduler will be started. It can
           be stopped and restarted by setting appropriate values to
           GLOBAL event_scheduler
  (OFF|0)- When the server is started, the scheduler won't be started. It
           can be started and again stopped by setting appropriate values to
           GLOBAL event_scheduler. _DEFAULT_ value
  
  The GLOBAL variable event_scheduler can have the following values:
  OFF | ON | 0 | 1
  DISABLED is not possible and every attempt will end with an error that
  it's not a valid value for the variable.
  OFF | 0 - This is the pre-5.1.11 behavior - The scheduler stops, if not
            already stopped, and can be started again  by setting
            the value of the variable to ON|1.
  ON | 1  - This is the pre-5.1.11 behavior - The scheduler starts, if not
            already started, and can be stopped again by setting the value
            of the variable to OFF|0.
sql/events.h:
  additional TYPELIB for GLOBAL event_scheduler
sql/mysqld.cc:
  --event-scheduler should be checked against a TYPELIB and
  therefore should be GET_STR, as well as we make the parameter optional.
  When not provided OFF|0 is used.
sql/set_var.cc:
  Implement typelib for event_scheduler variable.
  If allows both INT_RESULT -> 0 | 1 
  and STRING_RESULT -> OFF | ON
  The variable is shown as DISABLED | ON | OFF
sql/set_var.h:
  Implement typelib, which expects both STRING and INT,
  for event_scheduler.
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Can't test with embedded server that doesn't support grants
 | 
						|
-- source include/not_embedded.inc
 | 
						|
 | 
						|
CREATE DATABASE IF NOT EXISTS events_test;
 | 
						|
USE events_test;
 | 
						|
--echo "We use procedure here because its statements won't be logged into the general log"
 | 
						|
--echo "If we had used normal select that are logged in different ways depending on whether"
 | 
						|
--echo "the test suite is run in normal mode or with --ps-protocol"
 | 
						|
delimiter |;
 | 
						|
CREATE procedure select_general_log()
 | 
						|
BEGIN
 | 
						|
  SELECT user_host, argument FROM mysql.general_log WHERE argument LIKE '%alabala%';
 | 
						|
END|
 | 
						|
delimiter ;|
 | 
						|
--echo "Check General Query Log"
 | 
						|
--replace_column 1 USER_HOST
 | 
						|
CALL select_general_log();
 | 
						|
SET GLOBAL event_scheduler=on;
 | 
						|
TRUNCATE mysql.general_log;
 | 
						|
CREATE EVENT log_general ON SCHEDULE EVERY 1 MINUTE DO SELECT 'alabala', SLEEP(1) FROM DUAL;
 | 
						|
--echo "Wait the scheduler to start"
 | 
						|
--sleep 1.5
 | 
						|
--echo "Should see 2 rows - the 'SELECT' is in the middle. The other two are selects from general_log"
 | 
						|
--replace_column 1 USER_HOST
 | 
						|
CALL select_general_log();
 | 
						|
DROP PROCEDURE select_general_log;
 | 
						|
DROP EVENT log_general;
 | 
						|
SET GLOBAL event_scheduler=off;
 | 
						|
 | 
						|
--echo "Check slow query log"
 | 
						|
--disable_query_log
 | 
						|
DELIMITER |;
 | 
						|
CREATE FUNCTION get_value()
 | 
						|
  returns INT
 | 
						|
  deterministic
 | 
						|
BEGIN
 | 
						|
  DECLARE var_name CHAR(255);
 | 
						|
  DECLARE var_val INT;
 | 
						|
  DECLARE done INT DEFAULT 0;
 | 
						|
  DECLARE cur1 CURSOR FOR SHOW GLOBAL VARIABLES LIKE 'long_query_time';
 | 
						|
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 | 
						|
  OPEN cur1;
 | 
						|
  FETCH cur1 INTO var_name, var_val;
 | 
						|
  CLOSE cur1;
 | 
						|
  RETURN var_val;
 | 
						|
end|
 | 
						|
DELIMITER ;|
 | 
						|
--enable_query_log
 | 
						|
--echo "Save the values"
 | 
						|
SET @old_global_long_query_time:=(select get_value());
 | 
						|
SET @old_session_long_query_time:=@@long_query_time;
 | 
						|
SHOW VARIABLES LIKE 'log_slow_queries';
 | 
						|
DROP FUNCTION get_value;
 | 
						|
--echo "Make it quite long"
 | 
						|
SET SESSION long_query_time=300;
 | 
						|
TRUNCATE mysql.slow_log;
 | 
						|
--replace_column 1 USER_HOST
 | 
						|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
 | 
						|
--echo "Set new values"
 | 
						|
SET GLOBAL long_query_time=4;
 | 
						|
SET SESSION long_query_time=1;
 | 
						|
--echo "Check that logging is working"
 | 
						|
SELECT SLEEP(2);
 | 
						|
--replace_column 1 USER_HOST 2 SLEEPVAL
 | 
						|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
 | 
						|
SET SESSION long_query_time=300;
 | 
						|
--echo "Make it quite long"
 | 
						|
TRUNCATE mysql.slow_log;
 | 
						|
CREATE TABLE slow_event_test (slo_val tinyint, val tinyint);
 | 
						|
SET SESSION long_query_time=1;
 | 
						|
--echo "This won't go to the slow log"
 | 
						|
SELECT * FROM slow_event_test;
 | 
						|
SET SESSION long_query_time=1;
 | 
						|
SET GLOBAL event_scheduler=on;
 | 
						|
CREATE EVENT long_event ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(1.5);
 | 
						|
--echo "Sleep some more time than the actual event run will take"
 | 
						|
--sleep 2
 | 
						|
SHOW VARIABLES LIKE 'event_scheduler';
 | 
						|
--echo "Check our table. Should see 1 row"
 | 
						|
SELECT * FROM slow_event_test;
 | 
						|
--echo "Check slow log. Should not see anything because 1.5 is under the threshold of 300 for GLOBAL, though over SESSION which is 2"
 | 
						|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
 | 
						|
--echo "This should go to the slow log"
 | 
						|
DROP EVENT long_event;
 | 
						|
SET SESSION long_query_time=10;
 | 
						|
SET GLOBAL long_query_time=1;
 | 
						|
CREATE EVENT long_event2 ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO slow_event_test SELECT @@long_query_time, SLEEP(2);
 | 
						|
--echo "Sleep some more time than the actual event run will take"
 | 
						|
--sleep 2.5
 | 
						|
--echo "Check our table. Should see 2 rows"
 | 
						|
SELECT * FROM slow_event_test;
 | 
						|
--echo "Check slow log. Should see 1 row because 4 is over the threshold of 3 for GLOBAL, though under SESSION which is 10"
 | 
						|
--replace_column 1 USER_HOST 2 SLEEPVAL
 | 
						|
SELECT user_host, query_time, db, sql_text FROM mysql.slow_log;
 | 
						|
DROP EVENT long_event2;
 | 
						|
--echo "Make it quite long"
 | 
						|
SET SESSION long_query_time=300;
 | 
						|
TRUNCATE mysql.slow_log;
 | 
						|
DROP TABLE slow_event_test;
 | 
						|
SET GLOBAL  long_query_time =@old_global_long_query_time;
 | 
						|
SET SESSION long_query_time =@old_session_long_query_time; 
 | 
						|
 | 
						|
DROP DATABASE events_test;
 |