blob: 531b84c12c496a0e88c6b621b18ad5524a90765c [file] [log] [blame]
DROP ROLE IF EXISTS role_dumpinfo_test;
DROP ROLE IF EXISTS role_permission;
-- start_ignore
DROP RESOURCE GROUP rg_dumpinfo_test;
CREATE LANGUAGE plpython3u;
-- end_ignore
CREATE FUNCTION dump_test_check() RETURNS bool
as $$
import json
def validate(json_obj, segnum):
array = json_obj.get("info")
#validate segnum
if len(array) != segnum:
return False
qd_info = [j for j in array if j["segid"] == -1][0]
#validate keys
keys = ["segid", "segmentsOnMaster", "loaded", "groups"]
for key in keys:
if key not in qd_info:
return False
groups = [g for g in qd_info["groups"] if g["group_id"] > 6448]
#validate user created group
if len(groups) != 1:
return False
group = groups[0]
#validate group keys
keys = ["group_id", "nRunning", "locked_for_drop"]
for key in keys:
if key not in group:
return False
#validate waitqueue
wait_queue = group["wait_queue"]
if wait_queue["wait_queue_size"] != 1:
return False
#validate nrunning
nrunning = group["nRunning"]
if nrunning != 2:
return False
return True
r = plpy.execute("select count(*) from gp_segment_configuration where role = 'p';")
n = r[0]['count']
# The pg_resgroup_get_status_kv() function must output valid result in CTAS
# and simple select queries
r = plpy.execute("select value from pg_resgroup_get_status_kv('dump');")
json_text = r[0]['value']
json_obj = json.loads(json_text)
if not validate(json_obj, n):
return False
plpy.execute("""CREATE TEMPORARY TABLE t_pg_resgroup_get_status_kv AS
SELECT * FROM pg_resgroup_get_status_kv('dump');""")
r = plpy.execute("SELECT value FROM t_pg_resgroup_get_status_kv;")
json_text = r[0]['value']
json_obj = json.loads(json_text)
return validate(json_obj, n)
$$ LANGUAGE plpython3u;
CREATE RESOURCE GROUP rg_dumpinfo_test WITH (concurrency=2, cpu_max_percent=20);
CREATE ROLE role_dumpinfo_test RESOURCE GROUP rg_dumpinfo_test;
2:SET ROLE role_dumpinfo_test;
2:BEGIN;
3:SET ROLE role_dumpinfo_test;
3:BEGIN;
4:SET ROLE role_dumpinfo_test;
4&:BEGIN;
SELECT dump_test_check();
2:END;
3:END;
4<:
4:END;
2q:
3q:
4q:
CREATE ROLE role_permission;
SET ROLE role_permission;
select value from pg_resgroup_get_status_kv('dump');
RESET ROLE;
-- Now 'dump' is the only value at which the function outputs tuples, but the
-- function must correctly handle any value
SELECT count(*) FROM pg_resgroup_get_status_kv('not_dump');
SELECT count(*) FROM pg_resgroup_get_status_kv(NULL);
DROP ROLE role_dumpinfo_test;
DROP ROLE role_permission;
DROP RESOURCE GROUP rg_dumpinfo_test;
-- start_ignore
DROP LANGUAGE plpython3u CASCADE;
-- end_ignore