This is an automated email from the ASF dual-hosted git repository.
djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new cb61a955ac8 Fix the issue of duplicate counting of num_executed in
gp_toolkit.gp_resgroup_status
cb61a955ac8 is described below
commit cb61a955ac8d14b9c0760f7e01183b302f688319
Author: fairyfar <[email protected]>
AuthorDate: Sun Mar 29 09:18:20 2026 +0800
Fix the issue of duplicate counting of num_executed in
gp_toolkit.gp_resgroup_status
This is a defect of the original GPDB.
When enabling resource group management and the transaction switches from
"Assign" to "Bypass" state, the "num_executed" counter is repeatedly counted.
---
src/backend/utils/resgroup/resgroup.c | 1 -
.../isolation2/expected/resgroup/resgroup_bypass.out | 18 ++++++++++++++++++
src/test/isolation2/sql/resgroup/resgroup_bypass.sql | 9 +++++++++
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/backend/utils/resgroup/resgroup.c
b/src/backend/utils/resgroup/resgroup.c
index e474e106490..88f9acea9a0 100644
--- a/src/backend/utils/resgroup/resgroup.c
+++ b/src/backend/utils/resgroup/resgroup.c
@@ -3700,7 +3700,6 @@ check_and_unassign_from_resgroup(PlannedStmt* stmt)
} while (!groupIncBypassedRef(&groupInfo));
bypassedGroup = groupInfo.group;
- bypassedGroup->totalExecuted++;
pgstat_report_resgroup(bypassedGroup->groupId);
bypassedSlot.group = groupInfo.group;
bypassedSlot.groupId = groupInfo.groupId;
diff --git a/src/test/isolation2/expected/resgroup/resgroup_bypass.out
b/src/test/isolation2/expected/resgroup/resgroup_bypass.out
index 5cff41d745f..878c759c306 100644
--- a/src/test/isolation2/expected/resgroup/resgroup_bypass.out
+++ b/src/test/isolation2/expected/resgroup/resgroup_bypass.out
@@ -276,6 +276,24 @@ SELECT gp_inject_fault('func_init_plan_end', 'reset', 1);
1q: ... <quitting>
2q: ... <quitting>
+-- verify the increment of num_executed in gp_toolkit.gp_resgroup_status
+1: SET ROLE role_bypass;
+SET
+1: SELECT num_executed INTO temporary temp_num1 FROM
gp_toolkit.gp_resgroup_status WHERE groupname='rg_bypass';
+SELECT 1
+1: SELECT num_executed INTO temporary temp_num2 FROM
gp_toolkit.gp_resgroup_status WHERE groupname='rg_bypass';
+SELECT 1
+1: SELECT temp_num2.num_executed - temp_num1.num_executed AS delta FROM
temp_num1, temp_num2;
+ delta
+-------
+ 1
+(1 row)
+1: DROP TABLE temp_num1;
+DROP
+1: DROP TABLE temp_num2;
+DROP
+1q: ... <quitting>
+
-- cleanup
-- start_ignore
DROP TABLE t_bypass;
diff --git a/src/test/isolation2/sql/resgroup/resgroup_bypass.sql
b/src/test/isolation2/sql/resgroup/resgroup_bypass.sql
index 19c50771f75..01d9d60cbd0 100644
--- a/src/test/isolation2/sql/resgroup/resgroup_bypass.sql
+++ b/src/test/isolation2/sql/resgroup/resgroup_bypass.sql
@@ -133,6 +133,15 @@ SELECT gp_inject_fault('func_init_plan_end', 'reset', 1);
1q:
2q:
+-- verify the increment of num_executed in gp_toolkit.gp_resgroup_status
+1: SET ROLE role_bypass;
+1: SELECT num_executed INTO temporary temp_num1 FROM
gp_toolkit.gp_resgroup_status WHERE groupname='rg_bypass';
+1: SELECT num_executed INTO temporary temp_num2 FROM
gp_toolkit.gp_resgroup_status WHERE groupname='rg_bypass';
+1: SELECT temp_num2.num_executed - temp_num1.num_executed AS delta FROM
temp_num1, temp_num2;
+1: DROP TABLE temp_num1;
+1: DROP TABLE temp_num2;
+1q:
+
-- cleanup
-- start_ignore
DROP TABLE t_bypass;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]