This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch 2.1-tmp
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 2785269d36c6e5d3470f18706bda1288100f12b8
Author: wangbo <wan...@apache.org>
AuthorDate: Fri Apr 5 23:25:47 2024 +0800

    [Improvement](executor)Add BypassWorkloadGroup to pass query queue #33101
---
 .../src/main/java/org/apache/doris/qe/Coordinator.java      |  2 +-
 .../src/main/java/org/apache/doris/qe/SessionVariable.java  | 11 +++++++++++
 .../suites/workload_manager_p0/test_curd_wlg.groovy         | 13 +++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
index 64b07e518a0..8173e0c4d58 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
@@ -625,7 +625,7 @@ public class Coordinator implements CoordInterface {
         if (context != null) {
             if (Config.enable_workload_group) {
                 
this.setTWorkloadGroups(context.getEnv().getWorkloadGroupMgr().getWorkloadGroup(context));
-                if (Config.enable_query_queue) {
+                if (Config.enable_query_queue && 
!context.getSessionVariable().getBypassWorkloadGroup()) {
                     queryQueue = 
context.getEnv().getWorkloadGroupMgr().getWorkloadGroupQueryQueue(context);
                     if (queryQueue == null) {
                         // This logic is actually useless, because when could 
not find query queue, it will
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 20a9ad42bd1..35601cf4bde 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -533,6 +533,8 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String MAX_MSG_SIZE_OF_RESULT_RECEIVER = 
"max_msg_size_of_result_receiver";
 
+    public static final String BYPASS_WORKLOAD_GROUP = "bypass_workload_group";
+
     public static final List<String> DEBUG_VARIABLES = ImmutableList.of(
             SKIP_DELETE_PREDICATE,
             SKIP_DELETE_BITMAP,
@@ -653,6 +655,11 @@ public class SessionVariable implements Serializable, 
Writable {
     @VariableMgr.VarAttr(name = WORKLOAD_VARIABLE, needForward = true)
     public String workloadGroup = "";
 
+    @VariableMgr.VarAttr(name = BYPASS_WORKLOAD_GROUP, needForward = true, 
description = {
+            "查询是否绕开WorkloadGroup的限制,目前仅支持绕开查询排队的逻辑",
+            "whether bypass workload group's limitation, currently only 
support bypass query queue"})
+    public boolean bypassWorkloadGroup = false;
+
     @VariableMgr.VarAttr(name = RESOURCE_VARIABLE)
     public String resourceGroup = "";
 
@@ -2204,6 +2211,10 @@ public class SessionVariable implements Serializable, 
Writable {
         this.workloadGroup = workloadGroup;
     }
 
+    public boolean getBypassWorkloadGroup() {
+        return this.bypassWorkloadGroup;
+    }
+
     public String getResourceGroup() {
         return resourceGroup;
     }
diff --git a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy 
b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
index 83b14496dc8..8acfc8cb4ac 100644
--- a/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
+++ b/regression-test/suites/workload_manager_p0/test_curd_wlg.groovy
@@ -31,6 +31,7 @@ suite("test_crud_wlg") {
     sql "drop workload group if exists tag1_mem_wg1;"
     sql "drop workload group if exists tag1_mem_wg2;"
     sql "drop workload group if exists tag1_mem_wg3;"
+    sql "drop workload group if exists bypass_group;"
 
     sql """
         CREATE TABLE IF NOT EXISTS `${table_name}` (
@@ -516,6 +517,17 @@ suite("test_crud_wlg") {
 
     qt_show_wg_tag "select name,MEMORY_LIMIT,CPU_HARD_LIMIT,TAG from 
information_schema.workload_groups where name 
in('tag1_wg1','tag1_wg2','tag2_wg1','tag1_wg3','tag1_mem_wg1','tag1_mem_wg2','tag1_mem_wg3')
 order by tag,name;"
 
+    // test bypass
+    sql "create workload group if not exists bypass_group properties (  
'max_concurrency'='0','max_queue_size'='0','queue_timeout'='0');"
+    sql "set workload_group=bypass_group;"
+    test {
+        sql "select count(1) from information_schema.active_queries;"
+        exception "query waiting queue is full"
+    }
+
+    sql "set bypass_workload_group = true;"
+    sql "select count(1) from information_schema.active_queries;"
+
     sql "drop workload group tag1_wg1;"
     sql "drop workload group tag1_wg2;"
     sql "drop workload group if exists tag2_wg1;"
@@ -523,5 +535,6 @@ suite("test_crud_wlg") {
     sql "drop workload group tag1_mem_wg1;"
     sql "drop workload group tag1_mem_wg2;"
     sql "drop workload group tag1_mem_wg3;"
+    sql "drop workload group bypass_group;"
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to