You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/11/23 09:02:59 UTC

[incubator-iotdb] branch fix_issue_319 created (now f22279a)

This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a change to branch fix_issue_319
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at f22279a  get lock in FileReaderManager outside of the synchronized block

This branch includes the following new commits:

     new f22279a  get lock in FileReaderManager outside of the synchronized block

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 01/01: get lock in FileReaderManager outside of the synchronized block

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a commit to branch fix_issue_319
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit f22279ac633fa0103f92b14bb223f9182fa3575e
Author: jt2594838 <jt...@163.com>
AuthorDate: Sat Nov 23 17:02:41 2019 +0800

    get lock in FileReaderManager outside of the synchronized block
---
 .../iotdb/db/query/control/FileReaderManager.java  | 26 +++++++++++++---------
 1 file changed, 15 insertions(+), 11 deletions(-)

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 c87c059..c961a64 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
@@ -164,25 +164,29 @@ public class FileReaderManager implements IService {
    * 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.
    */
-  synchronized void increaseFileReaderReference(TsFileResource tsFile, boolean isClosed) {
+  void increaseFileReaderReference(TsFileResource tsFile, boolean isClosed) {
     // TODO : this should be called in get()
-    if (!isClosed) {
-      unclosedReferenceMap.computeIfAbsent(tsFile, k -> new AtomicInteger()).getAndIncrement();
-    } else {
-      closedReferenceMap.computeIfAbsent(tsFile, k -> new AtomicInteger()).getAndIncrement();
-    }
     tsFile.getWriteQueryLock().readLock().lock();
+    synchronized (this) {
+      if (!isClosed) {
+        unclosedReferenceMap.computeIfAbsent(tsFile, k -> new AtomicInteger()).getAndIncrement();
+      } else {
+        closedReferenceMap.computeIfAbsent(tsFile, k -> new AtomicInteger()).getAndIncrement();
+      }
+    }
   }
 
   /**
    * 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.
    */
-  synchronized void decreaseFileReaderReference(TsFileResource tsFile, boolean isClosed) {
-    if (!isClosed && unclosedReferenceMap.containsKey(tsFile)) {
-      unclosedReferenceMap.get(tsFile).getAndDecrement();
-    } else if (closedReferenceMap.containsKey(tsFile)){
-      closedReferenceMap.get(tsFile).getAndDecrement();
+  void decreaseFileReaderReference(TsFileResource tsFile, boolean isClosed) {
+    synchronized (this) {
+      if (!isClosed && unclosedReferenceMap.containsKey(tsFile)) {
+        unclosedReferenceMap.get(tsFile).getAndDecrement();
+      } else if (closedReferenceMap.containsKey(tsFile)){
+        closedReferenceMap.get(tsFile).getAndDecrement();
+      }
     }
     tsFile.getWriteQueryLock().readLock().unlock();
   }