From 0090157fffdbbdbd82410d886bb9add74ca1a674 Mon Sep 17 00:00:00 2001 From: Kihwal Lee Date: Thu, 15 Jan 2015 16:40:18 -0600 Subject: [PATCH] HDFS-7615. Remove longReadLock. Contributed by Kihwal Lee. (cherry picked from commit 44eed6cbc97649c15177f9b36f6b119cc1900f7a) --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../hdfs/server/namenode/FSNamesystem.java | 34 +------------------ .../server/namenode/FSNamesystemLock.java | 22 ------------ .../org/apache/hadoop/hdfs/util/RwLock.java | 9 ----- 4 files changed, 3 insertions(+), 64 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index d6375cf07a6..51c2c1f7ec7 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -250,6 +250,8 @@ Release 2.7.0 - UNRELEASED HDFS-7454. Reduce memory footprint for AclEntries in NameNode. (Vinayakumar B via wheat9) + HDFS-7615. Remove longReadLock (kihwal) + BUG FIXES HDFS-6741. Improve permission denied message when diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index 67dbeb12fbe..8403f37d872 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -1456,47 +1456,20 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, this.fsLock.readLock().lock(); } @Override - public void longReadLockInterruptibly() throws InterruptedException { - this.fsLock.longReadLock().lockInterruptibly(); - try { - this.fsLock.readLock().lockInterruptibly(); - } catch (InterruptedException ie) { - // In the event we're interrupted while getting the normal FSNS read lock, - // release the long read lock. - this.fsLock.longReadLock().unlock(); - throw ie; - } - } - @Override - public void longReadUnlock() { - this.fsLock.readLock().unlock(); - this.fsLock.longReadLock().unlock(); - } - @Override public void readUnlock() { this.fsLock.readLock().unlock(); } @Override public void writeLock() { - this.fsLock.longReadLock().lock(); this.fsLock.writeLock().lock(); } @Override public void writeLockInterruptibly() throws InterruptedException { - this.fsLock.longReadLock().lockInterruptibly(); - try { - this.fsLock.writeLock().lockInterruptibly(); - } catch (InterruptedException ie) { - // In the event we're interrupted while getting the normal FSNS write - // lock, release the long read lock. - this.fsLock.longReadLock().unlock(); - throw ie; - } + this.fsLock.writeLock().lockInterruptibly(); } @Override public void writeUnlock() { this.fsLock.writeLock().unlock(); - this.fsLock.longReadLock().unlock(); } @Override public boolean hasWriteLock() { @@ -6915,11 +6888,6 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, return fsLock.coarseLock; } - @VisibleForTesting - public ReentrantLock getLongReadLockForTests() { - return fsLock.longReadLock; - } - @VisibleForTesting public ReentrantLock getCpLockForTests() { return cpLock; diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java index f0312849b7b..7e820d8502b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java @@ -34,24 +34,6 @@ class FSNamesystemLock implements ReadWriteLock { @VisibleForTesting protected ReentrantReadWriteLock coarseLock; - /** - * When locking the FSNS for a read that may take a long time, we take this - * lock before taking the regular FSNS read lock. All writers also take this - * lock before taking the FSNS write lock. Regular (short) readers do not - * take this lock at all, instead relying solely on the synchronization of the - * regular FSNS lock. - * - * This scheme ensures that: - * 1) In the case of normal (fast) ops, readers proceed concurrently and - * writers are not starved. - * 2) In the case of long read ops, short reads are allowed to proceed - * concurrently during the duration of the long read. - * - * See HDFS-5064 for more context. - */ - @VisibleForTesting - protected final ReentrantLock longReadLock = new ReentrantLock(true); - FSNamesystemLock(boolean fair) { this.coarseLock = new ReentrantReadWriteLock(fair); } @@ -66,10 +48,6 @@ class FSNamesystemLock implements ReadWriteLock { return coarseLock.writeLock(); } - public Lock longReadLock() { - return longReadLock; - } - public int getReadHoldCount() { return coarseLock.getReadHoldCount(); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java index 2792460d531..e36f0f7e089 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java @@ -22,15 +22,6 @@ public interface RwLock { /** Acquire read lock. */ public void readLock(); - /** - * Acquire the long read lock, unless interrupted while waiting. The long - * read lock should also serve to block all concurrent writers. - **/ - void longReadLockInterruptibly() throws InterruptedException; - - /** Release the long read lock. */ - public void longReadUnlock(); - /** Release read lock. */ public void readUnlock();