This is an automated email from the ASF dual-hosted git repository.
weihao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c8455c142b7 Add extra client_ip and timeout columns for show queries
(#17350)
c8455c142b7 is described below
commit c8455c142b77314b7835f46d4814ef3a7fdfe742
Author: Weihao Li <[email protected]>
AuthorDate: Wed Mar 25 18:08:49 2026 +0800
Add extra client_ip and timeout columns for show queries (#17350)
---
.../relational/it/query/recent/IoTDBMaintainAuthIT.java | 12 +++++++++++-
.../apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java | 8 +++++++-
.../apache/iotdb/db/queryengine/common/MPPQueryContext.java | 3 +++
.../execution/operator/source/ShowQueriesOperator.java | 4 ++++
.../relational/InformationSchemaContentSupplierFactory.java | 3 +++
.../db/queryengine/plan/execution/IQueryExecution.java | 3 +++
.../iotdb/db/queryengine/plan/execution/QueryExecution.java | 5 +++++
.../queryengine/plan/execution/config/ConfigExecution.java | 5 +++++
.../plan/planner/plan/node/source/ShowQueriesNode.java | 12 ++++++------
.../execution/operator/MergeTreeSortOperatorTest.java | 5 +++++
.../planner/informationschema/ShowQueriesTest.java | 13 +++++++++++--
.../iotdb/commons/schema/column/ColumnHeaderConstant.java | 12 ++++++++++--
.../iotdb/commons/schema/table/InformationSchema.java | 7 +++++++
13 files changed, 80 insertions(+), 12 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBMaintainAuthIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBMaintainAuthIT.java
index 56425b4d7ff..2d86a652194 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBMaintainAuthIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBMaintainAuthIT.java
@@ -167,7 +167,17 @@ public class IoTDBMaintainAuthIT {
// case 12: show queries
// non-root users can access its own queries
expectedHeader =
- new String[] {"query_id", "start_time", "datanode_id", "elapsed_time",
"statement", "user"};
+ new String[] {
+ "query_id",
+ "start_time",
+ "datanode_id",
+ "elapsed_time",
+ "statement",
+ "user",
+ "wait_time_in_server",
+ "client_ip",
+ "timeout"
+ };
tableQueryNoVerifyResultTest("show queries", expectedHeader, USER_2,
PASSWORD);
// case 13: kill query
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
index 886d6ef10ac..94c215a52ae 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
@@ -464,7 +464,10 @@ public class IoTDBDatabaseIT {
"datanode_id,INT32,ATTRIBUTE,",
"elapsed_time,FLOAT,ATTRIBUTE,",
"statement,STRING,ATTRIBUTE,",
- "user,STRING,ATTRIBUTE,")));
+ "user,STRING,ATTRIBUTE,",
+ "wait_time_in_server,FLOAT,ATTRIBUTE,",
+ "client_ip,STRING,ATTRIBUTE,",
+ "timeout,INT64,ATTRIBUTE,")));
TestUtils.assertResultSetEqual(
statement.executeQuery("desc pipes"),
"ColumnName,DataType,Category,",
@@ -683,6 +686,9 @@ public class IoTDBDatabaseIT {
"information_schema,queries,elapsed_time,FLOAT,ATTRIBUTE,USING,null,",
"information_schema,queries,statement,STRING,ATTRIBUTE,USING,null,",
"information_schema,queries,user,STRING,ATTRIBUTE,USING,null,",
+
"information_schema,queries,wait_time_in_server,FLOAT,ATTRIBUTE,USING,null,",
+
"information_schema,queries,client_ip,STRING,ATTRIBUTE,USING,null,",
+
"information_schema,queries,timeout,INT64,ATTRIBUTE,USING,null,",
"test,test,time,TIMESTAMP,TIME,USING,null,",
"test,test,a,STRING,TAG,USING,null,",
"test,test,b,STRING,ATTRIBUTE,USING,null,",
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index 4eea2457b50..0294a14af25 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -589,6 +589,9 @@ public class MPPQueryContext implements IAuditEntity {
@Override
public String getCliHostname() {
+ if (session == null || session.getCliHostname() == null) {
+ return "UNKNOWN";
+ }
return session.getCliHostname();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/ShowQueriesOperator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/ShowQueriesOperator.java
index b23906f00a1..75013c844dc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/ShowQueriesOperator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/ShowQueriesOperator.java
@@ -150,6 +150,10 @@ public class ShowQueriesOperator implements SourceOperator
{
(float) (currTime - queryExecution.getStartExecutionTime()) /
1000);
columnBuilders[3].writeBinary(
BytesUtils.valueOf(queryExecution.getExecuteSQL().orElse("UNKNOWN")));
+ columnBuilders[4].writeFloat(
+ (float) queryExecution.getTotalExecutionTime() / 1000_000_000);
+
columnBuilders[5].writeBinary(BytesUtils.valueOf(queryExecution.getClientHostname()));
+ columnBuilders[6].writeLong(queryExecution.getTimeout());
builder.declarePosition();
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
index 6d042929fe3..d7162b03be3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
@@ -283,6 +283,9 @@ public class InformationSchemaContentSupplierFactory {
columnBuilders[4].writeBinary(
BytesUtils.valueOf(queryExecution.getExecuteSQL().orElse("UNKNOWN")));
columnBuilders[5].writeBinary(BytesUtils.valueOf(queryExecution.getUser()));
+ columnBuilders[6].writeFloat((float)
queryExecution.getTotalExecutionTime() / 1000_000_000);
+
columnBuilders[7].writeBinary(BytesUtils.valueOf(queryExecution.getClientHostname()));
+ columnBuilders[8].writeLong(queryExecution.getTimeout());
resultBuilder.declarePosition();
}
nextConsumedIndex++;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
index 9fe9b28a3a2..f754bc4b10e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
@@ -70,6 +70,8 @@ public interface IQueryExecution {
*/
long getTotalExecutionTime();
+ long getTimeout();
+
Optional<String> getExecuteSQL();
String getStatementType();
@@ -78,6 +80,7 @@ public interface IQueryExecution {
String getUser();
+ /** return ip for a thrift-based client, client-id for MQTT/REST client */
String getClientHostname();
boolean isDebug();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index c63937996b9..6e940e9816e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -680,6 +680,11 @@ public class QueryExecution implements IQueryExecution {
return totalExecutionTime;
}
+ @Override
+ public long getTimeout() {
+ return context.getTimeOut();
+ }
+
@Override
public Optional<String> getExecuteSQL() {
return Optional.ofNullable(context.getSql());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
index f75670db84e..f431bb2e51f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
@@ -334,6 +334,11 @@ public class ConfigExecution implements IQueryExecution {
return totalExecutionTime;
}
+ @Override
+ public long getTimeout() {
+ return context.getTimeOut();
+ }
+
@Override
public Optional<String> getExecuteSQL() {
return Optional.ofNullable(context.getSql());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/ShowQueriesNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/ShowQueriesNode.java
index 25e94c0da5c..1eaf122c773 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/ShowQueriesNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/ShowQueriesNode.java
@@ -19,7 +19,7 @@
package org.apache.iotdb.db.queryengine.plan.planner.plan.node.source;
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
-import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
+import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
@@ -34,14 +34,14 @@ import java.nio.ByteBuffer;
import java.util.List;
import java.util.Objects;
+import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.showQueriesColumnHeaders;
+
public class ShowQueriesNode extends VirtualSourceNode {
public static final List<String> SHOW_QUERIES_HEADER_COLUMNS =
- ImmutableList.of(
- ColumnHeaderConstant.QUERY_ID,
- ColumnHeaderConstant.DATA_NODE_ID,
- ColumnHeaderConstant.ELAPSED_TIME,
- ColumnHeaderConstant.STATEMENT);
+ showQueriesColumnHeaders.stream()
+ .map(ColumnHeader::getColumnName)
+ .collect(ImmutableList.toImmutableList());
private final String allowedUsername;
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeTreeSortOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeTreeSortOperatorTest.java
index 1758f0c9f49..1739944be7c 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeTreeSortOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeTreeSortOperatorTest.java
@@ -1876,6 +1876,11 @@ public class MergeTreeSortOperatorTest {
return Optional.empty();
}
+ @Override
+ public long getTimeout() {
+ return 60_000L;
+ }
+
@Override
public Optional<ByteBuffer> getByteBufferBatchResult() {
return Optional.empty();
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/informationschema/ShowQueriesTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/informationschema/ShowQueriesTest.java
index 7161c68f4e9..6226dd98627 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/informationschema/ShowQueriesTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/informationschema/ShowQueriesTest.java
@@ -27,14 +27,17 @@ import org.junit.Test;
import java.util.Locale;
import java.util.Optional;
+import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.CLIENT_IP;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.DATA_NODE_ID_TABLE_MODEL;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.ELAPSED_TIME_TABLE_MODEL;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.QUERY_ID_TABLE_MODEL;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.START_TIME_TABLE_MODEL;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.STATEMENT;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.STATEMENT_TABLE_MODEL;
+import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.TIMEOUT_TABLE_MODEL;
import static org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.USER;
import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.USER_TABLE_MODEL;
+import static
org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.WAIT_TIME_IN_SERVER_TABLE_MODEL;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanAssert.assertPlan;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.collect;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.exchange;
@@ -64,7 +67,10 @@ public class ShowQueriesTest {
DATA_NODE_ID_TABLE_MODEL,
ELAPSED_TIME_TABLE_MODEL,
STATEMENT_TABLE_MODEL,
- USER_TABLE_MODEL))));
+ USER_TABLE_MODEL,
+ WAIT_TIME_IN_SERVER_TABLE_MODEL,
+ CLIENT_IP,
+ TIMEOUT_TABLE_MODEL))));
// - Exchange
// Output - Collect - Exchange
@@ -142,6 +148,9 @@ public class ShowQueriesTest {
DATA_NODE_ID_TABLE_MODEL,
ELAPSED_TIME_TABLE_MODEL,
STATEMENT.toLowerCase(Locale.ENGLISH),
- USER.toLowerCase(Locale.ENGLISH))))));
+ USER.toLowerCase(Locale.ENGLISH),
+ WAIT_TIME_IN_SERVER_TABLE_MODEL,
+ CLIENT_IP,
+ TIMEOUT_TABLE_MODEL)))));
}
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
index 219cd310be1..33f56cdefe9 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
@@ -212,6 +212,9 @@ public class ColumnHeaderConstant {
public static final String QUERY_ID = "QueryId";
public static final String ELAPSED_TIME = "ElapsedTime";
public static final String STATEMENT = "Statement";
+ public static final String WAIT_TIME_IN_SERVER = "WaitTimeInServer";
+ public static final String CLIENT_IP_TREE_MODEL = "ClientIp";
+ public static final String TIMEOUT = "Timeout";
// column names for show idle connection
public static final String DATANODE_ID = "datanode_id";
@@ -225,6 +228,8 @@ public class ColumnHeaderConstant {
public static final String DATA_NODE_ID_TABLE_MODEL = "datanode_id";
public static final String START_TIME_TABLE_MODEL = "start_time";
public static final String ELAPSED_TIME_TABLE_MODEL = "elapsed_time";
+ public static final String WAIT_TIME_IN_SERVER_TABLE_MODEL =
"wait_time_in_server";
+ public static final String TIMEOUT_TABLE_MODEL = "timeout";
// column names for current_queries and queries_costs_histogram
public static final String STATE_TABLE_MODEL = "state";
@@ -645,10 +650,13 @@ public class ColumnHeaderConstant {
public static final List<ColumnHeader> showQueriesColumnHeaders =
ImmutableList.of(
- new ColumnHeader(QUERY_ID, TSDataType.TEXT),
+ new ColumnHeader(QUERY_ID, TSDataType.STRING),
new ColumnHeader(DATA_NODE_ID, TSDataType.INT32),
new ColumnHeader(ELAPSED_TIME, TSDataType.FLOAT),
- new ColumnHeader(STATEMENT, TSDataType.TEXT));
+ new ColumnHeader(STATEMENT, TSDataType.STRING),
+ new ColumnHeader(WAIT_TIME_IN_SERVER, TSDataType.FLOAT),
+ new ColumnHeader(CLIENT_IP_TREE_MODEL, TSDataType.STRING),
+ new ColumnHeader(TIMEOUT, TSDataType.INT64));
public static final List<ColumnHeader> showDiskUsageColumnHeaders =
ImmutableList.of(
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
index 6a7ceb8c2ea..98bf4a9a830 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
@@ -78,6 +78,13 @@ public class InformationSchema {
new AttributeColumnSchema(ColumnHeaderConstant.STATEMENT_TABLE_MODEL,
TSDataType.STRING));
queriesTable.addColumnSchema(
new AttributeColumnSchema(ColumnHeaderConstant.USER_TABLE_MODEL,
TSDataType.STRING));
+ queriesTable.addColumnSchema(
+ new AttributeColumnSchema(
+ ColumnHeaderConstant.WAIT_TIME_IN_SERVER_TABLE_MODEL,
TSDataType.FLOAT));
+ queriesTable.addColumnSchema(
+ new AttributeColumnSchema(ColumnHeaderConstant.CLIENT_IP,
TSDataType.STRING));
+ queriesTable.addColumnSchema(
+ new AttributeColumnSchema(ColumnHeaderConstant.TIMEOUT_TABLE_MODEL,
TSDataType.INT64));
schemaTables.put(QUERIES, queriesTable);
final TsTable databaseTable = new TsTable(DATABASES);