From 075e3a1e9ed13e561035e211c4492972d9ddd7d5 Mon Sep 17 00:00:00 2001 From: HTHou Date: Mon, 29 Dec 2025 18:39:22 +0800 Subject: [PATCH] Fix insert object segment error when use multiple dirs --- .../storageengine/dataregion/DataRegion.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 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 82f5b7a0a71a..7d7fb8b9180f 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 @@ -3600,9 +3600,21 @@ public void writeObject(ObjectNode objectNode) throws Exception { writeLock("writeObject"); try { String relativeTmpPathString = objectNode.getFilePathString() + ".tmp"; - String objectFileDir = TierManager.getInstance().getNextFolderForObjectFile(); - File objectTmpFile = - FSFactoryProducer.getFSFactory().getFile(objectFileDir, relativeTmpPathString); + String objectFileDir = null; + File objectTmpFile = null; + for (String objectDir : TierManager.getInstance().getAllObjectFileFolders()) { + File tmpFile = FSFactoryProducer.getFSFactory().getFile(objectDir, relativeTmpPathString); + if (tmpFile.exists()) { + objectFileDir = objectDir; + objectTmpFile = tmpFile; + break; + } + } + if (objectTmpFile == null) { + objectFileDir = TierManager.getInstance().getNextFolderForObjectFile(); + objectTmpFile = + FSFactoryProducer.getFSFactory().getFile(objectFileDir, relativeTmpPathString); + } try (ObjectWriter writer = new ObjectWriter(objectTmpFile)) { writer.write( objectNode.isGeneratedByRemoteConsensusLeader(),