diff --git a/src/backend/utils/resgroup/resgroup_helper.c b/src/backend/utils/resgroup/resgroup_helper.c index db4a6cd0bad2dc335f997ade2ba9c08381cdfc09..c3df37929e6ed758d3b385e8ada5bdc6818f0b30 100644 --- a/src/backend/utils/resgroup/resgroup_helper.c +++ b/src/backend/utils/resgroup/resgroup_helper.c @@ -498,6 +498,11 @@ pg_resgroup_move_query(PG_FUNCTION_ARGS) Oid groupId; const char *groupName; + if (!IsResGroupEnabled()) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + (errmsg("resource group is not enabled")))); + if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), diff --git a/src/test/isolation2/input/resgroup/resgroup_move_query.source b/src/test/isolation2/input/resgroup/resgroup_move_query.source index 5f78c54a13e62b766031780b7b5b9a661f6db101..41b6963ecab47ca914287612267b56aa146aa8ca 100644 --- a/src/test/isolation2/input/resgroup/resgroup_move_query.source +++ b/src/test/isolation2/input/resgroup/resgroup_move_query.source @@ -26,7 +26,9 @@ $$ LANGUAGE sql; -- @param pid: the pid of QD -- @param groupname: resource group id -- @return bool: true/false indicating whether it the session is in the resource group +-- start_ignore CREATE LANGUAGE plpythonu; +-- end_ignore CREATE OR REPLACE FUNCTION is_session_in_group(pid integer, groupname text) RETURNS BOOL AS $$ import subprocess @@ -49,7 +51,7 @@ process = subprocess.Popen("ps -ef | grep postgres | grep con%d | grep -v grep | session_pids = process.communicate()[0].split('\n')[:-1] cgroups_pids = [] -path = "/sys/fs/cgroup/cpu/gpdb/%d/cgroup.procs" % groupid +path = "@cgroup_mnt_point@/cpu/gpdb/%d/cgroup.procs" % groupid fd = open(path) for line in fd.readlines(): cgroups_pids.append(line.strip('\n')) diff --git a/src/test/isolation2/output/resgroup/resgroup_move_query.source b/src/test/isolation2/output/resgroup/resgroup_move_query.source index 65ef6ea13c395113ff8cde31d8ca0c5d4fe822b8..2a64fd25f09db6ffe7a0fbe317abc21db035b59f 100644 --- a/src/test/isolation2/output/resgroup/resgroup_move_query.source +++ b/src/test/isolation2/output/resgroup/resgroup_move_query.source @@ -23,15 +23,17 @@ CREATE -- @param pid: the pid of QD -- @param groupname: resource group id -- @return bool: true/false indicating whether it the session is in the resource group +-- start_ignore CREATE LANGUAGE plpythonu; CREATE +-- end_ignore CREATE OR REPLACE FUNCTION is_session_in_group(pid integer, groupname text) RETURNS BOOL AS $$ import subprocess import pygresql.pg as pg import time import re conn = pg.connect(dbname="isolation2resgrouptest") pt = re.compile(r'con(\d+)') sql = "select sess_id from pg_stat_activity where pid = '%d'" % pid result = conn.query(sql).getresult() session_id = result[0][0] sql = "select groupid from gp_toolkit.gp_resgroup_config where groupname='%s'" % groupname result = conn.query(sql).getresult() groupid = result[0][0] process = subprocess.Popen("ps -ef | grep postgres | grep con%d | grep -v grep | awk '{print $2}'" % session_id, shell=True, stdout=subprocess.PIPE) session_pids = process.communicate()[0].split('\n')[:-1] -cgroups_pids = [] path = "/sys/fs/cgroup/cpu/gpdb/%d/cgroup.procs" % groupid fd = open(path) for line in fd.readlines(): cgroups_pids.append(line.strip('\n')) +cgroups_pids = [] path = "@cgroup_mnt_point@/cpu/gpdb/%d/cgroup.procs" % groupid fd = open(path) for line in fd.readlines(): cgroups_pids.append(line.strip('\n')) return set(session_pids).issubset(set(cgroups_pids)) $$ LANGUAGE plpythonu; CREATE