You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2023/08/02 09:13:21 UTC
[iotdb] 01/03: Fix last flush map bug
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch fix_recover_last_flush_map
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit e21eadb0909d867b1823f90615c5ac64304192aa
Author: HTHou <hh...@outlook.com>
AuthorDate: Wed Aug 2 16:04:16 2023 +0800
Fix last flush map bug
---
.../iotdb/db/storageengine/dataregion/DataRegion.java | 2 +-
.../db/storageengine/dataregion/HashLastFlushTimeMap.java | 6 ++++--
.../execute/performer/impl/FastCompactionPerformer.java | 2 +-
.../db/storageengine/dataregion/tsfile/TsFileResource.java | 13 +++++++------
.../dataregion/tsfile/timeindex/DeviceTimeIndex.java | 4 ++--
.../dataregion/tsfile/timeindex/FileTimeIndex.java | 4 ++--
.../dataregion/tsfile/timeindex/ITimeIndex.java | 7 ++++---
7 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 7ba71add820..db5d0168d20 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -1943,7 +1943,7 @@ public class DataRegion implements IDataRegionForQuery {
deviceEndTime = startAndEndTime.getRight();
} else {
String deviceId = device.getFullPath();
- if (!tsFileResource.mayContainsDevice(deviceId)) {
+ if (tsFileResource.definitelyNotContains(deviceId)) {
// resource does not contain this device
continue;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
index cfa4975c453..c1dca62f747 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
public class HashLastFlushTimeMap implements ILastFlushTimeMap {
@@ -231,8 +232,9 @@ public class HashLastFlushTimeMap implements ILastFlushTimeMap {
tsFileManager.getOrCreateSequenceListByTimePartition(partitionId);
for (int i = tsFileResourceList.size() - 1; i >= 0; i--) {
- if (tsFileResourceList.get(i).timeIndex.mayContainsDevice(devicePath)) {
- return tsFileResourceList.get(i).timeIndex.getEndTime(devicePath);
+ Set<String> deviceSet = tsFileResourceList.get(i).getDevices();
+ if (deviceSet.contains(devicePath)) {
+ return tsFileResourceList.get(i).getEndTime(devicePath);
}
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
index 35bb32eea71..64a9ceb45bb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
@@ -120,7 +120,7 @@ public class FastCompactionPerformer
// actually exist but the judgment return device being existed.
sortedSourceFiles.addAll(seqFiles);
sortedSourceFiles.addAll(unseqFiles);
- sortedSourceFiles.removeIf(x -> !x.mayContainsDevice(device));
+ sortedSourceFiles.removeIf(x -> x.definitelyNotContains(device));
sortedSourceFiles.sort(Comparator.comparingLong(x -> x.getStartTime(device)));
boolean isAligned = deviceInfo.right;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index 32c8fa9ab26..b8073a57100 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -96,7 +96,7 @@ public class TsFileResource {
protected TsFileResource next;
/** time index */
- public ITimeIndex timeIndex;
+ private ITimeIndex timeIndex;
@SuppressWarnings("squid:S3077")
private volatile ModificationFile modFile;
@@ -492,11 +492,12 @@ public class TsFileResource {
}
/**
- * Whether this TsFileResource contains this device, if false, it must not contain this device, if
- * true, it may or may not contain this device
+ * Whether this TsFile definitely not contains this device, if ture, it must not contain this
+ * device, if false, it may or may not contain this device Notice: using method be CAREFULLY and
+ * you really understand the meaning!!!!!
*/
- public boolean mayContainsDevice(String device) {
- return timeIndex.mayContainsDevice(device);
+ public boolean definitelyNotContains(String device) {
+ return timeIndex.definitelyNotContains(device);
}
/**
@@ -800,7 +801,7 @@ public class TsFileResource {
/** @return true if the device is contained in the TsFile */
public boolean isSatisfied(String deviceId, Filter timeFilter, boolean isSeq, boolean debug) {
- if (!mayContainsDevice(deviceId)) {
+ if (definitelyNotContains(deviceId)) {
if (debug) {
DEBUG_LOGGER.info(
"Path: {} file {} is not satisfied because of no device!", deviceId, file);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
index f1324582d9b..48980c4db02 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/DeviceTimeIndex.java
@@ -362,8 +362,8 @@ public class DeviceTimeIndex implements ITimeIndex {
}
@Override
- public boolean mayContainsDevice(String device) {
- return deviceToIndex.containsKey(device);
+ public boolean definitelyNotContains(String device) {
+ return !deviceToIndex.containsKey(device);
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/FileTimeIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/FileTimeIndex.java
index 954459135fa..53f82435f57 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/FileTimeIndex.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/FileTimeIndex.java
@@ -224,8 +224,8 @@ public class FileTimeIndex implements ITimeIndex {
}
@Override
- public boolean mayContainsDevice(String device) {
- return true;
+ public boolean definitelyNotContains(String device) {
+ return false;
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ITimeIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ITimeIndex.java
index f867ac32a6f..cdba125f040 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ITimeIndex.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ITimeIndex.java
@@ -188,10 +188,11 @@ public interface ITimeIndex {
int compareDegradePriority(ITimeIndex timeIndex);
/**
- * Whether this TsFile contains this device, if false, it must not contain this device, if true,
- * it may or may not contain this device
+ * Whether this TsFile definitely not contains this device, if ture, it must not contain this
+ * device, if false, it may or may not contain this device Notice: using method be CAREFULLY and
+ * you really understand the meaning!!!!!
*/
- boolean mayContainsDevice(String device);
+ boolean definitelyNotContains(String device);
/**
* @return null if the deviceId doesn't exist, otherwise index 0 is startTime, index 1 is endTime