mirror of
https://github.com/MariaDB/server.git
synced 2025-01-24 07:44:22 +01:00
c557623a68
This will hopefully fix events.test failure on vmware-win32, where scheduling is very primitive. mysql-test/t/events_scheduling.test: This test case has no races now and can be enabled under valgrind. sql/event_scheduler.cc: Make Event Scheduler thread shutdown more synchronous: report successful shutdown only after having removed the scheduler thread from the global list of threads. This ensures that after the scheduler has been stopped, its thread is not present in SHOW PROCESSLIST output.
108 lines
3.4 KiB
Text
108 lines
3.4 KiB
Text
# 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;
|
|
|
|
SET GLOBAL event_scheduler=OFF;
|
|
--echo Try agian to make sure it's allowed
|
|
SET GLOBAL event_scheduler=OFF;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
SET GLOBAL event_scheduler=1;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
SET GLOBAL event_scheduler=0;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
SET GLOBAL event_scheduler=ON;
|
|
--echo Try again to make sure it's allowed
|
|
SET GLOBAL event_scheduler=ON;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET GLOBAL event_scheduler=DISABLED;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET GLOBAL event_scheduler=-1;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET GLOBAL event_scheduler=2;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET GLOBAL event_scheduler=5;
|
|
SHOW VARIABLES LIKE 'event_scheduler';
|
|
|
|
CREATE TABLE table_1(a int);
|
|
CREATE TABLE table_2(a int);
|
|
CREATE TABLE table_3(a int);
|
|
CREATE TABLE table_4(a int);
|
|
|
|
SET GLOBAL event_scheduler=ON;
|
|
# We need to have 2 to make it safe with valgrind. This is probably because
|
|
# of when we calculate the timestamp value
|
|
CREATE EVENT event_1 ON SCHEDULE EVERY 2 SECOND
|
|
DO
|
|
INSERT INTO table_1 VALUES (1);
|
|
|
|
CREATE EVENT event_2 ON SCHEDULE EVERY 1 SECOND
|
|
ENDS NOW() + INTERVAL 6 SECOND
|
|
ON COMPLETION PRESERVE
|
|
DO
|
|
INSERT INTO table_2 VALUES (1);
|
|
|
|
CREATE EVENT event_3 ON SCHEDULE EVERY 2 SECOND ENDS NOW() + INTERVAL 1 SECOND
|
|
ON COMPLETION NOT PRESERVE
|
|
DO
|
|
INSERT INTO table_3 VALUES (1);
|
|
|
|
CREATE EVENT event_4 ON SCHEDULE EVERY 1 SECOND ENDS NOW() + INTERVAL 1 SECOND
|
|
ON COMPLETION PRESERVE
|
|
DO
|
|
INSERT INTO table_4 VALUES (1);
|
|
|
|
# Let event_1 insert at least 4 records into the table
|
|
let $wait_condition=select count(*) >= 4 from table_1;
|
|
--source include/wait_condition.inc
|
|
|
|
# Let event_2 reach the end of its execution interval
|
|
let $wait_condition=select count(*) = 0 from information_schema.events
|
|
where event_name='event_2' and status='enabled';
|
|
--source include/wait_condition.inc
|
|
|
|
# Let event_3, which is ON COMPLETION NOT PRESERVE execute and drop itself
|
|
let $wait_condition=select count(*) = 0 from information_schema.events
|
|
where event_name='event_3';
|
|
--source include/wait_condition.inc
|
|
|
|
# Let event_4 reach the end of its execution interval
|
|
let $wait_condition=select count(*) = 0 from information_schema.events
|
|
where event_name='event_4' and status='enabled';
|
|
--source include/wait_condition.inc
|
|
|
|
# check the data
|
|
|
|
SELECT IF(SUM(a) >= 4, 'OK', 'ERROR') FROM table_1;
|
|
SELECT IF(SUM(a) >= 5, 'OK', 'ERROR') FROM table_2;
|
|
SELECT IF(SUM(a) >= 1, 'OK', 'ERROR') FROM table_3;
|
|
SELECT IF(SUM(a) >= 1, 'OK', 'ERROR') FROM table_4;
|
|
|
|
SELECT IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR')
|
|
FROM INFORMATION_SCHEMA.EVENTS
|
|
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
|
|
|
|
SELECT IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR')
|
|
FROM INFORMATION_SCHEMA.EVENTS
|
|
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
|
|
|
|
--echo "Already dropped because ended. Therefore an error."
|
|
--error ER_EVENT_DOES_NOT_EXIST
|
|
DROP EVENT event_3;
|
|
|
|
DROP EVENT event_1;
|
|
--echo "Should be preserved"
|
|
SELECT EVENT_NAME, STATUS FROM INFORMATION_SCHEMA.EVENTS ORDER BY EVENT_NAME;
|
|
DROP EVENT event_2;
|
|
DROP EVENT event_4;
|
|
DROP TABLE table_1;
|
|
DROP TABLE table_2;
|
|
DROP TABLE table_3;
|
|
DROP TABLE table_4;
|
|
DROP DATABASE events_test;
|
|
SET GLOBAL event_scheduler=OFF;
|