blob: 936dc16a5653e74efa93d3f8ab6577a9c546d3b5 [file] [log] [blame]
CREATE FUNCTION checkResourceQueueMemoryLimits(cstring) RETURNS boolean
AS '@abs_builddir@/regress@DLSUFFIX@', 'checkResourceQueueMemoryLimits' LANGUAGE C READS SQL DATA;
CREATE TABLE test_table(c1 int, c2 int);
INSERT INTO test_table values(1, 2);
-- MPP-17240
CREATE RESOURCE QUEUE test_q WITH (ACTIVE_STATEMENTS = 1, MEMORY_LIMIT='10MB');
CREATE ROLE test_role WITH RESOURCE QUEUE test_q;
GRANT SELECT ON test_table TO test_role;
SET STATEMENT_MEM = '125MB';
-- should return true
select checkResourceQueueMemoryLimits('test_q');
SET ROLE test_role;
-- should deadlock as there aren't enough resources to run the query.
-- query should be assigned 125MB, but queue only allows 10MB
SELECT count(*) FROM test_table;
RESET ROLE;
-- should return true
select checkResourceQueueMemoryLimits('test_q');
RESET STATEMENT_MEM;
REVOKE SELECT ON test_table FROM test_role;
DROP ROLE test_role;
DROP RESOURCE QUEUE test_q;
-- MPP-15992
CREATE RESOURCE QUEUE test_q WITH (ACTIVE_STATEMENTS = 1, MEMORY_LIMIT='8GB');
CREATE ROLE test_role WITH RESOURCE QUEUE test_q;
GRANT SELECT ON test_table TO test_role;
SET ROLE test_role;
-- should return result
SELECT count(*) FROM test_table;
RESET ROLE;
ALTER RESOURCE QUEUE test_q WITH (ACTIVE_STATEMENTS = 1, MEMORY_LIMIT='10GB');
SET ROLE test_role;
-- should return result
SELECT count(*) FROM test_table;
RESET ROLE;
-- should return true
select checkResourceQueueMemoryLimits('test_q');
ALTER RESOURCE QUEUE test_q WITH (ACTIVE_STATEMENTS = 1, MEMORY_LIMIT='7GB');
SET ROLE test_role;
-- should return result
SELECT count(*) FROM test_table;
RESET ROLE;
-- should return true
select checkResourceQueueMemoryLimits('test_q');
REVOKE SELECT ON test_table FROM test_role;
DROP TABLE test_table;
DROP ROLE test_role;
DROP RESOURCE QUEUE test_q;
DROP FUNCTION checkResourceQueueMemoryLimits(cstring);