You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2022/03/22 00:28:05 UTC
[iotdb] 01/01: Fix throwing exception when query non-exist device in TsFileSequenceReader
This is an automated email from the ASF dual-hosted git repository.
sunzesong pushed a commit to branch jira-2775
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit f01791ef3c416e1ac37e77dab12bc4176b378660
Author: Zesong Sun <v-...@microsoft.com>
AuthorDate: Tue Mar 22 08:26:46 2022 +0800
Fix throwing exception when query non-exist device in TsFileSequenceReader
---
.../iotdb/db/engine/cache/TimeSeriesMetadataCache.java | 13 ++++++-------
.../java/org/apache/iotdb/db/utils/FileLoaderUtils.java | 13 ++++++++++++-
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
index 92fcc9d..59f756e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java
@@ -142,14 +142,13 @@ public class TimeSeriesMetadataCache {
return TimeSeriesMetadataCache.TimeSeriesMetadataCacheHolder.INSTANCE;
}
- public TimeseriesMetadata get(TimeSeriesMetadataCacheKey key, Set<String> allSensors)
- throws IOException {
- return get(key, allSensors, false);
- }
-
@SuppressWarnings("squid:S1860") // Suppress synchronize warning
public TimeseriesMetadata get(
- TimeSeriesMetadataCacheKey key, Set<String> allSensors, boolean debug) throws IOException {
+ TimeSeriesMetadataCacheKey key,
+ Set<String> allSensors,
+ boolean ignoreNotExists,
+ boolean debug)
+ throws IOException {
if (!CACHE_ENABLE) {
// bloom filter part
TsFileSequenceReader reader = FileReaderManager.getInstance().get(key.filePath, true);
@@ -159,7 +158,7 @@ public class TimeSeriesMetadataCache {
return null;
}
TimeseriesMetadata timeseriesMetadata =
- reader.readTimeseriesMetadata(new Path(key.device, key.measurement), false);
+ reader.readTimeseriesMetadata(new Path(key.device, key.measurement), ignoreNotExists);
return (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0)
? null
: timeseriesMetadata;
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
index ced3d78..a8af376 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
@@ -99,6 +99,8 @@ public class FileLoaderUtils {
TimeseriesMetadata timeSeriesMetadata;
// If the tsfile is closed, we need to load from tsfile
if (resource.isClosed()) {
+ // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType is deviceTimeIndex
+ // we should not ignore the non-exist of device in TsFileMetadata
timeSeriesMetadata =
TimeSeriesMetadataCache.getInstance()
.get(
@@ -107,6 +109,7 @@ public class FileLoaderUtils {
seriesPath.getDevice(),
seriesPath.getMeasurement()),
allSensors,
+ resource.getTimeIndexType() != 1,
context.isDebug());
if (timeSeriesMetadata != null) {
timeSeriesMetadata.setChunkMetadataLoader(
@@ -164,8 +167,15 @@ public class FileLoaderUtils {
boolean isDebug = context.isDebug();
String filePath = resource.getTsFilePath();
String deviceId = vectorPath.getDevice();
+
+ // when resource.getTimeIndexType() == 1, TsFileResource.timeIndexType is deviceTimeIndex
+ // we should not ignore the non-exist of device in TsFileMetadata
TimeseriesMetadata timeColumn =
- cache.get(new TimeSeriesMetadataCacheKey(filePath, deviceId, ""), allSensors, isDebug);
+ cache.get(
+ new TimeSeriesMetadataCacheKey(filePath, deviceId, ""),
+ allSensors,
+ resource.getTimeIndexType() != 1,
+ isDebug);
if (timeColumn != null) {
List<TimeseriesMetadata> valueTimeSeriesMetadataList =
new ArrayList<>(valueMeasurementList.size());
@@ -176,6 +186,7 @@ public class FileLoaderUtils {
cache.get(
new TimeSeriesMetadataCacheKey(filePath, deviceId, valueMeasurement),
allSensors,
+ resource.getTimeIndexType() != 1,
isDebug);
exist = (exist || (valueColumn != null));
valueTimeSeriesMetadataList.add(valueColumn);