This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TooManyOpenFiles in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit f8a42a244c1ba5accea520ec4e50ba8aceaedde5 Author: JackieTien97 <[email protected]> AuthorDate: Tue Jan 18 12:29:41 2022 +0800 Fix file handler resource leak in FileIndex --- .../apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java | 3 +-- .../java/org/apache/iotdb/db/query/control/FileReaderManager.java | 4 ++-- .../main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java index f7623e5..e54d7bb 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/timeindex/FileTimeIndex.java @@ -81,8 +81,7 @@ public class FileTimeIndex implements ITimeIndex { @Override public Set<String> getDevices(String tsFilePath) { - try { - TsFileSequenceReader fileReader = FileReaderManager.getInstance().get(tsFilePath, true); + try (TsFileSequenceReader fileReader = new TsFileSequenceReader(tsFilePath)) { return new HashSet<>(fileReader.getAllDevices()); } catch (IOException e) { logger.error("Can't read file {} from disk ", tsFilePath, e); diff --git a/server/src/main/java/org/apache/iotdb/db/query/control/FileReaderManager.java b/server/src/main/java/org/apache/iotdb/db/query/control/FileReaderManager.java index 0046bf0..3cd2ee7 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/control/FileReaderManager.java +++ b/server/src/main/java/org/apache/iotdb/db/query/control/FileReaderManager.java @@ -140,7 +140,7 @@ public class FileReaderManager { * Increase the reference count of the reader specified by filePath. Only when the reference count * of a reader equals zero, the reader can be closed and removed. */ - void increaseFileReaderReference(TsFileResource tsFile, boolean isClosed) { + public void increaseFileReaderReference(TsFileResource tsFile, boolean isClosed) { tsFile.readLock(); synchronized (this) { if (!isClosed) { @@ -159,7 +159,7 @@ public class FileReaderManager { * Decrease the reference count of the reader specified by filePath. This method is latch-free. * Only when the reference count of a reader equals zero, the reader can be closed and removed. */ - void decreaseFileReaderReference(TsFileResource tsFile, boolean isClosed) { + public void decreaseFileReaderReference(TsFileResource tsFile, boolean isClosed) { synchronized (this) { if (!isClosed && unclosedReferenceMap.containsKey(tsFile.getTsFilePath())) { if (unclosedReferenceMap.get(tsFile.getTsFilePath()).decrementAndGet() == 0) { diff --git a/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java b/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java index 2d5a21a..4d9b411 100644 --- a/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java +++ b/server/src/main/java/org/apache/iotdb/db/rescon/TsFileResourceManager.java @@ -95,6 +95,7 @@ public class TsFileResourceManager { throw new RuntimeException("Can't degrade any more"); } long memoryReduce = tsFileResource.degradeTimeIndex(); + logger.info("Degrade tsfile resource {}", tsFileResource.getTsFilePath()); releaseTimeIndexMemCost(memoryReduce); // add the polled tsFileResource to the priority queue sealedTsFileResources.add(tsFileResource);
