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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 22830ea  [feature](show) add new statement show proc 
'/current_query_stmts' (#7487)
22830ea is described below

commit 22830ea49899de91c7de77e37095fcf25fbf900a
Author: caiconghui <55968745+caicong...@users.noreply.github.com>
AuthorDate: Fri Jan 28 22:23:13 2022 +0800

    [feature](show) add new statement show proc '/current_query_stmts' (#7487)
    
    To show the the query statement at first level.
---
 .../org/apache/doris/analysis/ShowProcStmt.java    |  7 +--
 .../common/proc/CurrentQueryFragmentProcNode.java  | 20 -------
 ...ir.java => CurrentQueryStatementsProcNode.java} | 67 +++++-----------------
 .../common/proc/CurrentQueryStatisticsProcDir.java | 16 ++----
 .../org/apache/doris/common/proc/ProcService.java  |  9 ++-
 5 files changed, 26 insertions(+), 93 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcStmt.java
index 561fbd0..fb00d8d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcStmt.java
@@ -46,14 +46,9 @@ public class ShowProcStmt extends ShowStmt {
     @Override
     public void analyze(Analyzer analyzer) throws AnalysisException {
         if 
(!Catalog.getCurrentCatalog().getAuth().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)) {
-            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
-                                                "ADMIN");
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN");
         }
-
         node = ProcService.getInstance().open(path);
-        if (node == null) {
-            ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_PROC_PATH, 
path);
-        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryFragmentProcNode.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryFragmentProcNode.java
index 619869e..166df29 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryFragmentProcNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryFragmentProcNode.java
@@ -19,11 +19,8 @@ package org.apache.doris.common.proc;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.apache.doris.catalog.Catalog;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.qe.QueryStatisticsItem;
-import org.apache.doris.system.Backend;
-import org.apache.doris.thrift.TNetworkAddress;
 import org.apache.doris.common.util.QueryStatisticsFormatter;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -52,23 +49,6 @@ public class CurrentQueryFragmentProcNode implements 
ProcNodeInterface {
         return requestFragmentExecInfos();
     }
 
-    private TNetworkAddress toBrpcHost(TNetworkAddress host) throws 
AnalysisException {
-        final Backend backend = 
Catalog.getCurrentSystemInfo().getBackendWithBePort(
-                host.getHostname(), host.getPort());
-        if (backend == null) {
-            throw new AnalysisException(new StringBuilder("Backend ")
-                    .append(host.getHostname())
-                    .append(":")
-                    .append(host.getPort())
-                    .append(" does not exist")
-                    .toString());
-        }
-        if (backend.getBrpcPort() < 0) {
-            throw new AnalysisException("BRPC port isn't exist.");
-        }
-        return new TNetworkAddress(backend.getHost(), backend.getBrpcPort());
-    }
-
     private ProcResult requestFragmentExecInfos() throws AnalysisException {
         final CurrentQueryInfoProvider provider = new 
CurrentQueryInfoProvider();
         final Collection<CurrentQueryInfoProvider.InstanceStatistics> 
instanceStatisticsCollection
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatementsProcNode.java
similarity index 51%
copy from 
fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
copy to 
fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatementsProcNode.java
index af42797..3b0474d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatementsProcNode.java
@@ -17,56 +17,30 @@
 
 package org.apache.doris.common.proc;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.util.QueryStatisticsFormatter;
 import org.apache.doris.qe.QeProcessorImpl;
 import org.apache.doris.qe.QueryStatisticsItem;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
 /*
- * show proc "/current_queries"
- * only set variable "set is_report_success = true" to enable "ScanBytes" and 
"ProcessRows".
+ * show proc "/current_query_stmts"
  */
-public class CurrentQueryStatisticsProcDir implements ProcDirInterface {
-    private static final Logger LOG = 
LogManager.getLogger(CurrentQueryStatisticsProcDir.class);
+public class CurrentQueryStatementsProcNode implements ProcNodeInterface {
     public static final ImmutableList<String> TITLE_NAMES = new 
ImmutableList.Builder<String>()
             .add("QueryId").add("ConnectionId").add("Database").add("User")
-            .add("ScanBytes").add("ProcessRows").add("ExecTime").build();
+            .add("ExecTime").add("SqlHash").add("Statement").build();
 
-    private static final int EXEC_TIME_INDEX = 6;
-
-    @Override
-    public boolean register(String name, ProcNodeInterface node) {
-        return false;
-    }
-
-    @Override
-    public ProcNodeInterface lookup(String name) throws AnalysisException {
-        if (Strings.isNullOrEmpty(name)) {
-            return null;
-        }
-        final Map<String, QueryStatisticsItem> statistic = 
QeProcessorImpl.INSTANCE.getQueryStatistics();
-        final QueryStatisticsItem item = statistic.get(name);
-        if (item == null) {
-            throw new AnalysisException(name + " doesn't exist.");
-        }
-        return new CurrentQuerySqlProcDir(item);
-    }
+    private static final int EXEC_TIME_INDEX = 5;
 
     @Override
     public ProcResult fetchResult() throws AnalysisException {
         final BaseProcResult result = new BaseProcResult();
-        final Map<String, QueryStatisticsItem> statistic = 
+        final Map<String, QueryStatisticsItem> statistic =
                 QeProcessorImpl.INSTANCE.getQueryStatistics();
         result.setNames(TITLE_NAMES.asList());
         final List<List<String>> sortedRowData = Lists.newArrayList();
@@ -80,28 +54,17 @@ public class CurrentQueryStatisticsProcDir implements 
ProcDirInterface {
             values.add(item.getConnId());
             values.add(item.getDb());
             values.add(item.getUser());
-            if (item.getIsReportSucc()) {
-                final CurrentQueryInfoProvider.QueryStatistics statistics
-                        = statisticsMap.get(item.getQueryId());
-                values.add(QueryStatisticsFormatter.getScanBytes(
-                        statistics.getScanBytes()));
-                values.add(QueryStatisticsFormatter.getRowsReturned(
-                        statistics.getRowsReturned()));
-            } else {
-                values.add("N/A");
-                values.add("N/A");
-            }
             values.add(item.getQueryExecTime());
+            values.add(DigestUtils.md5Hex(item.getSql()));
+            values.add(item.getSql());
             sortedRowData.add(values);
         }
+
         // sort according to ExecTime
-        sortedRowData.sort(new Comparator<List<String>>() {
-            @Override
-            public int compare(List<String> l1, List<String> l2) {
-                final int execTime1 = Integer.valueOf(l1.get(EXEC_TIME_INDEX));
-                final int execTime2 = Integer.valueOf(l2.get(EXEC_TIME_INDEX));
-                return execTime1 <= execTime2 ? 1 : -1;
-            }
+        sortedRowData.sort((l1, l2) -> {
+            final int execTime1 = Integer.parseInt(l1.get(EXEC_TIME_INDEX));
+            final int execTime2 = Integer.parseInt(l2.get(EXEC_TIME_INDEX));
+            return execTime2 - execTime1;
         });
         result.setRows(sortedRowData);
         return result;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
index af42797..a2c1818 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/CurrentQueryStatisticsProcDir.java
@@ -26,10 +26,6 @@ import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
@@ -38,7 +34,6 @@ import java.util.Map;
  * only set variable "set is_report_success = true" to enable "ScanBytes" and 
"ProcessRows".
  */
 public class CurrentQueryStatisticsProcDir implements ProcDirInterface {
-    private static final Logger LOG = 
LogManager.getLogger(CurrentQueryStatisticsProcDir.class);
     public static final ImmutableList<String> TITLE_NAMES = new 
ImmutableList.Builder<String>()
             .add("QueryId").add("ConnectionId").add("Database").add("User")
             .add("ScanBytes").add("ProcessRows").add("ExecTime").build();
@@ -95,13 +90,10 @@ public class CurrentQueryStatisticsProcDir implements 
ProcDirInterface {
             sortedRowData.add(values);
         }
         // sort according to ExecTime
-        sortedRowData.sort(new Comparator<List<String>>() {
-            @Override
-            public int compare(List<String> l1, List<String> l2) {
-                final int execTime1 = Integer.valueOf(l1.get(EXEC_TIME_INDEX));
-                final int execTime2 = Integer.valueOf(l2.get(EXEC_TIME_INDEX));
-                return execTime1 <= execTime2 ? 1 : -1;
-            }
+        sortedRowData.sort((l1, l2) -> {
+            final int execTime1 = Integer.parseInt(l1.get(EXEC_TIME_INDEX));
+            final int execTime2 = Integer.parseInt(l2.get(EXEC_TIME_INDEX));
+            return execTime2 - execTime1;
         });
         result.setRows(sortedRowData);
         return result;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/ProcService.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/ProcService.java
index bd10b7b..b0c4a79 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/ProcService.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/ProcService.java
@@ -22,6 +22,8 @@ import org.apache.doris.common.AnalysisException;
 
 import com.google.common.base.Strings;
 
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.common.ErrorReport;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -48,6 +50,7 @@ public final class ProcService {
         root.register("trash", new TrashProcDir());
         root.register("monitor", new MonitorProcDir());
         root.register("current_queries", new CurrentQueryStatisticsProcDir());
+        root.register("current_query_stmts", new 
CurrentQueryStatementsProcNode());
         root.register("current_backend_instances", new 
CurrentQueryBackendInstanceProcDir());
         root.register("cluster_balance", new ClusterBalanceProcDir());
         root.register("routine_loads", new RoutineLoadsProcDir());
@@ -120,7 +123,7 @@ public final class ProcService {
         // the last character of path is '/', the current is must a directory
         if (pos == last) {
             // now pos == path.length()
-            if (curNode == null || !(curNode instanceof ProcDirInterface)) {
+            if (!(curNode instanceof ProcDirInterface)) {
                 String errMsg = path + " is not a directory";
                 LOG.warn(errMsg);
                 throw new AnalysisException(errMsg);
@@ -137,7 +140,7 @@ public final class ProcService {
         // 这里使用pos,因为有可能path后面会有space字段被提前截断
         curNode = ((ProcDirInterface) curNode).lookup(path.substring(last, 
pos));
         if (curNode == null) {
-            throw new AnalysisException("Cannot find path: " + path);
+            ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_PROC_PATH, 
path);
         }
         return curNode;
     }
@@ -145,7 +148,7 @@ public final class ProcService {
     // 将node注册到根节点下的name下
     public synchronized boolean register(String name, ProcNodeInterface node) {
         if (Strings.isNullOrEmpty(name) || node == null) {
-            LOG.warn("register porc service invalid input.");
+            LOG.warn("register proc service invalid input.");
             return false;
         }
         if (root.lookup(name) != null) {

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

Reply via email to