mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 18:36:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Can't test with embedded server that doesn't support grants
 | |
| -- source include/not_embedded.inc
 | |
| --disable_query_log
 | |
| call mtr.add_suppression('Column count of mysql.event is wrong. Expected .*, found .*\. The table is probably corrupted');
 | |
| call mtr.add_suppression('Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler');
 | |
| call mtr.add_suppression('Event Scheduler.*shutdown.*');
 | |
| --enable_query_log
 | |
| 
 | |
| let $collation_server=`select @@collation_server`;
 | |
| #
 | |
| # Test that when the server is restarted, it checks mysql.event table,
 | |
| # and disables the scheduler if it's not up to date.
 | |
| #
 | |
| 
 | |
| # Switch off the scheduler for now.
 | |
| set global event_scheduler=off;
 | |
| 
 | |
| create database events_test;
 | |
| use events_test;
 | |
| create table execution_log(name char(10));
 | |
| 
 | |
| create event abc1 on schedule every 1 second do
 | |
|   insert into execution_log value('abc1');
 | |
| create event abc2 on schedule every 1 second do
 | |
|   insert into execution_log value('abc2');
 | |
| create event abc3 on schedule every 1 second do 
 | |
|   insert into execution_log value('abc3');
 | |
| #
 | |
| # There are various conditions when a server would regard mysql.event
 | |
| # table as damaged:
 | |
| # - the table has more column than specified in the compiled in value, but
 | |
| # the version of the server which created the table is the same
 | |
| # - the column count in the table is less than the compiled in value
 | |
| # - some column has an incompatible type specification (for what is an
 | |
| # incompatible type specification please refer to the comments in the source
 | |
| #
 | |
| # Unfortunately, in order to test a condition, we need to restart the
 | |
| # server. Therefore, here we test only one simple case: changing the data
 | |
| # type of the 'body' field to blob.
 | |
| #
 | |
| # First, let's do a backup to not depend on actual definition of mysql.event
 | |
| create table event_like like mysql.event;
 | |
| insert into event_like select * from mysql.event;
 | |
| # Now let's alter the table and restart the server
 | |
| alter table mysql.event
 | |
|   change column body  body longtext character set utf8 collate utf8_bin;
 | |
| --echo # Now we restart the server
 | |
| 
 | |
| call mtr.add_suppression("Incorrect definition of table mysql.event:.*");
 | |
| --source include/restart_mysqld.inc
 | |
| 
 | |
| use events_test;
 | |
| # Event scheduler should be disabled: the system tables are damaged
 | |
| select @@event_scheduler;
 | |
| # Try various Event Scheduler operation and check the output.
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| show events;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| select event_name from information_schema.events;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| show create event intact_check;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| drop event no_such_event;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| create event intact_check_1 on schedule every 5 hour do select 5;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| alter event intact_check_1 on schedule every 8 hour do select 8;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| alter event intact_check_1 rename to intact_check_2;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| drop event intact_check_1;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| drop event intact_check_2;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| drop event intact_check;
 | |
| --error ER_STARTUP
 | |
| set global event_scheduler=on;
 | |
| --error ER_STARTUP
 | |
| set global event_scheduler=off;
 | |
| show variables like 'event_scheduler';
 | |
| --echo # Make sure that we still can create and drop databases,
 | |
| --echo # and no warnings are produced.
 | |
| drop database if exists mysqltest_database_not_exists;
 | |
| create database mysqltest_db1;
 | |
| drop database mysqltest_db1;
 | |
| --echo # Restore the original mysql.event table
 | |
| drop table mysql.event;
 | |
| rename table event_like to mysql.event;
 | |
| 
 | |
| --echo # check that we can now enable events without restart
 | |
| set global event_scheduler=original;
 | |
| select @@global.event_scheduler;
 | |
| set global event_scheduler=on;
 | |
| select @@global.event_scheduler;
 | |
| --sorted_result
 | |
| --replace_column 6 # 9 # 10 #
 | |
| --replace_result $collation_server latin1_swedish_ci
 | |
| show events;
 | |
| 
 | |
| --echo # Now let's restart the server again
 | |
| 
 | |
| --source include/restart_mysqld.inc
 | |
| 
 | |
| # We need this file primarily to make sure that the scheduler is restarted
 | |
| # and enabled after we have restored mysql.event table.
 | |
| # This is the final step of the "cleanup".
 | |
| #
 | |
| # Make sure also that events are executed OK after restart, just in case.
 | |
| use events_test;
 | |
| # Make sure the scheduler was started successfully
 | |
| select @@event_scheduler;
 | |
| let $wait_condition=select count(distinct name)=3 from execution_log;
 | |
| --source include/wait_condition.inc
 | |
| drop table execution_log;
 | |
| # Will drop all events
 | |
| drop database events_test;
 | |
| 
 | |
| let $wait_condition=
 | |
|   select count(*) = 0 from information_schema.processlist
 | |
|   where db='events_test' and command = 'Connect' and user=current_user();
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Test for bug#11748899 -- EVENT SET TO DISABLED AND ON COMPLETION
 | |
| --echo #                          NOT PRESERVE IS DELETED AT SERVER
 | |
| --echo #
 | |
| SELECT @@event_scheduler;
 | |
| USE test;
 | |
| --disable_warnings
 | |
| DROP EVENT IF EXISTS e1;
 | |
| --enable_warnings
 | |
| CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO SELECT 1; 
 | |
| --replace_column 6 # 9 # 10 #
 | |
| SHOW EVENTS;
 | |
| 
 | |
| --echo # Now we restart the server
 | |
| --source include/restart_mysqld.inc
 | |
| USE test;
 | |
| SELECT @@event_scheduler;
 | |
| --replace_column 6 # 9 # 10 #
 | |
| SHOW EVENTS;
 | |
| DROP EVENT e1;
 | |
| 
 | |
| --echo # end test for bug#11748899
 | |
| 
 | |
| --echo #
 | |
| --echo # Test for MDEV-21758 Events switched randomly to SLAVESIDE_DISABLED
 | |
| --echo #
 | |
| 
 | |
| create event ev on schedule every 1 minute do set @a= 1;
 | |
| select name, originator, status from mysql.event;
 | |
| 
 | |
| --let $server_id= `SELECT @@global.server_id`
 | |
| 
 | |
| --echo #
 | |
| --echo # Restarting server with server_id=100
 | |
| --echo #
 | |
| --let $restart_parameters= --server-id=100
 | |
| --source include/restart_mysqld.inc
 | |
| 
 | |
| select @@global.server_id;
 | |
| select name, originator, status from mysql.event;
 | |
| --eval set global server_id= $server_id
 | |
| 
 | |
| --echo #
 | |
| --echo # Restarting server with the original server_id=$server_id
 | |
| --echo #
 | |
| --let $restart_parameters=
 | |
| --source include/restart_mysqld.inc
 | |
| 
 | |
| select @@global.server_id;
 | |
| select name, originator, status from mysql.event;
 | |
| 
 | |
| # Cleanup
 | |
| drop event ev;
 | 
