From 899927a93593fc0245b8a3a1599c02020a0f9f90 Mon Sep 17 00:00:00 2001 From: NanaChiyo0721 Date: Wed, 19 Aug 2026 11:36:01 +0800 Subject: [PATCH] Optimize blinear closed file cleanup logic --- .../shiroha/data/BufferedLinearRegionFile.java | 8 +++----- .../shiroha/data/BufferedLinearRegionFileFlusher.java | 11 +---------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFile.java b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFile.java index e1a7f33..b1f9caf 100644 --- a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFile.java +++ b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFile.java @@ -459,6 +459,9 @@ public class BufferedLinearRegionFile implements io.nanachiyo0721.shiroha.data.R return; } + // remove from flusher + this.markClosed(); + IOException failure = null; // final sync so no buffered data is lost; holding syncLock also guarantees no @@ -473,8 +476,6 @@ public class BufferedLinearRegionFile implements io.nanachiyo0721.shiroha.data.R } try { - this.markClosed(); - this.swapFileChannel.close(); } catch (IOException ex) { if (failure == null) failure = ex; @@ -488,9 +489,6 @@ public class BufferedLinearRegionFile implements io.nanachiyo0721.shiroha.data.R else failure.addSuppressed(e); } - // finalize - this.markClosed(); - if (failure != null) { throw failure; } diff --git a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFileFlusher.java b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFileFlusher.java index 082a08c..3f50ca8 100644 --- a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFileFlusher.java +++ b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/data/BufferedLinearRegionFileFlusher.java @@ -62,7 +62,6 @@ public class BufferedLinearRegionFileFlusher implements Runnable { copied = this.inManagement.toArray(new BufferedLinearRegionFile[0]); } - final List toRemove = new ObjectArrayList<>(); for (BufferedLinearRegionFile file : copied) { // try acquiring the read lock if (!file.softReadLock()) { @@ -80,8 +79,7 @@ public class BufferedLinearRegionFileFlusher implements Runnable { } if (closed) { - // add to pending remove list so that we could clean the closed file correctly - toRemove.add(file); + // closed already, should be removed soon continue; } @@ -109,13 +107,6 @@ public class BufferedLinearRegionFileFlusher implements Runnable { }); } } - - synchronized (this) { - // clean closed files - for (BufferedLinearRegionFile file : toRemove) { - this.inManagement.remove(file); - } - } } public void removeFile(BufferedLinearRegionFile fileToRemove) {