357 lines
13 KiB
PHP
357 lines
13 KiB
PHP
--echo # Create Resource Group Tests
|
|
|
|
--echo # 1. Invalid Resource Group Name.
|
|
--error 1064
|
|
CREATE RESOURCE GROUP 'invalid_utf8¿ÿres' TYPE=USER VCPU=1-3, 1;
|
|
|
|
--echo # 2. Invalid Resource Group Type
|
|
--error 1064
|
|
CREATE RESOURCE GROUP test TYPE=INVALID_TYPE VCPU=3-1, 0;
|
|
|
|
--echo # 3. Invalid VCPU ID and VCPU Range
|
|
--replace_result $num_vcpu MAX_CPU_NUM
|
|
--error ER_INVALID_VCPU_ID
|
|
--eval CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=$num_vcpu
|
|
|
|
--echo # 3.1 Invalid VCPU Range.
|
|
--error ER_INVALID_VCPU_RANGE
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=3-1;
|
|
|
|
--echo # 4. Invalid Value of thread priority.
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
--error ER_INVALID_THREAD_PRIORITY
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=25;
|
|
|
|
--echo # Create system resource group with invalid thread priority value.
|
|
--error ER_INVALID_THREAD_PRIORITY
|
|
CREATE RESOURCE GROUP system_resource TYPE=system THREAD_PRIORITY=25;
|
|
}
|
|
|
|
--echo # 5. Invalid Value of thread priority for user resource group type.
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
--error ER_INVALID_THREAD_PRIORITY
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=-5;
|
|
}
|
|
|
|
--echo # 5.1 Thread priority ignored warning.
|
|
if ($thr_prio_enable == 0)
|
|
{
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=-5;
|
|
SHOW WARNINGS;
|
|
}
|
|
|
|
--echo # 6. Create a valid user resource group.
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
|
|
}
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
|
|
|
|
--echo # 7. Resource group already exists error.
|
|
--error ER_RESOURCE_GROUP_EXISTS
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
|
|
|
|
--echo # 7.1 Case sensitivity of RESOURCE GROUP.
|
|
--error ER_RESOURCE_GROUP_EXISTS
|
|
CREATE RESOURCE GROUP USER_resource TYPE=USER;
|
|
DROP RESOURCE GROUP user_resource;
|
|
|
|
--echo # 8. Privilege Error - user with default privileges can't create resource group.
|
|
CREATE USER u1;
|
|
--connect(con1,localhost,u1,'',)
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
|
|
|
|
|
|
--echo # 9. Privilege Error - user with RESOURCE_GROUP_USER privilege can't create resource group.
|
|
--connection default
|
|
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
|
|
--connection con1
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP USER u1;
|
|
|
|
--echo # 10. Length of resource group name is greater than maximum allowed limit of identifier names.
|
|
--error ER_TOO_LONG_IDENT
|
|
CREATE RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff TYPE=USER;
|
|
|
|
--echo # ALTER resource group tests
|
|
|
|
--echo # 1. Alter on non-existent resource group.
|
|
--error ER_RESOURCE_GROUP_NOT_EXISTS
|
|
ALTER RESOURCE GROUP user_resource VCPU=3;
|
|
|
|
--echo # 2. Alter with a invalid CPU ID
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
|
|
--replace_result $num_vcpu MAX_CPU_NUM
|
|
--error ER_INVALID_VCPU_ID
|
|
--eval ALTER RESOURCE GROUP user_resource VCPU=$num_vcpu
|
|
|
|
--echo # 3. Alter with invalid CPU range.
|
|
--error ER_INVALID_VCPU_RANGE
|
|
ALTER RESOURCE GROUP user_resource VCPU=3-1;
|
|
|
|
--echo # 4. Alter with invalid thread_priority
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
--error ER_INVALID_THREAD_PRIORITY
|
|
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=25;
|
|
}
|
|
|
|
--echo # 5. Alter with invalid thread priority for a user resource group.
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
--error ER_INVALID_THREAD_PRIORITY
|
|
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=-5;
|
|
}
|
|
if ($thr_prio_enable == 0)
|
|
{
|
|
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=-5;
|
|
}
|
|
|
|
--echo # 6. DISABLE and ENABLE the resource group.
|
|
ALTER RESOURCE GROUP user_resource DISABLE;
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
|
|
ALTER RESOURCE GROUP user_resource ENABLE;
|
|
|
|
--echo # 7. Test FORCE option of ALTER
|
|
SET RESOURCE GROUP user_resource;
|
|
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
|
|
--error ER_INVALID_USE_OF_FORCE_OPTION
|
|
ALTER RESOURCE GROUP user_resource FORCE;
|
|
ALTER RESOURCE GROUP user_resource DISABLE;
|
|
ALTER RESOURCE GROUP user_resource DISABLE FORCE;
|
|
SELECT COUNT(*) = 0 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
|
|
|
|
--echo # 8. Privilege Error - user with default privileges can't alter resource group.
|
|
CREATE USER u1;
|
|
--connect(con1,localhost,u1,'',)
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
ALTER RESOURCE GROUP user_resource VCPU=0 THREAD_PRIORITY=5;
|
|
|
|
|
|
--echo # 9. Privilege Error - user with RESOURCE_GROUP_USER privilege can't alter resource group.
|
|
--connection default
|
|
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
|
|
--connection con1
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
ALTER RESOURCE GROUP user_resource VCPU=0 THREAD_PRIORITY=5;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP USER u1;
|
|
|
|
--echo # 10. Length of resource group name is greater than maximum allowed limit of identifier names.
|
|
--error ER_TOO_LONG_IDENT
|
|
ALTER RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff DISABLE;
|
|
|
|
--echo # 11. Default resource groups can't be altered.
|
|
--error ER_DISALLOWED_OPERATION
|
|
ALTER RESOURCE GROUP SYS_default VCPU=0;
|
|
|
|
--error ER_DISALLOWED_OPERATION
|
|
ALTER RESOURCE GROUP USR_default VCPU=1;
|
|
|
|
--echo # 11. Alter VCPU IDS and/or thread priority
|
|
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
|
|
ALTER RESOURCE GROUP user_resource VCPU=0,2;
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
|
|
if ($thr_prio_enable == 1)
|
|
{
|
|
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=3;
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
|
|
ALTER RESOURCE GROUP user_resource VCPU=3 THREAD_PRIORITY=1;
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
|
|
}
|
|
|
|
--echo # DROP resource group tests.
|
|
|
|
--echo # 1. DROP on a non-existent resource group.
|
|
--error ER_RESOURCE_GROUP_NOT_EXISTS
|
|
DROP RESOURCE GROUP user_resource1;
|
|
|
|
--echo # 2. DROP an existing resource group.
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
|
|
DROP RESOURCE GROUP user_resource;
|
|
|
|
--echo # 3. Test FORCE option of resource group.
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=7;
|
|
SET RESOURCE GROUP user_resource;
|
|
--error ER_RESOURCE_GROUP_BUSY
|
|
DROP RESOURCE GROUP user_resource;
|
|
SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
|
|
DROP RESOURCE GROUP user_resource FORCE;
|
|
SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
|
|
|
|
--echo # 4. Privilege Error - user with RESOURCE_GROUP_USER privilege can't drop resource group.
|
|
CREATE USER u1;
|
|
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3;
|
|
--connect(con1,localhost,u1,'',)
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
DROP RESOURCE GROUP user_resource;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP RESOURCE GROUP user_resource;
|
|
DROP USER u1;
|
|
|
|
--echo # 10. Length of resource group name is greater than maximum allowed limit of identifier names.
|
|
--error ER_TOO_LONG_IDENT
|
|
DROP RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff;
|
|
|
|
--echo # 11. Default resource groups can't be dropped.
|
|
--error ER_DISALLOWED_OPERATION
|
|
DROP RESOURCE GROUP USR_default;
|
|
--error ER_DISALLOWED_OPERATION
|
|
DROP RESOURCE GROUP SYS_default;
|
|
|
|
--echo # SET resource group tests.
|
|
# 1. Assigning a non-existing resource group.
|
|
--error ER_RESOURCE_GROUP_NOT_EXISTS
|
|
SET RESOURCE GROUP user_resource;
|
|
|
|
--echo # 2. SET current session to a resource group.
|
|
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=7;
|
|
SET RESOURCE GROUP user_resource;
|
|
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
|
|
|
|
--echo # 3. Assign a system thread to a user resource group.
|
|
let $pfs_system_thread_id=`select thread_id from performance_schema.threads where name='thread/innodb/io_write_thread'`;
|
|
--replace_result $pfs_system_thread_id pfs_system_thread_id
|
|
--error ER_RESOURCE_GROUP_BIND_FAILED
|
|
--eval SET RESOURCE GROUP user_resource FOR $pfs_system_thread_id;
|
|
|
|
--echo # 4. Assign a system thread to system resource group.
|
|
CREATE RESOURCE GROUP system_resource TYPE=SYSTEM VCPU=0-2 THREAD_PRIORITY=-1;
|
|
--replace_result $pfs_system_thread_id pfs_system_thread_id
|
|
--eval SET RESOURCE GROUP system_resource FOR $pfs_system_thread_id;
|
|
--replace_result $pfs_system_thread_id pfs_system_thread_id
|
|
--eval SELECT THREAD_ID, NAME, RESOURCE_GROUP FROM performance_schema.threads WHERE THREAD_ID=$pfs_system_thread_id;
|
|
|
|
--echo # 5. Assign a group of threads to a resource group.
|
|
let $pfs_system_thread_id1=`select thread_id from performance_schema.threads where name='thread/innodb/io_read_thread'`;
|
|
let $pfs_system_thread_id2=`select thread_id from performance_schema.threads where name='thread/innodb/io_ibuf_thread'`;
|
|
--replace_result $pfs_system_thread_id1 pfs_system_thread_id1 $pfs_system_thread_id2 pfs_system_thread_id2
|
|
--eval SET RESOURCE GROUP system_resource FOR $pfs_system_thread_id1, $pfs_system_thread_id2;
|
|
--replace_result $pfs_system_thread_id1 pfs_system_thread_id1 $pfs_system_thread_id2 pfs_system_thread_id2
|
|
--eval SELECT COUNT(*) = 2 FROM performance_schema.threads WHERE THREAD_ID IN ($pfs_system_thread_id1, $pfs_system_thread_id2);
|
|
|
|
--echo # 6. Privilege Tests
|
|
|
|
CREATE USER u1;
|
|
--connect(con1, localhost, u1, '', )
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
SET RESOURCE GROUP user_resource;
|
|
|
|
--connection default
|
|
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
|
|
--connection con1
|
|
SET RESOURCE GROUP user_resource;
|
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
|
SET RESOURCE GROUP system_resource;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP USER u1;
|
|
|
|
--echo # 7. SET RESOURCE GROUP on invalid thread id will give warning.
|
|
--error ER_INVALID_THREAD_ID
|
|
SET RESOURCE GROUP user_resource FOR 77777;
|
|
|
|
--echo # 8. Disable resource group and assign to the current session - This should give error.
|
|
ALTER RESOURCE GROUP user_resource DISABLE;
|
|
--error ER_RESOURCE_GROUP_DISABLED
|
|
SET RESOURCE GROUP user_resource;
|
|
DROP RESOURCE GROUP user_resource FORCE;
|
|
|
|
|
|
--echo # 10. Length of resource group name is greater than maximum allowed limit of identifier names.
|
|
--error ER_TOO_LONG_IDENT
|
|
SET RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff;
|
|
|
|
--echo # 11. Do not allow a system resource group to be assigned to user thread.
|
|
--replace_regex /thread id \([0-9]+\)/thread id ID/
|
|
--error ER_RESOURCE_GROUP_BIND_FAILED
|
|
SET RESOURCE GROUP SYS_default;
|
|
|
|
--echo # Query Hint Tests
|
|
|
|
--echo # 1. Hint on non-existent Resource Group.
|
|
SELECT /*+ RESOURCE_GROUP(rg) */ 1;
|
|
|
|
--echo # 2. Using system resource group in hint for a non-privilege user should give warning
|
|
CREATE USER u1;
|
|
--connect(con1, localhost, u1, '', )
|
|
--replace_regex /thread id \([0-9]+\)/thread id ID/
|
|
SELECT /*+ RESOURCE_GROUP(system_resource) */ 1;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP USER u1;
|
|
|
|
--echo # 3. Length of resource group name is greater than maximum allowed limit of identifier names.
|
|
--echo # length shall be truncated in this case and warning output to user.
|
|
SELECT /*+ RESOURCE GROUP (user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffffff#f) */ 1;
|
|
|
|
--echo # Information Schema and Privilege related tests.
|
|
--replace_regex /0-[0-9]+/NUM_VCPUS/
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
|
|
CREATE USER u1;
|
|
--connect(con1,localhost,u1,'',)
|
|
--replace_regex /0-[0-9]+/NUM_VCPUS/
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
|
|
--connection default
|
|
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
|
|
--connection con1
|
|
--replace_regex /0-[0-9]+/NUM_VCPUS/
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
|
|
--connection default
|
|
GRANT RESOURCE_GROUP_ADMIN ON *.* TO u1;
|
|
--connection con1
|
|
--replace_regex /0-[0-9]+/NUM_VCPUS/
|
|
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
|
|
--connection default
|
|
--disconnect con1
|
|
DROP USER u1;
|
|
DROP RESOURCE GROUP system_resource FORCE;
|
|
|
|
--echo # BUG 27638623 - DEBUG ASSERT WHEN EXECUTING CREATE RESOURCE GROUP
|
|
--echo # IN STORED FUNCTION
|
|
|
|
|
|
delimiter |;
|
|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
|
|
CREATE FUNCTION func() RETURNS INT
|
|
BEGIN
|
|
CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3;
|
|
RETURN 0;
|
|
END|
|
|
|
|
# Check SET RESOURCE GROUP is allowed in stored procedures.
|
|
CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3|
|
|
CREATE FUNCTION func() RETURNS INT
|
|
BEGIN
|
|
SET RESOURCE GROUP Batch;
|
|
RETURN 0;
|
|
END|
|
|
delimiter ;|
|
|
SELECT func();
|
|
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="Batch";
|
|
DROP RESOURCE GROUP Batch FORCE;
|
|
DROP FUNCTION func;
|
|
|
|
|
|
#
|
|
# BUG#28448258 - PREPARED STATEMENT FAILS FOR SET RESOURCE GROUP
|
|
#
|
|
CREATE RESOURCE GROUP test TYPE = USER VCPU=2-3;
|
|
SET @rg_name='test';
|
|
SET @cmd = CONCAT("SET RESOURCE GROUP ", @rg_name);
|
|
SELECT @cmd;
|
|
PREPARE stmt FROM @cmd;
|
|
EXECUTE stmt;
|
|
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="test";
|
|
DROP RESOURCE GROUP test FORCE;
|