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]

Reply via email to