You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/01/18 04:31:07 UTC
[iotdb] 01/02: Fix file handler resource leak in FileIndex
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 <ja...@gmail.com>
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);