Skip to content

Commit 22ee1c1

Browse files
committed
fix
Signed-off-by: Weihao Li <[email protected]>
1 parent c77bb57 commit 22ee1c1

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

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

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

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)