This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch delete_object_file in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3cfcd3ce9779b0cc380d02f6a17bb008965b1799 Author: HTHou <[email protected]> AuthorDate: Tue Dec 16 16:40:28 2025 +0800 remove empty object dir --- .../iotdb/db/storageengine/rescon/disk/TierManager.java | 11 +++++++++++ .../java/org/apache/iotdb/db/utils/ObjectTypeUtils.java | 13 ++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) 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 a673e44dff9..3aff31a9631 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 @@ -39,6 +39,7 @@ import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.FileStore; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; @@ -174,6 +175,16 @@ public class TierManager { } catch (DiskSpaceInsufficientException e) { logger.error("All disks of tier {} are full.", tierLevel, e); } + // try to remove empty objectDirs + for (String dir : objectDirs) { + File dirFile = FSFactoryProducer.getFSFactory().getFile(dir); + if (dirFile.isDirectory() && Objects.requireNonNull(dirFile.list()).length == 0) { + try { + Files.delete(dirFile.toPath()); + } catch (IOException ignore) { + } + } + } } tierDiskTotalSpace = getTierDiskSpace(DiskSpaceType.TOTAL); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectTypeUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectTypeUtils.java index f09d4472cd3..993cbec28f5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectTypeUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ObjectTypeUtils.java @@ -56,6 +56,7 @@ import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Optional; public class ObjectTypeUtils { @@ -312,8 +313,18 @@ public class ObjectTypeUtils { logger.error("Failed to remove object file {}", file.getAbsolutePath(), e); } } - if (file.getParentFile().exists()) { + deleteEmptyParentDir(file); + } + private static void deleteEmptyParentDir(File file) { + File dir = file.getParentFile(); + if (dir.isDirectory() && Objects.requireNonNull(dir.list()).length == 0) { + try { + Files.deleteIfExists(dir.toPath()); + deleteEmptyParentDir(dir); + } catch (IOException e) { + logger.error("Failed to remove empty object dir {}", dir.getAbsolutePath(), e); + } } }
