This is an automated email from the ASF dual-hosted git repository.
rong 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 a7f2d6bb437 Load: Fix locally load v3 tsfile with PlainDeviceTimeIndex
(#14098)
a7f2d6bb437 is described below
commit a7f2d6bb43703c7d843125427a4de6998191a688
Author: Zhenyu Luo <[email protected]>
AuthorDate: Thu Nov 21 21:24:40 2024 +0800
Load: Fix locally load v3 tsfile with PlainDeviceTimeIndex (#14098)
Co-authored-by: Steve Yurong Su <[email protected]>
---
.../plan/scheduler/load/LoadTsFileScheduler.java | 22 ++++++++++++++++++++++
.../dataregion/tsfile/TsFileResource.java | 4 +++-
.../tsfile/timeindex/ArrayDeviceTimeIndex.java | 12 ++++++++++++
3 files changed, 37 insertions(+), 1 deletion(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
index 5fc847b2b9b..c112eb34490 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
@@ -57,6 +57,8 @@ import org.apache.iotdb.db.storageengine.StorageEngine;
import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
import org.apache.iotdb.db.storageengine.dataregion.flush.MemTableFlushTask;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ArrayDeviceTimeIndex;
+import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.PlainDeviceTimeIndex;
import
org.apache.iotdb.db.storageengine.load.memory.LoadTsFileDataCacheMemoryBlock;
import org.apache.iotdb.db.storageengine.load.memory.LoadTsFileMemoryManager;
import org.apache.iotdb.db.storageengine.load.metrics.LoadTsFileCostMetricsSet;
@@ -70,6 +72,7 @@ import org.apache.iotdb.rpc.TSStatusCode;
import io.airlift.units.Duration;
import org.apache.tsfile.file.metadata.IDeviceID;
+import org.apache.tsfile.file.metadata.StringArrayDeviceID;
import org.apache.tsfile.utils.Pair;
import org.apache.tsfile.utils.PublicBAOS;
import org.slf4j.Logger;
@@ -89,6 +92,7 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CancellationException;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -414,6 +418,24 @@ public class LoadTsFileScheduler implements IScheduler {
throw new LoadReadOnlyException();
}
+ // if the time index is PlainDeviceTimeIndex, convert it to
ArrayDeviceTimeIndex
+ if (node.getTsFileResource().getTimeIndex() instanceof
PlainDeviceTimeIndex) {
+ final PlainDeviceTimeIndex timeIndex =
+ (PlainDeviceTimeIndex) node.getTsFileResource().getTimeIndex();
+ final Map<IDeviceID, Integer> convertedDeviceToIndex = new
ConcurrentHashMap<>();
+ for (final Map.Entry<IDeviceID, Integer> entry :
timeIndex.getDeviceToIndex().entrySet()) {
+ convertedDeviceToIndex.put(
+ entry.getKey() instanceof StringArrayDeviceID
+ ? entry.getKey()
+ : new StringArrayDeviceID(entry.getKey().toString()),
+ entry.getValue());
+ }
+ node.getTsFileResource()
+ .setTimeIndex(
+ new ArrayDeviceTimeIndex(
+ convertedDeviceToIndex, timeIndex.getStartTimes(),
timeIndex.getEndTimes()));
+ }
+
try {
FragmentInstance instance =
new FragmentInstance(
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 912c593f841..88796349bfb 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
@@ -646,7 +646,9 @@ public class TsFileResource implements PersistentResource {
}
}
- /** Only used for compaction to validate tsfile. */
+ /**
+ * Used for compaction to verify tsfile, also used to verify TimeIndex
version when loading tsfile
+ */
public ITimeIndex getTimeIndex() {
return timeIndex;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
index f0f52d3b508..31fd9d385e6 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/timeindex/ArrayDeviceTimeIndex.java
@@ -165,6 +165,18 @@ public class ArrayDeviceTimeIndex implements ITimeIndex {
return deviceToIndex.keySet();
}
+ public Map<IDeviceID, Integer> getDeviceToIndex() {
+ return deviceToIndex;
+ }
+
+ public long[] getEndTimes() {
+ return endTimes;
+ }
+
+ public long[] getStartTimes() {
+ return startTimes;
+ }
+
/**
* Deserialize TimeIndex and get devices only.
*