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 75c8629c6ec Muti FileNode
75c8629c6ec is described below
commit 75c8629c6ec557182ae625e70d23cfa8b6c42627
Author: HTHou <[email protected]>
AuthorDate: Mon Jul 7 10:55:05 2025 +0800
Muti FileNode
---
.../node/write/RelationalInsertTabletNode.java | 10 +--
.../plan/relational/planner/RelationPlanner.java | 8 +-
.../dataregion/memtable/TsFileProcessor.java | 90 +++++++++++-----------
3 files changed, 57 insertions(+), 51 deletions(-)
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 40690d012a8..cad719774f0 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
@@ -59,7 +59,7 @@ public class RelationalInsertTabletNode extends
InsertTabletNode {
private boolean singleDevice;
- private List<FileNode> fileNodeList;
+ private List<List<FileNode>> fileNodesList;
public RelationalInsertTabletNode(
PlanNodeId id,
@@ -111,12 +111,12 @@ public class RelationalInsertTabletNode extends
InsertTabletNode {
this.singleDevice = true;
}
- public void setFileNodeList(List<FileNode> fileNodeList) {
- this.fileNodeList = fileNodeList;
+ public void setFileNodeList(List<List<FileNode>> fileNodesList) {
+ this.fileNodesList = fileNodesList;
}
- public List<FileNode> getFileNodeList() {
- return fileNodeList;
+ public List<List<FileNode>> getFileNodeList() {
+ return fileNodesList;
}
public Binary[] getObjectColumn() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
index 1d6ff3a5c26..83f3e71b2fb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
@@ -1128,10 +1128,11 @@ public class RelationPlanner extends
AstVisitor<RelationPlan, Void> {
MeasurementSchema[] measurementSchemas =
insertTabletStatement.getMeasurementSchemas();
stayConsistent(measurements, measurementSchemas);
boolean hasObject = false;
- List<FileNode> fileNodeList = new ArrayList<>();
+ List<List<FileNode>> fileNodesList = new ArrayList<>();
for (int i = 0; i < insertTabletStatement.getDataTypes().length; i++) {
if (insertTabletStatement.getDataTypes()[i] == TSDataType.OBJECT) {
hasObject = true;
+ List<FileNode> fileNodes = new ArrayList<>();
for (int j = 0; j < insertTabletStatement.getTimes().length; j++) {
Binary value = ((Binary[]) insertTabletStatement.getColumns()[i])[j];
boolean isEoF = value.getValues()[0] == 1;
@@ -1141,9 +1142,10 @@ public class RelationPlanner extends
AstVisitor<RelationPlan, Void> {
byte[] content = new byte[value.getLength() - 9];
System.arraycopy(value.getValues(), 9, content, 0, value.getLength()
- 9);
FileNode fileNode = new FileNode(isEoF, offset, content);
- fileNodeList.add(fileNode);
+ fileNodes.add(fileNode);
((Binary[]) insertTabletStatement.getColumns()[i])[j] = null;
}
+ fileNodesList.add(fileNodes);
}
}
@@ -1162,7 +1164,7 @@ public class RelationPlanner extends
AstVisitor<RelationPlan, Void> {
insertTabletStatement.getColumnCategories());
insertNode.setFailedMeasurementNumber(insertTabletStatement.getFailedMeasurementNumber());
if (hasObject) {
- insertNode.setFileNodeList(fileNodeList);
+ insertNode.setFileNodeList(fileNodesList);
}
if (insertTabletStatement.isSingleDevice()) {
insertNode.setSingleDevice();
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 4cfad7920eb..114a11aa1b5 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
@@ -569,51 +569,55 @@ public class TsFileProcessor {
if (insertTabletNode instanceof RelationalInsertTabletNode) {
RelationalInsertTabletNode relationalInsertTabletNode =
(RelationalInsertTabletNode) insertTabletNode;
- List<FileNode> fileNodeList =
relationalInsertTabletNode.getFileNodeList();
- if (fileNodeList != null) {
- for (int i = 0; i < fileNodeList.size(); i++) {
- FileNode fileNode = fileNodeList.get(i);
- String objectFileName =
- insertTabletNode.getTimes()[i]
- + "-"
- + config.getDataNodeId()
- + "-"
- + DataRegion.objectFileId.incrementAndGet()
- + ".bin";
- String objectTmpFileName = objectFileName + ".tmp";
- File objectTmpFile = new File(writer.getFile().getParent(),
objectTmpFileName);
- try (ObjectWriter writer = new ObjectWriter(objectTmpFile)) {
- writer.write(fileNode);
- } catch (Exception e) {
- throw new WriteProcessException(e);
- }
- // TODO:[OBJECT] write file node wal
- if (fileNode.isEOF()) {
- File objectFile = new File(writer.getFile().getParent(),
objectFileName);
- try {
- Files.move(
- objectTmpFile.toPath(), objectFile.toPath(),
StandardCopyOption.REPLACE_EXISTING);
- } catch (IOException e) {
+ List<List<FileNode>> fileNodesList =
relationalInsertTabletNode.getFileNodeList();
+ if (fileNodesList != null) {
+ for (List<FileNode> fileNodeList : fileNodesList) {
+ for (int i = 0; i < fileNodeList.size(); i++) {
+ FileNode fileNode = fileNodeList.get(i);
+ String objectFileName =
+ insertTabletNode.getTimes()[i]
+ + "-"
+ + config.getDataNodeId()
+ + "-"
+ + DataRegion.objectFileId.incrementAndGet()
+ + ".bin";
+ String objectTmpFileName = objectFileName + ".tmp";
+ File objectTmpFile = new File(writer.getFile().getParent(),
objectTmpFileName);
+ try (ObjectWriter writer = new ObjectWriter(objectTmpFile)) {
+ writer.write(fileNode);
+ } catch (Exception e) {
throw new WriteProcessException(e);
}
- String relativePathString =
- (sequence
- ? IoTDBConstant.SEQUENCE_FOLDER_NAME
- : IoTDBConstant.UNSEQUENCE_FOLDER_NAME)
- + File.separator
- + dataRegionInfo.getDataRegion().getDatabaseName()
- + File.separator
- + dataRegionInfo.getDataRegion().getDataRegionId()
- + File.separator
- + tsFileResource.getTsFileID().timePartitionId
- + File.separator
- + objectFileName;
- byte[] filePathBytes =
relativePathString.getBytes(StandardCharsets.UTF_8);
- byte[] valueBytes = new byte[filePathBytes.length + Long.BYTES];
- System.arraycopy(
- BytesUtils.longToBytes(objectFile.length()), 0, valueBytes, 0,
Long.BYTES);
- System.arraycopy(filePathBytes, 0, valueBytes, 4,
filePathBytes.length);
- relationalInsertTabletNode.getObjectColumn()[i] = new
Binary(valueBytes);
+ // TODO:[OBJECT] write file node wal
+ if (fileNode.isEOF()) {
+ File objectFile = new File(writer.getFile().getParent(),
objectFileName);
+ try {
+ Files.move(
+ objectTmpFile.toPath(),
+ objectFile.toPath(),
+ StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException e) {
+ throw new WriteProcessException(e);
+ }
+ String relativePathString =
+ (sequence
+ ? IoTDBConstant.SEQUENCE_FOLDER_NAME
+ : IoTDBConstant.UNSEQUENCE_FOLDER_NAME)
+ + File.separator
+ + dataRegionInfo.getDataRegion().getDatabaseName()
+ + File.separator
+ + dataRegionInfo.getDataRegion().getDataRegionId()
+ + File.separator
+ + tsFileResource.getTsFileID().timePartitionId
+ + File.separator
+ + objectFileName;
+ byte[] filePathBytes =
relativePathString.getBytes(StandardCharsets.UTF_8);
+ byte[] valueBytes = new byte[filePathBytes.length + Long.BYTES];
+ System.arraycopy(
+ BytesUtils.longToBytes(objectFile.length()), 0, valueBytes,
0, Long.BYTES);
+ System.arraycopy(filePathBytes, 0, valueBytes, 4,
filePathBytes.length);
+ relationalInsertTabletNode.getObjectColumn()[i] = new
Binary(valueBytes);
+ }
}
}
}