未验证 提交 bb018413 编写于 作者: Z Zhenghua Lyu 提交者: GitHub

Add more dumps for resgroup.

* Add some fields in ResGroupControl into dump json.
* Add key validation in tests.
* Improve code style.
上级 7a0415ba
......@@ -261,12 +261,12 @@ static bool selfIsAssignedDroppedGroup(void);
static bool selfIsAssignedValidGroup(void);
#ifdef USE_ASSERT_CHECKING
static bool selfIsAssigned(void);
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
static bool selfIsUnassigned(void);
static void selfUnassignDroppedGroup(void);
#ifdef USE_ASSERT_CHECKING
static bool selfHasSlot(void);
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
static bool selfHasGroup(void);
static void selfSetGroup(ResGroupData *group);
static void selfUnsetGroup(void);
......@@ -279,13 +279,13 @@ static void slotValidate(const ResGroupSlotData *slot);
static void slotValidateOwnership(const ResGroupSlotData *slot);
#ifdef USE_ASSERT_CHECKING
static bool slotIsInUse(const ResGroupSlotData *slot);
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
static ResGroupSlotData * slotById(int slotId);
static int slotGetId(const ResGroupSlotData *slot);
static bool slotIdIsValid(int slotId);
#ifdef USE_ASSERT_CHECKING
static bool groupIsNotDropped(const ResGroupData *group);
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
static void groupWaitQueueValidate(const ResGroupData *group);
static void groupWaitQueuePush(ResGroupData *group, PGPROC *proc);
static PGPROC * groupWaitQueuePop(ResGroupData *group);
......@@ -2791,7 +2791,7 @@ selfIsAssigned(void)
return self->groupId != InvalidOid;
}
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
/*
* Check whether self is unassigned.
......@@ -2848,7 +2848,7 @@ selfHasSlot(void)
return self->slotId != InvalidSlotId;
}
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
/*
* Check whether self has been set a resgroup.
......@@ -3044,7 +3044,7 @@ slotIsInUse(const ResGroupSlotData *slot)
return slot->groupId != InvalidOid;
}
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
/*
* Get a slot by slotId.
......@@ -3133,7 +3133,7 @@ groupIsNotDropped(const ResGroupData *group)
return group
&& group->groupId != InvalidOid;
}
#endif//USE_ASSERT_CHECKING
#endif/* USE_ASSERT_CHECKING */
/*
* Validate the consistency of the resgroup wait queue.
......@@ -3304,6 +3304,12 @@ ResGroupDumpInfo(StringInfo str)
verifyGpIdentityIsSet();
appendStringInfo(str, "{\"segid\":%d,", GpIdentity.segindex);
/* dump fields in pResGroupControl. */
appendStringInfo(str, "\"segmentsOnMaster\":%d,", pResGroupControl->segmentsOnMaster);
appendStringInfo(str, "\"loaded\":%s,", pResGroupControl->loaded ? "true" : "false");
appendStringInfo(str, "\"totalChunks\":%d,", pResGroupControl->totalChunks);
appendStringInfo(str, "\"freeChunks\":%d,", pResGroupControl->freeChunks);
appendStringInfo(str, "\"chunkSizeInBits\":%d,", pResGroupControl->chunkSizeInBits);
/* dump each group */
appendStringInfo(str, "\"groups\":[");
......@@ -3399,9 +3405,6 @@ resgroupDumpSlots(StringInfo str)
{
int i;
ResGroupSlotData* slot;
ResGroupSlotData* root;
root = &pResGroupControl->freeSlot;
appendStringInfo(str, "\"slots\":[");
......
......@@ -10,12 +10,15 @@ ERROR: resource group "rg_dumpinfo_test" does not exist
CREATE LANGUAGE plpythonu;
CREATE
CREATE FUNCTION dump_test_check() RETURNS bool as $$ import json import pygresql.pg as 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] 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 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
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 plpythonu;
return validate(json_obj, n)
$$ LANGUAGE plpythonu;
CREATE
CREATE RESOURCE GROUP rg_dumpinfo_test WITH (concurrency=2, cpu_rate_limit=20, memory_limit=20);
......
......@@ -16,11 +16,26 @@ def validate(json_obj, 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:
......@@ -42,6 +57,7 @@ json_text = r.getresult()[0][0]
json_obj = json.loads(json_text)
return validate(json_obj, n)
$$ LANGUAGE plpythonu;
CREATE RESOURCE GROUP rg_dumpinfo_test WITH (concurrency=2, cpu_rate_limit=20, memory_limit=20);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册