This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/object_type
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/object_type by this push:
new 799b77234ae Fix queryCostStatWindow process of current queries (#16912)
799b77234ae is described below
commit 799b77234aed37b5b537f474950544c0757844c2
Author: Weihao Li <[email protected]>
AuthorDate: Tue Dec 16 18:45:16 2025 +0800
Fix queryCostStatWindow process of current queries (#16912)
(cherry picked from commit c663477e82a5deb5c25b4f50fa5dd8e6b7636589)
---
.../informationschema/IoTDBCurrentQueriesIT.java | 55 ++++++++++++++++++++++
.../iotdb/db/queryengine/plan/Coordinator.java | 8 ++--
2 files changed, 59 insertions(+), 4 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/informationschema/IoTDBCurrentQueriesIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/informationschema/IoTDBCurrentQueriesIT.java
index 4f9c8cab794..1db5dee5323 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/informationschema/IoTDBCurrentQueriesIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/informationschema/IoTDBCurrentQueriesIT.java
@@ -162,6 +162,9 @@ public class IoTDBCurrentQueriesIT {
// 5. test privilege
testPrivilege();
+
+ // 6. test more configurations
+ testMoreConfigurations();
}
private void testPrivilege() {
@@ -203,4 +206,56 @@ public class IoTDBCurrentQueriesIT {
e.getMessage());
}
}
+
+ private void testMoreConfigurations() {
+ try {
+ Connection connection =
+ EnvFactory.getEnv().getConnection(ADMIN_NAME, ADMIN_PWD,
BaseEnv.TABLE_SQL_DIALECT);
+ Statement statement = connection.createStatement();
+ statement.execute("USE information_schema");
+
+ statement.execute("set configuration \"query_cost_stat_window\"='0'");
+ Thread.sleep(1_001);
+
+ // query_cost_stat_window = 0, history queries are cleared
+ String sql = "SELECT * FROM current_queries WHERE state='FINISHED'";
+ ResultSet resultSet = statement.executeQuery(sql);
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ Assert.assertEquals(CURRENT_QUERIES_COLUMN_NUM,
metaData.getColumnCount());
+ int rowNum = 0;
+ while (resultSet.next()) {
+ rowNum++;
+ }
+ Assert.assertEquals(0, rowNum);
+ resultSet.close();
+
+ statement.execute("set configuration
\"query_cost_stat_window\"='1040000000'");
+ // make query_cost_stat_window very large but not overflow
+ resultSet = statement.executeQuery(sql);
+ while (resultSet.next()) {
+ rowNum++;
+ }
+ resultSet.close();
+
+ resultSet = statement.executeQuery(sql);
+ rowNum = 0;
+ while (resultSet.next()) {
+ rowNum++;
+ }
+ // the history SQL is recorded
+ Assert.assertEquals(1, rowNum);
+ resultSet.close();
+
+ // make query_cost_stat_window overflow
+ try {
+ statement.execute("set configuration
\"query_cost_stat_window\"='10400000000'");
+ } catch (Exception e) {
+ Assert.assertTrue(
+ e.getMessage()
+ .contains("java.lang.NumberFormatException: For input string:
\"10400000000\""));
+ }
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 57e3d071074..3210d277d86 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -837,12 +837,12 @@ public class Coordinator {
private void clearExpiredQueriesInfoTask() {
int queryCostStatWindow = CONFIG.getQueryCostStatWindow();
- if (queryCostStatWindow <= 0) {
+ if (queryCostStatWindow <= 0 && currentQueriesInfo.isEmpty()) {
return;
}
// the QueryInfo smaller than expired time will be cleared
- long expiredTime = System.currentTimeMillis() - queryCostStatWindow * 60 *
1_000L;
+ long expiredTime = System.currentTimeMillis() - 1_000L * 60 *
queryCostStatWindow;
// peek head, the head QueryInfo is in the time window, return directly
QueryInfo queryInfo = currentQueriesInfo.peekFirst();
if (queryInfo == null || queryInfo.endTime >= expiredTime) {
@@ -886,7 +886,7 @@ public class Coordinator {
long currentTime = System.currentTimeMillis();
List<StatedQueriesInfo> result = new ArrayList<>();
Iterator<QueryInfo> historyQueriesIterator = currentQueriesInfo.iterator();
- long needRecordTime = currentTime - CONFIG.getQueryCostStatWindow() * 60 *
1_000L;
+ long needRecordTime = currentTime - 1_000L * 60 *
CONFIG.getQueryCostStatWindow();
while (historyQueriesIterator.hasNext()) {
QueryInfo queryInfo = historyQueriesIterator.next();
if (queryInfo.endTime < needRecordTime) {
@@ -908,7 +908,7 @@ public class Coordinator {
Iterator<QueryInfo> historyQueriesIterator = currentQueriesInfo.iterator();
Set<String> repetitionQueryIdSet = new HashSet<>();
long currentTime = System.currentTimeMillis();
- long needRecordTime = currentTime - CONFIG.getQueryCostStatWindow() * 60 *
1_000L;
+ long needRecordTime = currentTime - 1_000L * 60 *
CONFIG.getQueryCostStatWindow();
while (historyQueriesIterator.hasNext()) {
QueryInfo queryInfo = historyQueriesIterator.next();
if (queryInfo.endTime < needRecordTime) {