mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	BitKeeper/deleted/.del-events_restart_phase2.test: Delete: mysql-test/t/events_restart_phase2.test BitKeeper/deleted/.del-events_restart_phase2-master.opt: Delete: mysql-test/t/events_restart_phase2-master.opt BitKeeper/deleted/.del-events_restart_phase3.test: Delete: mysql-test/t/events_restart_phase3.test BitKeeper/deleted/.del-events_restart_phase3-master.opt: Delete: mysql-test/t/events_restart_phase3-master.opt BitKeeper/deleted/.del-events_restart_phase2.result: Delete: mysql-test/r/events_restart_phase2.result BitKeeper/deleted/.del-events_restart_phase3.result: Delete: mysql-test/r/events_restart_phase3.result mysql-test/include/restart_mysqld.inc: New BitKeeper file ``mysql-test/include/restart_mysqld.inc'' mysql-test/include/wait_until_disconnected.inc: New BitKeeper file ``mysql-test/include/wait_until_disconnected.inc'' mysql-test/t/events_restart-master.opt: New BitKeeper file ``mysql-test/t/events_restart-master.opt''
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # Can't test with embedded server that doesn't support grants
 | |
| -- source include/not_embedded.inc
 | |
| 
 | |
| #
 | |
| # 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;
 | |
| 
 | |
| --disable_warnings
 | |
| drop database if exists events_test;
 | |
| --enable_warnings
 | |
| 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"
 | |
| 
 | |
| --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_EVENTS_DB_ERROR
 | |
| set global event_scheduler=on;
 | |
| --error ER_EVENTS_DB_ERROR
 | |
| 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 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
 |