You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/01/15 09:21:02 UTC
[iotdb] branch master updated: [IOTDB-2403] The parameter "ascending" is not set correctly when getting QueryDataSource (#4830)
This is an automated email from the ASF dual-hosted git repository.
jackietien 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 b959fb3 [IOTDB-2403] The parameter "ascending" is not set correctly when getting QueryDataSource (#4830)
b959fb3 is described below
commit b959fb3251088ee9e4dd52b42aac36214e3cc84a
Author: liuminghui233 <36...@users.noreply.github.com>
AuthorDate: Sat Jan 15 17:20:30 2022 +0800
[IOTDB-2403] The parameter "ascending" is not set correctly when getting QueryDataSource (#4830)
---
.../iotdb/cluster/query/LocalQueryExecutor.java | 3 ++-
.../cluster/query/reader/ClusterReaderFactory.java | 2 +-
.../db/metadata/lastCache/LastCacheManager.java | 4 +++-
.../apache/iotdb/db/query/context/QueryContext.java | 9 ---------
.../iotdb/db/query/control/QueryResourceManager.java | 4 ++--
.../groupby/GroupByWithValueFilterDataSet.java | 3 ++-
.../dataset/groupby/LocalAlignedGroupByExecutor.java | 2 +-
.../query/dataset/groupby/LocalGroupByExecutor.java | 2 +-
.../iotdb/db/query/executor/AggregationExecutor.java | 20 +++++++++++++-------
.../iotdb/db/query/executor/FillQueryExecutor.java | 3 ++-
.../iotdb/db/query/executor/LastQueryExecutor.java | 4 +++-
.../db/query/executor/RawDataQueryExecutor.java | 6 ++++--
.../iotdb/db/query/executor/fill/LinearFill.java | 8 ++++++--
.../iotdb/db/query/executor/fill/PreviousFill.java | 5 ++++-
.../db/query/timegenerator/ServerTimeGenerator.java | 3 ++-
.../iotdb/db/service/thrift/impl/TSServiceImpl.java | 1 -
.../db/engine/modification/DeletionFileNodeTest.java | 4 ++--
17 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
index 10997f5..8c4cd69 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
@@ -750,7 +750,8 @@ public class LocalQueryExecutor {
dataType,
ascResults,
descResults,
- new SlotTsFileFilter(nodeSlots));
+ new SlotTsFileFilter(nodeSlots),
+ ascending);
return results;
}
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
index 123d734..56560ecc 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
@@ -553,7 +553,7 @@ public class ClusterReaderFactory {
// If requiredSlots is not null, it means that this node should provide partial data as previous
// holder, in order to assist the new holder to read the complete data.
QueryDataSource queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter);
+ QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter, ascending);
valueFilter = queryDataSource.updateFilterUsingTTL(valueFilter);
return path.createSeriesReader(
allSensors,
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java
index 17ec217..6f57d91 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/lastCache/LastCacheManager.java
@@ -220,9 +220,11 @@ public class LastCacheManager {
return getLastCache(node).getTimestamp();
} else {
try {
+ // for the parameter "ascending": true or false both ok here,
+ // because LastPointReader will do itself sort logic instead of depending on fillOrderIndex.
QueryDataSource dataSource =
QueryResourceManager.getInstance()
- .getQueryDataSource(node.getPartialPath(), queryContext, null);
+ .getQueryDataSource(node.getPartialPath(), queryContext, null, false);
Set<String> measurementSet = new HashSet<>();
measurementSet.add(node.getPartialPath().getFullPath());
LastPointReader lastReader =
diff --git a/server/src/main/java/org/apache/iotdb/db/query/context/QueryContext.java b/server/src/main/java/org/apache/iotdb/db/query/context/QueryContext.java
index fb75003..df1b008 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/context/QueryContext.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/context/QueryContext.java
@@ -54,7 +54,6 @@ public class QueryContext {
private boolean debug;
private boolean enableTracing = false;
- private boolean ascending;
/**
* To reduce the cost of memory, we only keep the a certain size statement. For statement whose
@@ -200,12 +199,4 @@ public class QueryContext {
public boolean isInterrupted() {
return isInterrupted;
}
-
- public boolean isAscending() {
- return ascending;
- }
-
- public void setAscending(boolean ascending) {
- this.ascending = ascending;
- }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/control/QueryResourceManager.java b/server/src/main/java/org/apache/iotdb/db/query/control/QueryResourceManager.java
index d10ad3f..36b6b66 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/control/QueryResourceManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/control/QueryResourceManager.java
@@ -145,7 +145,7 @@ public class QueryResourceManager {
* an aligned device, it should be AlignedPath instead of MeasurementPath
*/
public QueryDataSource getQueryDataSource(
- PartialPath selectedPath, QueryContext context, Filter timeFilter)
+ PartialPath selectedPath, QueryContext context, Filter timeFilter, boolean ascending)
throws StorageEngineException, QueryProcessException {
long queryId = context.getQueryId();
@@ -179,7 +179,7 @@ public class QueryResourceManager {
queryDataSource.setDataTTL(cachedQueryDataSource.getDataTTL());
// calculate the read order of unseqResources
- QueryUtils.fillOrderIndexes(queryDataSource, deviceId, context.isAscending());
+ QueryUtils.fillOrderIndexes(queryDataSource, deviceId, ascending);
return queryDataSource;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
index 67ab3d7..feee017 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
@@ -158,7 +158,8 @@ public class GroupByWithValueFilterDataSet extends GroupByEngineDataSet {
queryPlan.getAllMeasurementsInDevice(path.getDevice()),
path.getSeriesType(),
context,
- QueryResourceManager.getInstance().getQueryDataSource(path, context, null),
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(path, context, null, queryPlan.isAscending()),
null,
ascending);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java
index e788e27..bebb354 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java
@@ -68,7 +68,7 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor {
boolean ascending)
throws StorageEngineException, QueryProcessException {
queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter);
+ QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter, ascending);
// update filter by TTL
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
index 75d1d72..22563f8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
@@ -66,7 +66,7 @@ public class LocalGroupByExecutor implements GroupByExecutor {
boolean ascending)
throws StorageEngineException, QueryProcessException {
queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter);
+ QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter, ascending);
// update filter by TTL
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
// init SeriesAggregateReader for non-aligned series
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
index a810b53..8d7bbf9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
@@ -192,7 +192,8 @@ public class AggregationExecutor {
tsDataType,
ascAggregateResultList,
descAggregateResultList,
- null);
+ null,
+ ascending);
int ascIndex = 0;
int descIndex = 0;
@@ -241,7 +242,8 @@ public class AggregationExecutor {
TSDataType.VECTOR,
ascAggregateResultList,
descAggregateResultList,
- null);
+ null,
+ ascending);
for (int i = 0; i < subIndexes.size(); i++) {
List<Integer> subIndex = subIndexes.get(i);
@@ -265,12 +267,14 @@ public class AggregationExecutor {
TSDataType tsDataType,
List<AggregateResult> ascAggregateResultList,
List<AggregateResult> descAggregateResultList,
- TsFileFilter fileFilter)
+ TsFileFilter fileFilter,
+ boolean ascending)
throws StorageEngineException, IOException, QueryProcessException {
// construct series reader without value filter
QueryDataSource queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(seriesPath, context, timeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(seriesPath, context, timeFilter, ascending);
if (fileFilter != null) {
QueryUtils.filterQueryDataSource(queryDataSource, fileFilter);
}
@@ -315,12 +319,14 @@ public class AggregationExecutor {
TSDataType tsDataType,
List<List<AggregateResult>> ascAggregateResultList,
List<List<AggregateResult>> descAggregateResultList,
- TsFileFilter fileFilter)
+ TsFileFilter fileFilter,
+ boolean ascending)
throws StorageEngineException, IOException, QueryProcessException {
// construct series reader without value filter
QueryDataSource queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(alignedPath, context, timeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(alignedPath, context, timeFilter, ascending);
if (fileFilter != null) {
QueryUtils.filterQueryDataSource(queryDataSource, fileFilter);
}
@@ -690,7 +696,7 @@ public class AggregationExecutor {
queryPlan.getAllMeasurementsInDevice(path.getDevice()),
dataType,
context,
- QueryResourceManager.getInstance().getQueryDataSource(path, context, null),
+ QueryResourceManager.getInstance().getQueryDataSource(path, context, null, ascending),
null,
ascending);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/FillQueryExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/FillQueryExecutor.java
index bcef343..ae4eefb 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/FillQueryExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/FillQueryExecutor.java
@@ -247,7 +247,8 @@ public class FillQueryExecutor {
PartialPath path = selectedSeries.get(i);
TSDataType dataType = dataTypes.get(i);
QueryDataSource queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(path, context, timeFilter, plan.isAscending());
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
ManagedSeriesReader reader =
new SeriesRawDataBatchReader(
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
index 256a9f7..39128a6 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/LastQueryExecutor.java
@@ -75,6 +75,7 @@ public class LastQueryExecutor {
// for test to reload this parameter after restart, it can't be final
private static boolean ID_TABLE_ENABLED =
IoTDBDescriptor.getInstance().getConfig().isEnableIDTable();
+ private static boolean ascending;
private static final Logger logger = LoggerFactory.getLogger(LastQueryExecutor.class);
@@ -82,6 +83,7 @@ public class LastQueryExecutor {
this.selectedSeries = lastQueryPlan.getDeduplicatedPaths();
this.dataTypes = lastQueryPlan.getDeduplicatedDataTypes();
this.expression = lastQueryPlan.getExpression();
+ this.ascending = lastQueryPlan.isAscending();
}
public LastQueryExecutor(List<PartialPath> selectedSeries, List<TSDataType> dataTypes) {
@@ -190,7 +192,7 @@ public class LastQueryExecutor {
for (int i = 0; i < nonCachedPaths.size(); i++) {
QueryDataSource dataSource =
QueryResourceManager.getInstance()
- .getQueryDataSource(nonCachedPaths.get(i), context, filter);
+ .getQueryDataSource(nonCachedPaths.get(i), context, filter, ascending);
LastPointReader lastReader =
nonCachedPaths
.get(i)
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/RawDataQueryExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/executor/RawDataQueryExecutor.java
index c1f101e..7cb7c73 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/RawDataQueryExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/RawDataQueryExecutor.java
@@ -124,7 +124,8 @@ public class RawDataQueryExecutor {
TSDataType dataType = path.getSeriesType();
QueryDataSource queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, timeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(path, context, timeFilter, queryPlan.isAscending());
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
ManagedSeriesReader reader =
@@ -283,7 +284,8 @@ public class RawDataQueryExecutor {
allSensors,
dataType,
context,
- QueryResourceManager.getInstance().getQueryDataSource(path, context, null),
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(path, context, null, queryPlan.isAscending()),
null,
queryPlan.isAscending());
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
index 4151bbc..f810780 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
@@ -152,8 +152,11 @@ public class LinearFill extends IFill {
protected TimeValuePair calculatePrecedingPoint()
throws QueryProcessException, StorageEngineException, IOException {
+ // for the parameter "ascending": true or false both ok here,
+ // because LastPointReader will do itself sort logic instead of depending on fillOrderIndex.
QueryDataSource dataSource =
- QueryResourceManager.getInstance().getQueryDataSource(seriesPath, context, beforeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(seriesPath, context, beforeFilter, false);
LastPointReader lastReader =
new LastPointReader(
seriesPath,
@@ -183,7 +186,8 @@ public class LinearFill extends IFill {
dataType,
aggregateResultList,
null,
- null);
+ null,
+ true);
return convertToResult(minTimeResult, firstValueResult);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/PreviousFill.java b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/PreviousFill.java
index 43249c3..f41e351 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/PreviousFill.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/PreviousFill.java
@@ -114,8 +114,11 @@ public class PreviousFill extends IFill {
@Override
public TimeValuePair getFillResult()
throws IOException, QueryProcessException, StorageEngineException {
+ // for the parameter "ascending": true or false both ok here,
+ // because LastPointReader will do itself sort logic instead of depending on fillOrderIndex.
QueryDataSource dataSource =
- QueryResourceManager.getInstance().getQueryDataSource(seriesPath, context, timeFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(seriesPath, context, timeFilter, false);
// update filter by TTL
timeFilter = dataSource.updateFilterUsingTTL(timeFilter);
LastPointReader lastReader =
diff --git a/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java b/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
index e0068d4..55fc9b7 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
@@ -146,7 +146,8 @@ public class ServerTimeGenerator extends TimeGenerator {
QueryDataSource queryDataSource;
try {
queryDataSource =
- QueryResourceManager.getInstance().getQueryDataSource(path, context, valueFilter);
+ QueryResourceManager.getInstance()
+ .getQueryDataSource(path, context, valueFilter, queryPlan.isAscending());
// update valueFilter by TTL
valueFilter = queryDataSource.updateFilterUsingTTL(valueFilter);
} catch (Exception e) {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index f30afd8..044dc45 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -746,7 +746,6 @@ public class TSServiceImpl implements TSIService.Iface {
queryId, TracingConstant.ACTIVITY_PARSE_SQL, System.currentTimeMillis());
TRACING_MANAGER.setSeriesPathNum(queryId, plan.getPaths().size());
}
- context.setAscending(plan.isAscending());
TSExecuteStatementResp resp = null;
// execute it before createDataSet since it may change the content of query plan
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java b/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
index 51656fd..7e539a4 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
@@ -184,7 +184,7 @@ public class DeletionFileNodeTest {
QueryDataSource dataSource =
QueryResourceManager.getInstance()
.getQueryDataSource(
- (PartialPath) expression.getSeriesPath(), TEST_QUERY_CONTEXT, null);
+ (PartialPath) expression.getSeriesPath(), TEST_QUERY_CONTEXT, null, true);
int count = 0;
for (TsFileResource seqResource : dataSource.getSeqResources()) {
@@ -332,7 +332,7 @@ public class DeletionFileNodeTest {
QueryDataSource dataSource =
QueryResourceManager.getInstance()
.getQueryDataSource(
- (PartialPath) expression.getSeriesPath(), TEST_QUERY_CONTEXT, null);
+ (PartialPath) expression.getSeriesPath(), TEST_QUERY_CONTEXT, null, true);
List<ReadOnlyMemChunk> timeValuePairs =
dataSource