polardbxengine/mysql-test/t/version_token_bug21280801.test

96 lines
3.2 KiB
Plaintext

# Save the initial number of concurrent sessions
--disable_ps_protocol
--source include/count_sessions.inc
--echo # Check if the plugin is present
if ( !$VERSION_TOKEN ) {
skip Locking service plugin requires the environment variable \$VERSION_TOKEN to be set (normally done by mtr);
}
--echo # initialize the version token plugin
--replace_regex /\.dll/.so/
eval INSTALL PLUGIN version_tokens SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_set RETURNS STRING SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_show RETURNS STRING SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_edit RETURNS STRING SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_delete RETURNS STRING SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_lock_shared RETURNS INT SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_lock_exclusive RETURNS INT SONAME '$VERSION_TOKEN';
--replace_regex /\.dll/.so/
eval CREATE FUNCTION version_tokens_unlock RETURNS INT SONAME '$VERSION_TOKEN';
--echo # Initialize performance_schema
UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
WHERE name IN ('wait/io/table/sql/handler',
'wait/lock/table/sql/handler',
'wait/lock/metadata/sql/mdl');
INSERT INTO performance_schema.setup_objects (object_type, object_schema, object_name, enabled, timed)
VALUES ('TABLE', 'mtr', '%', 'NO', 'NO');
--echo #
--echo # Bug 21280801: VERSION TOKEN LOCKING DOES NOT WORK
--echo #
DO version_tokens_set('vt1=11;vt2=22;vt3=33;vt4=44;vt5=55');
SELECT version_tokens_show();
DO version_tokens_lock_exclusive('vt3', 'vt5', 'vt1', 0);
--echo # Must return 3 rows
SELECT OBJECT_NAME, LOCK_TYPE, LOCK_DURATION, LOCK_STATUS
FROM performance_schema.metadata_locks
WHERE OBJECT_NAME in ('vt1','vt3','vt5') AND
LOCK_TYPE='EXCLUSIVE'
ORDER BY OBJECT_NAME;
--connect(con2,localhost,root,,)
--error ER_LOCKING_SERVICE_TIMEOUT
DO version_tokens_lock_exclusive('vt3', 'vt5', 'vt1', 4);
--connection default
disconnect con2;
DO version_tokens_unlock();
--echo # Must return 0 rows
SELECT OBJECT_NAME, LOCK_TYPE, LOCK_DURATION, LOCK_STATUS
FROM performance_schema.metadata_locks
WHERE OBJECT_NAME in ('vt1','vt3','vt5') AND
LOCK_TYPE='EXCLUSIVE'
ORDER BY OBJECT_NAME;
--echo # End of 5.7 tests
--echo # Cleanup
--echo # wait for all sessions to disconnect
--source include/wait_until_count_sessions.inc
--echo # Cleanup performance schema
UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
DELETE FROM performance_schema.setup_objects WHERE object_schema='mtr';
--echo # clean up version token plugin
UNINSTALL PLUGIN version_tokens;
DROP FUNCTION version_tokens_set;
DROP FUNCTION version_tokens_show;
DROP FUNCTION version_tokens_edit;
DROP FUNCTION version_tokens_delete;
DROP FUNCTION version_tokens_lock_shared;
DROP FUNCTION version_tokens_lock_exclusive;
DROP FUNCTION version_tokens_unlock;
--echo # Cleanup done