Skip to content

Commit c663477

Browse files
authored
Fix queryCostStatWindow process of current queries (#16912)
1 parent 79e10af commit c663477

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/informationschema/IoTDBCurrentQueriesIT.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ public void testCurrentQueries() {
162162

163163
// 5. test privilege
164164
testPrivilege();
165+
166+
// 6. test more configurations
167+
testMoreConfigurations();
165168
}
166169

167170
private void testPrivilege() {
@@ -203,4 +206,56 @@ private void testPrivilege() {
203206
e.getMessage());
204207
}
205208
}
209+
210+
private void testMoreConfigurations() {
211+
try {
212+
Connection connection =
213+
EnvFactory.getEnv().getConnection(ADMIN_NAME, ADMIN_PWD, BaseEnv.TABLE_SQL_DIALECT);
214+
Statement statement = connection.createStatement();
215+
statement.execute("USE information_schema");
216+
217+
statement.execute("set configuration \"query_cost_stat_window\"='0'");
218+
Thread.sleep(1_001);
219+
220+
// query_cost_stat_window = 0, history queries are cleared
221+
String sql = "SELECT * FROM current_queries WHERE state='FINISHED'";
222+
ResultSet resultSet = statement.executeQuery(sql);
223+
ResultSetMetaData metaData = resultSet.getMetaData();
224+
Assert.assertEquals(CURRENT_QUERIES_COLUMN_NUM, metaData.getColumnCount());
225+
int rowNum = 0;
226+
while (resultSet.next()) {
227+
rowNum++;
228+
}
229+
Assert.assertEquals(0, rowNum);
230+
resultSet.close();
231+
232+
statement.execute("set configuration \"query_cost_stat_window\"='1040000000'");
233+
// make query_cost_stat_window very large but not overflow
234+
resultSet = statement.executeQuery(sql);
235+
while (resultSet.next()) {
236+
rowNum++;
237+
}
238+
resultSet.close();
239+
240+
resultSet = statement.executeQuery(sql);
241+
rowNum = 0;
242+
while (resultSet.next()) {
243+
rowNum++;
244+
}
245+
// the history SQL is recorded
246+
Assert.assertEquals(1, rowNum);
247+
resultSet.close();
248+
249+
// make query_cost_stat_window overflow
250+
try {
251+
statement.execute("set configuration \"query_cost_stat_window\"='10400000000'");
252+
} catch (Exception e) {
253+
Assert.assertTrue(
254+
e.getMessage()
255+
.contains("java.lang.NumberFormatException: For input string: \"10400000000\""));
256+
}
257+
} catch (Exception e) {
258+
fail(e.getMessage());
259+
}
260+
}
206261
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -837,12 +837,12 @@ private void unrecordInHistogram(float costTimeInSeconds) {
837837

838838
private void clearExpiredQueriesInfoTask() {
839839
int queryCostStatWindow = CONFIG.getQueryCostStatWindow();
840-
if (queryCostStatWindow <= 0) {
840+
if (queryCostStatWindow <= 0 && currentQueriesInfo.isEmpty()) {
841841
return;
842842
}
843843

844844
// the QueryInfo smaller than expired time will be cleared
845-
long expiredTime = System.currentTimeMillis() - queryCostStatWindow * 60 * 1_000L;
845+
long expiredTime = System.currentTimeMillis() - 1_000L * 60 * queryCostStatWindow;
846846
// peek head, the head QueryInfo is in the time window, return directly
847847
QueryInfo queryInfo = currentQueriesInfo.peekFirst();
848848
if (queryInfo == null || queryInfo.endTime >= expiredTime) {
@@ -886,7 +886,7 @@ public List<StatedQueriesInfo> getFinishedQueriesInfos() {
886886
long currentTime = System.currentTimeMillis();
887887
List<StatedQueriesInfo> result = new ArrayList<>();
888888
Iterator<QueryInfo> historyQueriesIterator = currentQueriesInfo.iterator();
889-
long needRecordTime = currentTime - CONFIG.getQueryCostStatWindow() * 60 * 1_000L;
889+
long needRecordTime = currentTime - 1_000L * 60 * CONFIG.getQueryCostStatWindow();
890890
while (historyQueriesIterator.hasNext()) {
891891
QueryInfo queryInfo = historyQueriesIterator.next();
892892
if (queryInfo.endTime < needRecordTime) {
@@ -908,7 +908,7 @@ public List<StatedQueriesInfo> getCurrentQueriesInfo() {
908908
Iterator<QueryInfo> historyQueriesIterator = currentQueriesInfo.iterator();
909909
Set<String> repetitionQueryIdSet = new HashSet<>();
910910
long currentTime = System.currentTimeMillis();
911-
long needRecordTime = currentTime - CONFIG.getQueryCostStatWindow() * 60 * 1_000L;
911+
long needRecordTime = currentTime - 1_000L * 60 * CONFIG.getQueryCostStatWindow();
912912
while (historyQueriesIterator.hasNext()) {
913913
QueryInfo queryInfo = historyQueriesIterator.next();
914914
if (queryInfo.endTime < needRecordTime) {

0 commit comments

Comments
 (0)