소스 검색

HDFS-9467. Fix data race accessing writeLockHeldTimeStamp in FSNamesystem. Contributed by Mingliang Liu.

(cherry picked from commit e556c35b0596700f9ec9d0a51cf5027259d531b5)
(cherry picked from commit 288cf8437b7e03f071e95eb05e83a26e58fff26b)
Jing Zhao 9 년 전
부모
커밋
8aa18534d9
1개의 변경된 파일5개의 추가작업 그리고 6개의 파일을 삭제
  1. 5 6
      hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java

+ 5 - 6
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java

@@ -1503,14 +1503,13 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
   public void writeUnlock() {
     final boolean needReport = fsLock.getWriteHoldCount() == 1 &&
         fsLock.isWriteLockedByCurrentThread();
+    final long writeLockInterval = monotonicNow() - writeLockHeldTimeStamp;
+
     this.fsLock.writeLock().unlock();
 
-    if (needReport) {
-      long writeLockInterval = monotonicNow() - writeLockHeldTimeStamp;
-      if (writeLockInterval >= WRITELOCK_REPORTING_THRESHOLD) {
-        LOG.info("FSNamesystem write lock held for " + writeLockInterval +
-            " ms via\n" + StringUtils.getStackTrace(Thread.currentThread()));
-      }
+    if (needReport && writeLockInterval >= WRITELOCK_REPORTING_THRESHOLD) {
+      LOG.info("FSNamesystem write lock held for " + writeLockInterval +
+          " ms via\n" + StringUtils.getStackTrace(Thread.currentThread()));
     }
   }
   @Override