blob: 3254575cc6677b61fc496bfd06c6a04e85af3d28 [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
import pg
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", "totalChunks",
"freeChunks", "chunkSizeInBits", "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"] > 6438]
#validate user created group
if len(groups) != 1:
return False
group = groups[0]
#validate group keys
keys = ["group_id", "nRunning", "locked_for_drop", "memExpected",
"memQuotaGranted", "memSharedGranted", "memQuotaUsed",
"memUsage", "memSharedUsage"]
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
conn = pg.connect(dbname="postgres")
r = conn.query("select count(*) from gp_segment_configuration where role = 'p';")
n = r.getresult()[0][0]
r = conn.query("select value from pg_resgroup_get_status_kv('dump');")
json_text = r.getresult()[0][0]
json_obj = json.loads(json_text)
return validate(json_obj, n)
$$ LANGUAGE plpython3u;
CREATE RESOURCE GROUP rg_dumpinfo_test WITH (concurrency=2, cpu_rate_limit=20, memory_limit=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;
DROP ROLE role_dumpinfo_test;
DROP ROLE role_permission;
DROP RESOURCE GROUP rg_dumpinfo_test;
-- start_ignore
DROP LANGUAGE plpython3u CASCADE;
-- end_ignore