This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch object_type
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/object_type by this push:
new 618120aff09 add getAbsoluteObjectFilePath method
618120aff09 is described below
commit 618120aff094959137165edb539e2f8f387fdeea
Author: HTHou <[email protected]>
AuthorDate: Mon Jul 7 17:55:55 2025 +0800
add getAbsoluteObjectFilePath method
---
.../main/java/org/apache/iotdb/ObjectExample.java | 6 +-
.../plan/planner/plan/node/PlanNodeType.java | 6 +
.../plan/planner/plan/node/write/FileNode.java | 191 ++++++++++++++-------
.../node/write/RelationalInsertTabletNode.java | 1 +
.../dataregion/memtable/TsFileProcessor.java | 14 +-
.../dataregion/wal/buffer/WALEntry.java | 6 +
.../dataregion/wal/buffer/WALEntryType.java | 3 +-
.../dataregion/wal/buffer/WALInfoEntry.java | 4 +
.../dataregion/wal/node/IWALNode.java | 3 +
.../dataregion/wal/node/WALFakeNode.java | 6 +
.../storageengine/dataregion/wal/node/WALNode.java | 7 +
.../file/UnsealedTsFileRecoverPerformer.java | 2 +
.../db/storageengine/rescon/disk/TierManager.java | 11 ++
13 files changed, 192 insertions(+), 68 deletions(-)
diff --git a/example/session/src/main/java/org/apache/iotdb/ObjectExample.java
b/example/session/src/main/java/org/apache/iotdb/ObjectExample.java
index 8017061114f..b040dc5313b 100644
--- a/example/session/src/main/java/org/apache/iotdb/ObjectExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/ObjectExample.java
@@ -82,8 +82,7 @@ public class ObjectExample {
true,
0,
Files.readAllBytes(
- Paths.get(
-
"/Users/jackietien/Downloads/2_1746622362350_fa24aa15233f4e76bcda789a5771f43f")));
+
Paths.get("/Users/ht/Downloads/2_1746622362350_fa24aa15233f4e76bcda789a5771f43f")));
session.insert(tablet);
tablet.reset();
@@ -100,8 +99,7 @@ public class ObjectExample {
true,
0,
Files.readAllBytes(
- Paths.get(
-
"/Users/jackietien/Downloads/2_1746622367063_8fb5ac8e21724140874195b60b878664")));
+
Paths.get("/Users/ht/Downloads/2_1746622367063_8fb5ac8e21724140874195b60b878664")));
session.insert(tablet);
tablet.reset();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
index 2f157a9086c..f227429c5b3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
@@ -106,6 +106,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.ShowQueries
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.TimeseriesRegionScanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.ContinuousSameSearchIndexSeparatorNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertMultiTabletsNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
@@ -312,6 +313,7 @@ public enum PlanNodeType {
RELATIONAL_INSERT_ROW((short) 2001),
RELATIONAL_INSERT_ROWS((short) 2002),
RELATIONAL_DELETE_DATA((short) 2003),
+ OBJECT_FILE_NODE((short) 2004),
;
public static final int BYTES = Short.BYTES;
@@ -355,6 +357,8 @@ public enum PlanNodeType {
return RelationalInsertRowsNode.deserializeFromWAL(stream);
case 2003:
return RelationalDeleteDataNode.deserializeFromWAL(stream);
+ case 2004:
+ return FileNode.deserializeFromWAL(stream);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
@@ -381,6 +385,8 @@ public enum PlanNodeType {
return RelationalInsertRowsNode.deserializeFromWAL(buffer);
case 2003:
return RelationalDeleteDataNode.deserializeFromWAL(buffer);
+ case 2004:
+ return FileNode.deserializeFromWAL(buffer);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/FileNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/FileNode.java
index e91869e7e0b..55fbf337d39 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/FileNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/FileNode.java
@@ -19,8 +19,27 @@
package org.apache.iotdb.db.queryengine.plan.planner.plan.node.write;
+import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
+import org.apache.iotdb.commons.consensus.index.ProgressIndex;
+import org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode;
+import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferView;
+import org.apache.iotdb.db.storageengine.dataregion.wal.buffer.WALEntryValue;
+import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALWriteUtils;
+
+import org.apache.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.List;
+
// TODO:[OBJECT] WAL serde
-public class FileNode {
+public class FileNode extends SearchNode implements WALEntryValue {
private final boolean isEOF;
@@ -31,11 +50,19 @@ public class FileNode {
private String filePath;
public FileNode(boolean isEOF, long offset, byte[] content) {
+ super(new PlanNodeId(""));
this.isEOF = isEOF;
this.offset = offset;
this.content = content;
}
+ public FileNode(boolean isEOF, long offset, String filePath) {
+ super(new PlanNodeId(""));
+ this.isEOF = isEOF;
+ this.offset = offset;
+ this.filePath = filePath;
+ }
+
public boolean isEOF() {
return isEOF;
}
@@ -55,64 +82,106 @@ public class FileNode {
public String getFilePath() {
return filePath;
}
- //
- // @Override
- // public void serializeToWAL(IWALByteBufferView buffer) {}
- //
- // @Override
- // public int serializedSize() {
- // return 0;
- // }
- //
- // @Override
- // public SearchNode merge(List<SearchNode> searchNodes) {
- // return null;
- // }
- //
- // @Override
- // public ProgressIndex getProgressIndex() {
- // return null;
- // }
- //
- // @Override
- // public void setProgressIndex(ProgressIndex progressIndex) {}
- //
- // @Override
- // public List<WritePlanNode> splitByPartition(IAnalysis analysis) {
- // return List.of();
- // }
- //
- // @Override
- // public TRegionReplicaSet getRegionReplicaSet() {
- // return null;
- // }
- //
- // @Override
- // public List<PlanNode> getChildren() {
- // return List.of();
- // }
- //
- // @Override
- // public void addChild(PlanNode child) {}
- //
- // @Override
- // public PlanNode clone() {
- // return null;
- // }
- //
- // @Override
- // public int allowedChildCount() {
- // return 0;
- // }
- //
- // @Override
- // public List<String> getOutputColumnNames() {
- // return List.of();
- // }
- //
- // @Override
- // protected void serializeAttributes(ByteBuffer byteBuffer) {}
- //
- // @Override
- // protected void serializeAttributes(DataOutputStream stream) throws
IOException {}
+
+ @Override
+ public void serializeToWAL(IWALByteBufferView buffer) {
+ buffer.putShort(getType().getNodeType());
+ buffer.putLong(searchIndex);
+ buffer.put((byte) (isEOF ? 1 : 0));
+ buffer.putLong(offset);
+ WALWriteUtils.write(filePath, buffer);
+ }
+
+ @Override
+ public int serializedSize() {
+ return Short.BYTES
+ + Long.BYTES
+ + Byte.BYTES
+ + Long.BYTES
+ + ReadWriteIOUtils.sizeToWrite(filePath);
+ }
+
+ public static FileNode deserializeFromWAL(DataInputStream stream) throws
IOException {
+ long searchIndex = stream.readLong();
+ boolean isEOF = stream.readByte() == 1;
+ long offset = stream.readLong();
+ String filePath = ReadWriteIOUtils.readString(stream);
+
+ FileNode fileNode = new FileNode(isEOF, offset, filePath);
+ fileNode.setSearchIndex(searchIndex);
+ return fileNode;
+ }
+
+ public static FileNode deserializeFromWAL(ByteBuffer buffer) {
+ long searchIndex = buffer.getLong();
+ boolean isEOF = buffer.get() == 1;
+ long offset = buffer.getLong();
+ String filePath = ReadWriteIOUtils.readString(buffer);
+
+ FileNode fileNode = new FileNode(isEOF, offset, filePath);
+ fileNode.setSearchIndex(searchIndex);
+ return fileNode;
+ }
+
+ @Override
+ public SearchNode merge(List<SearchNode> searchNodes) {
+ return null;
+ }
+
+ @Override
+ public ProgressIndex getProgressIndex() {
+ return null;
+ }
+
+ @Override
+ public void setProgressIndex(ProgressIndex progressIndex) {}
+
+ @Override
+ public List<WritePlanNode> splitByPartition(IAnalysis analysis) {
+ return null;
+ }
+
+ @Override
+ public TRegionReplicaSet getRegionReplicaSet() {
+ return null;
+ }
+
+ @Override
+ public List<PlanNode> getChildren() {
+ return null;
+ }
+
+ @Override
+ public void addChild(PlanNode child) {}
+
+ @Override
+ public PlanNode clone() {
+ return null;
+ }
+
+ @Override
+ public int allowedChildCount() {
+ return NO_CHILD_ALLOWED;
+ }
+
+ @Override
+ public List<String> getOutputColumnNames() {
+ return null;
+ }
+
+ @Override
+ protected void serializeAttributes(ByteBuffer byteBuffer) {}
+
+ @Override
+ protected void serializeAttributes(DataOutputStream stream) throws
IOException {}
+
+ @Override
+ public PlanNodeType getType() {
+ return PlanNodeType.OBJECT_FILE_NODE;
+ }
+
+ @Override
+ public long getMemorySize() {
+ return super.getMemorySize();
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
index fe8940bd5da..68fb6c4fbe9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
@@ -409,6 +409,7 @@ public class RelationalInsertTabletNode extends
InsertTabletNode {
byte[] content = new byte[value.getLength() - 9];
System.arraycopy(value.getValues(), 9, content, 0, value.getLength()
- 9);
FileNode fileNode = new FileNode(isEoF, offset, content);
+ fileNode.setSearchIndex(this.getSearchIndex());
fileNodes.add(fileNode);
((Binary[]) columns[i])[j] = null;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
index 4c4392178f9..5b4e09b0154 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
@@ -568,9 +568,8 @@ public class TsFileProcessor {
long[] infoForMetrics)
throws WriteProcessException {
- handleWriteObject(insertTabletNode, rangeList, results);
-
ensureMemTable(infoForMetrics);
+ handleWriteObject(insertTabletNode, rangeList, results);
long[] memIncrements =
scheduleMemoryBlock(insertTabletNode, rangeList, results, noFailure,
infoForMetrics);
@@ -2414,6 +2413,17 @@ public class TsFileProcessor {
System.arraycopy(filePathBytes, 0, valueBytes, Long.BYTES,
filePathBytes.length);
(relationalInsertTabletNode.getObjectColumns().get(j))[i] = new
Binary(valueBytes);
}
+
+ WALFlushListener walFlushListener;
+ try {
+ walFlushListener = walNode.log(workMemTable.getMemTableId(),
fileNode);
+ if (walFlushListener.waitForResult() ==
WALFlushListener.Status.FAILURE) {
+ throw walFlushListener.getCause();
+ }
+ } catch (Exception e) {
+ results[i] =
RpcUtils.getStatus(TSStatusCode.INTERNAL_SERVER_ERROR, e.getMessage());
+ throw new WriteProcessException(e);
+ }
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntry.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntry.java
index 88cfb8b1564..af00ab29781 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntry.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntry.java
@@ -23,6 +23,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.ContinuousSameSearchIndexSeparatorNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
@@ -77,6 +78,8 @@ public abstract class WALEntry implements SerializedSize {
this.type = WALEntryType.CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE;
} else if (value instanceof RelationalDeleteDataNode) {
this.type = WALEntryType.RELATIONAL_DELETE_DATA_NODE;
+ } else if (value instanceof FileNode) {
+ this.type = WALEntryType.OBJECT_FILE_NODE;
} else {
throw new RuntimeException("Unknown WALEntry type");
}
@@ -134,6 +137,9 @@ public abstract class WALEntry implements SerializedSize {
case CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE:
value = (ContinuousSameSearchIndexSeparatorNode)
PlanNodeType.deserializeFromWAL(stream);
break;
+ case OBJECT_FILE_NODE:
+ value = (FileNode) PlanNodeType.deserializeFromWAL(stream);
+ break;
default:
throw new RuntimeException("Unknown WALEntry type " + type);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntryType.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntryType.java
index ac490699547..829affd1b4e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntryType.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALEntryType.java
@@ -72,7 +72,8 @@ public enum WALEntryType {
|| this == INSERT_ROW_NODE
|| this == INSERT_ROWS_NODE
|| this == DELETE_DATA_NODE
- || this == RELATIONAL_DELETE_DATA_NODE;
+ || this == RELATIONAL_DELETE_DATA_NODE
+ || this == OBJECT_FILE_NODE;
}
public static WALEntryType valueOf(byte code) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALInfoEntry.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALInfoEntry.java
index 6da50edba4f..edfdf0411a2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALInfoEntry.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALInfoEntry.java
@@ -21,6 +21,7 @@ package
org.apache.iotdb.db.storageengine.dataregion.wal.buffer;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
import org.apache.iotdb.db.storageengine.dataregion.memtable.IMemTable;
@@ -89,6 +90,7 @@ public class WALInfoEntry extends WALEntry {
case RELATIONAL_DELETE_DATA_NODE:
case MEMORY_TABLE_SNAPSHOT:
case CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE:
+ case OBJECT_FILE_NODE:
value.serializeToWAL(buffer);
break;
case MEMORY_TABLE_CHECKPOINT:
@@ -166,6 +168,8 @@ public class WALInfoEntry extends WALEntry {
case CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE:
case MEMORY_TABLE_CHECKPOINT:
return RamUsageEstimator.sizeOfObject(value);
+ case OBJECT_FILE_NODE:
+ return ((FileNode) value).getMemorySize();
default:
throw new RuntimeException("Unsupported wal entry type " + type);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/IWALNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/IWALNode.java
index 0d0e0a527f0..aa8959e5abf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/IWALNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/IWALNode.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.consensus.common.DataSet;
import org.apache.iotdb.consensus.iot.log.ConsensusReqReader;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.ContinuousSameSearchIndexSeparatorNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
@@ -54,6 +55,8 @@ public interface IWALNode extends FlushListener,
AutoCloseable, ConsensusReqRead
/** Log BatchDoneNode */
WALFlushListener log(long memTableId, ContinuousSameSearchIndexSeparatorNode
separatorNode);
+ WALFlushListener log(long memTableId, FileNode fileNode);
+
/** Callback when memTable created. */
void onMemTableCreated(IMemTable memTable, String targetTsFile);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALFakeNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALFakeNode.java
index c13e066415b..5a2cbbc12d2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALFakeNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALFakeNode.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.storageengine.dataregion.wal.node;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.ContinuousSameSearchIndexSeparatorNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
@@ -82,6 +83,11 @@ public class WALFakeNode implements IWALNode {
return getResult();
}
+ @Override
+ public WALFlushListener log(long memTableId, FileNode fileNode) {
+ return getResult();
+ }
+
private WALFlushListener getResult() {
switch (status) {
case SUCCESS:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
index 69af5d62162..56551e898aa 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.ContinuousSameSearchIndexSeparatorNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.FileNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
@@ -192,6 +193,12 @@ public class WALNode implements IWALNode {
return log(walEntry);
}
+ @Override
+ public WALFlushListener log(long memTableId, FileNode fileNode) {
+ WALEntry walEntry = new WALInfoEntry(memTableId, fileNode);
+ return log(walEntry);
+ }
+
private WALFlushListener log(WALEntry walEntry) {
buffer.write(walEntry);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
index c955f67c79c..38935f9fd62 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
@@ -223,6 +223,8 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
case CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE:
// The CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR_NODE doesn't need redo
break;
+ case OBJECT_FILE_NODE:
+ break;
default:
throw new RuntimeException("Unsupported type " + walEntry.getType());
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
index 75c5d3b3c96..9fd7d2fb94b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/disk/TierManager.java
@@ -45,6 +45,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -251,6 +252,16 @@ public class TierManager {
return objectDirs;
}
+ public Optional<File> getAbsoluteObjectFilePath(String filePath) {
+ for (String objectDir : objectDirs) {
+ File objectFile = FSFactoryProducer.getFSFactory().getFile(objectDir,
filePath);
+ if (objectFile.exists()) {
+ return Optional.of(objectFile);
+ }
+ }
+ return Optional.empty();
+ }
+
public int getTiersNum() {
return seqTiers.size();
}