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 4584fdd37d0 fix bug
new cf07c44869a Merge branch 'object_type' of github.com:apache/iotdb into
object_type
4584fdd37d0 is described below
commit 4584fdd37d09564574ce4f14b531d19e876aba5d
Author: HTHou <[email protected]>
AuthorDate: Tue Jul 8 19:05:54 2025 +0800
fix bug
---
.../statemachine/dataregion/DataExecutionVisitor.java | 2 +-
.../plan/planner/plan/node/write/ObjectNode.java | 14 ++++++++++++--
.../plan/node/write/RelationalInsertTabletNode.java | 7 +++++++
.../org/apache/iotdb/db/storageengine/StorageEngine.java | 2 +-
.../iotdb/db/storageengine/dataregion/DataRegion.java | 5 ++++-
.../src/main/java/org/apache/iotdb/db/utils/MemUtils.java | 4 +++-
.../main/java/org/apache/iotdb/db/utils/ObjectWriter.java | 11 ++++++++---
7 files changed, 36 insertions(+), 9 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
index 6a6568611d3..91c76f0f9b1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/dataregion/DataExecutionVisitor.java
@@ -302,7 +302,7 @@ public class DataExecutionVisitor extends
PlanVisitor<TSStatus, DataRegion> {
return StatusUtils.OK;
} catch (final Exception e) {
LOGGER.error("Error in executing plan node: {}", node, e);
- return new TSStatus(TSStatusCode.WRITE_PROCESS_ERROR.getStatusCode());
+ return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
index 9b583b56be2..26897a126a4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
@@ -48,7 +48,6 @@ import java.nio.ByteBuffer;
import java.util.List;
import java.util.Optional;
-// TODO:[OBJECT] WAL serde
public class ObjectNode extends SearchNode implements WALEntryValue {
private final boolean isEOF;
@@ -59,10 +58,12 @@ public class ObjectNode extends SearchNode implements
WALEntryValue {
private String filePath;
- private int contentLength;
+ private final int contentLength;
private TRegionReplicaSet dataRegionReplicaSet;
+ private boolean isGeneratedByRemoteConsensusLeader;
+
public ObjectNode(boolean isEOF, long offset, byte[] content, String
filePath) {
super(new PlanNodeId(""));
this.isEOF = isEOF;
@@ -276,6 +277,15 @@ public class ObjectNode extends SearchNode implements
WALEntryValue {
return content.length;
}
+ @Override
+ public void markAsGeneratedByRemoteConsensusLeader() {
+ isGeneratedByRemoteConsensusLeader = true;
+ }
+
+ public boolean isGeneratedByRemoteConsensusLeader() {
+ return isGeneratedByRemoteConsensusLeader;
+ }
+
@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitWriteObjectFile(this, context);
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 686715cd8c5..2e113c5c28f 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
@@ -423,6 +423,13 @@ public class RelationalInsertTabletNode extends
InsertTabletNode {
((Binary[]) columns[i])[j] = new Binary(valueBytes);
} else {
((Binary[]) columns[i])[j] = null;
+ if (bitMaps == null) {
+ bitMaps = new BitMap[columns.length];
+ }
+ if (bitMaps[i] == null) {
+ bitMaps[i] = new BitMap(rowCount);
+ }
+ bitMaps[i].mark(j);
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
index a4dc0bc7a2a..20111516d7c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
@@ -1087,7 +1087,7 @@ public class StorageEngine implements IService {
.filter(
path -> {
String name = path.getFileName().toString();
- return name.endsWith(".bin.tmp") ||
name.endsWith(".bin.back");
+ return name.endsWith(".bin.back");
})
.forEach(
path -> {
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 bee359ab33f..7b378f6e58b 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
@@ -3037,7 +3037,10 @@ public class DataRegion implements IDataRegionForQuery {
File objectTmpFile =
FSFactoryProducer.getFSFactory().getFile(objectFileDir,
relativeTmpPathString);
try (ObjectWriter writer = new ObjectWriter(objectTmpFile)) {
- writer.write(objectNode.isEOF(), objectNode.getOffset(),
objectNode.getContent());
+ writer.write(
+ objectNode.isGeneratedByRemoteConsensusLeader(),
+ objectNode.getOffset(),
+ objectNode.getContent());
}
if (objectNode.isEOF()) {
File objectFile =
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
index 843bcdb8937..1de1422b07b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
@@ -108,7 +108,9 @@ public class MemUtils {
if (results == null
|| results[i] == null
|| results[i].code == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- memSize += RamUsageEstimator.sizeOf(column[i].getValues());
+ if (column[i] != null) {
+ memSize += RamUsageEstimator.sizeOf(column[i].getValues());
+ }
}
}
return memSize;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
index 7ef14b6a39c..9ba84df94ec 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectWriter.java
@@ -59,10 +59,15 @@ public class ObjectWriter implements AutoCloseable {
fos = new FileOutputStream(filePath, true);
}
- public void write(boolean isEoF, long offset, byte[] content) throws
IOException {
+ public void write(boolean isGeneratedByConsensus, long offset, byte[]
content)
+ throws IOException {
if (file.length() != offset) {
- throw new IOException(
- "The file length " + file.length() + " is not equal to the offset "
+ offset);
+ if (isGeneratedByConsensus || offset == 0) {
+ fos.getChannel().truncate(offset);
+ } else {
+ throw new IOException(
+ "The file length " + file.length() + " is not equal to the offset
" + offset);
+ }
}
if (file.length() + content.length > config.getMaxObjectSizeInByte()) {
throw new IOException("The file length is larger than
max_object_file_size_in_bytes");