You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/07/27 03:40:52 UTC
[doris] branch master updated: [improvement] support show query stmt in show processlist (#11232)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 05b840fcb9 [improvement] support show query stmt in show processlist (#11232)
05b840fcb9 is described below
commit 05b840fcb9137704eb195d3fc7a6f363bbd3f568
Author: Mingyu Chen <mo...@gmail.com>
AuthorDate: Wed Jul 27 11:40:47 2022 +0800
[improvement] support show query stmt in show processlist (#11232)
---
fe/fe-core/src/main/cup/sql_parser.cup | 2 +-
.../apache/doris/analysis/ShowProcesslistStmt.java | 34 +++++++++++++---------
.../doris/httpv2/controller/SessionController.java | 3 +-
.../java/org/apache/doris/qe/ConnectContext.java | 20 ++++++++++---
.../java/org/apache/doris/qe/ConnectScheduler.java | 9 +++---
.../main/java/org/apache/doris/qe/QeProcessor.java | 2 ++
.../java/org/apache/doris/qe/QeProcessorImpl.java | 9 ++++++
.../java/org/apache/doris/qe/ShowExecutor.java | 3 +-
.../java/org/apache/doris/qe/StmtExecutor.java | 1 -
.../org/apache/doris/qe/ConnectContextTest.java | 4 +--
.../java/org/apache/doris/qe/ShowExecutorTest.java | 4 +--
11 files changed, 61 insertions(+), 30 deletions(-)
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup
index 9e7dc6271b..6104019eaa 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -2654,7 +2654,7 @@ show_param ::=
/* show processlist */
| opt_full KW_PROCESSLIST
{:
- RESULT = new ShowProcesslistStmt();
+ RESULT = new ShowProcesslistStmt(parser.isVerbose);
:}
/* routine */
| procedure_or_function KW_STATUS opt_wild_where
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcesslistStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcesslistStmt.java
index 8097ffacc2..6e3aa5150a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcesslistStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowProcesslistStmt.java
@@ -25,18 +25,26 @@ import org.apache.doris.qe.ShowResultSetMetaData;
// SHOW PROCESSLIST statement.
// Used to show connection belong to this user.
public class ShowProcesslistStmt extends ShowStmt {
- private static final ShowResultSetMetaData META_DATA =
- ShowResultSetMetaData.builder()
- .addColumn(new Column("Id", ScalarType.createType(PrimitiveType.BIGINT)))
- .addColumn(new Column("User", ScalarType.createVarchar(16)))
- .addColumn(new Column("Host", ScalarType.createVarchar(16)))
- .addColumn(new Column("Cluster", ScalarType.createVarchar(16)))
- .addColumn(new Column("Db", ScalarType.createVarchar(16)))
- .addColumn(new Column("Command", ScalarType.createVarchar(16)))
- .addColumn(new Column("Time", ScalarType.createType(PrimitiveType.INT)))
- .addColumn(new Column("State", ScalarType.createVarchar(64)))
- .addColumn(new Column("Info", ScalarType.createVarchar(16)))
- .build();
+ private static final ShowResultSetMetaData META_DATA = ShowResultSetMetaData.builder()
+ .addColumn(new Column("Id", ScalarType.createType(PrimitiveType.BIGINT)))
+ .addColumn(new Column("User", ScalarType.createVarchar(16)))
+ .addColumn(new Column("Host", ScalarType.createVarchar(16)))
+ .addColumn(new Column("Cluster", ScalarType.createVarchar(16)))
+ .addColumn(new Column("Db", ScalarType.createVarchar(16)))
+ .addColumn(new Column("Command", ScalarType.createVarchar(16)))
+ .addColumn(new Column("Time", ScalarType.createType(PrimitiveType.INT)))
+ .addColumn(new Column("State", ScalarType.createVarchar(64)))
+ .addColumn(new Column("Info", ScalarType.STRING)).build();
+
+ private boolean isFull;
+
+ public ShowProcesslistStmt(boolean isFull) {
+ this.isFull = isFull;
+ }
+
+ public boolean isFull() {
+ return isFull;
+ }
@Override
public void analyze(Analyzer analyzer) {
@@ -44,7 +52,7 @@ public class ShowProcesslistStmt extends ShowStmt {
@Override
public String toSql() {
- return "SHOW PROCESSLIST";
+ return "SHOW " + (isFull ? "FULL" : "") + "PROCESSLIST";
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/httpv2/controller/SessionController.java b/fe/fe-core/src/main/java/org/apache/doris/httpv2/controller/SessionController.java
index 55b202354d..35a93a4178 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/controller/SessionController.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/controller/SessionController.java
@@ -61,7 +61,8 @@ public class SessionController extends BaseController {
}
private void appendSessionInfo(Map<String, Object> result) {
- List<ConnectContext.ThreadInfo> threadInfos = ExecuteEnv.getInstance().getScheduler().listConnection("root");
+ List<ConnectContext.ThreadInfo> threadInfos = ExecuteEnv.getInstance().getScheduler()
+ .listConnection("root", false);
List<List<String>> rows = Lists.newArrayList();
result.put("column_names", SESSION_TABLE_HEADER);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
index ddce53fa5c..5409f75615 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
@@ -504,8 +504,8 @@ public class ConnectContext {
// kill operation with no protect.
public void kill(boolean killConnection) {
- LOG.warn("kill timeout query, {}, kill connection: {}",
- getMysqlChannel().getRemoteHostPortString(), killConnection);
+ LOG.warn("kill query from {}, kill connection: {}", getMysqlChannel().getRemoteHostPortString(),
+ killConnection);
if (killConnection) {
isKilled = true;
@@ -551,10 +551,11 @@ public class ConnectContext {
}
// Helper to dump connection information.
- public ThreadInfo toThreadInfo() {
+ public ThreadInfo toThreadInfo(boolean isFull) {
if (threadInfo == null) {
threadInfo = new ThreadInfo();
}
+ threadInfo.isFull = isFull;
return threadInfo;
}
@@ -584,6 +585,8 @@ public class ConnectContext {
}
public class ThreadInfo {
+ public boolean isFull;
+
public List<String> toRow(long nowMs) {
List<String> row = Lists.newArrayList();
row.add("" + connectionId);
@@ -594,7 +597,15 @@ public class ConnectContext {
row.add(command.toString());
row.add("" + (nowMs - startTime) / 1000);
row.add("");
- row.add("");
+ if (queryId != null) {
+ String sql = QeProcessorImpl.INSTANCE.getCurrentQueryByQueryId(queryId);
+ if (!isFull) {
+ sql = sql.substring(0, Math.min(sql.length(), 100));
+ }
+ row.add(sql);
+ } else {
+ row.add("");
+ }
return row;
}
}
@@ -604,3 +615,4 @@ public class ConnectContext {
}
}
+
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectScheduler.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectScheduler.java
index f6765e222f..c9eed7286a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectScheduler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectScheduler.java
@@ -136,17 +136,16 @@ public class ConnectScheduler {
return numberConnection.get();
}
- public List<ConnectContext.ThreadInfo> listConnection(String user) {
+ public List<ConnectContext.ThreadInfo> listConnection(String user, boolean isFull) {
List<ConnectContext.ThreadInfo> infos = Lists.newArrayList();
for (ConnectContext ctx : connectionMap.values()) {
// Check auth
- if (!ctx.getQualifiedUser().equals(user)
- && !Env.getCurrentEnv().getAuth().checkGlobalPriv(ConnectContext.get(),
- PrivPredicate.GRANT)) {
+ if (!ctx.getQualifiedUser().equals(user) && !Env.getCurrentEnv().getAuth()
+ .checkGlobalPriv(ConnectContext.get(), PrivPredicate.GRANT)) {
continue;
}
- infos.add(ctx.toThreadInfo());
+ infos.add(ctx.toThreadInfo(isFull));
}
return infos;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessor.java
index 30ecbe6da7..64efd5ef2b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessor.java
@@ -39,5 +39,7 @@ public interface QeProcessor {
Map<String, QueryStatisticsItem> getQueryStatistics();
+ String getCurrentQueryByQueryId(TUniqueId queryId);
+
Coordinator getCoordinator(TUniqueId queryId);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessorImpl.java b/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessorImpl.java
index 44b67da877..39a6797c91 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessorImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/QeProcessorImpl.java
@@ -200,6 +200,15 @@ public final class QeProcessorImpl implements QeProcessor {
return result;
}
+ @Override
+ public String getCurrentQueryByQueryId(TUniqueId queryId) {
+ QueryInfo info = coordinatorMap.get(queryId);
+ if (info != null && info.sql != null) {
+ return info.sql;
+ }
+ return "";
+ }
+
public static final class QueryInfo {
private final ConnectContext connectContext;
private final Coordinator coord;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 8a8a6fa02c..33268b0781 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -375,7 +375,8 @@ public class ShowExecutor {
ShowProcesslistStmt showStmt = (ShowProcesslistStmt) stmt;
List<List<String>> rowSet = Lists.newArrayList();
- List<ConnectContext.ThreadInfo> threadInfos = ctx.getConnectScheduler().listConnection(ctx.getQualifiedUser());
+ List<ConnectContext.ThreadInfo> threadInfos = ctx.getConnectScheduler()
+ .listConnection(ctx.getQualifiedUser(), showStmt.isFull());
long nowMs = System.currentTimeMillis();
for (ConnectContext.ThreadInfo info : threadInfos) {
rowSet.add(info.toRow(nowMs));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 9fbb0d0645..b092cab722 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -1004,7 +1004,6 @@ public class StmtExecutor implements ProfileWriter {
sendResult(isOutfileQuery, false, queryStmt, channel, null, null);
}
-
private void sendResult(boolean isOutfileQuery, boolean isSendFields, Queriable queryStmt, MysqlChannel channel,
CacheAnalyzer cacheAnalyzer, InternalService.PFetchCacheResult cacheResult) throws Exception {
// 1. If this is a query with OUTFILE clause, eg: select * from tbl1 into outfile xxx,
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/ConnectContextTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/ConnectContextTest.java
index 5566ec8e37..2a984d9564 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/ConnectContextTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/ConnectContextTest.java
@@ -116,8 +116,8 @@ public class ConnectContextTest {
Assert.assertEquals(MysqlCommand.COM_PING, ctx.getCommand());
// Thread info
- Assert.assertNotNull(ctx.toThreadInfo());
- List<String> row = ctx.toThreadInfo().toRow(1000);
+ Assert.assertNotNull(ctx.toThreadInfo(false));
+ List<String> row = ctx.toThreadInfo(false).toRow(1000);
Assert.assertEquals(9, row.size());
Assert.assertEquals("101", row.get(0));
Assert.assertEquals("testUser", row.get(1));
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
index e6598ca179..1bb4cabdf6 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
@@ -249,9 +249,9 @@ public class ShowExecutorTest {
ConnectScheduler scheduler = new ConnectScheduler(10);
new Expectations(scheduler) {
{
- scheduler.listConnection("testCluster:testUser");
+ scheduler.listConnection("testCluster:testUser", anyBoolean);
minTimes = 0;
- result = Lists.newArrayList(ctx.toThreadInfo());
+ result = Lists.newArrayList(ctx.toThreadInfo(false));
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org