HDFS-7615. Remove longReadLock. Contributed by Kihwal Lee.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/2408f313 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/2408f313 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/2408f313 Branch: refs/heads/HDFS-EC Commit: 2408f313674e1c8bfc118fabcaad6fb89a275f38 Parents: 30c4c6a Author: Kihwal Lee <kih...@apache.org> Authored: Thu Jan 15 14:58:52 2015 -0600 Committer: Zhe Zhang <z...@apache.org> Committed: Tue Jan 20 09:43:10 2015 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../hdfs/server/namenode/FSNamesystem.java | 34 +------------------- .../hdfs/server/namenode/FSNamesystemLock.java | 22 ------------- .../org/apache/hadoop/hdfs/util/RwLock.java | 9 ------ 4 files changed, 3 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/2408f313/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index c3d32b8..823b3d1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -520,6 +520,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 http://git-wip-us.apache.org/repos/asf/hadoop/blob/2408f313/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java ---------------------------------------------------------------------- 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 e7bf8e9..9d2fe6b 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 @@ -1465,47 +1465,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() { @@ -7138,11 +7111,6 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, } @VisibleForTesting - public ReentrantLock getLongReadLockForTests() { - return fsLock.longReadLock; - } - - @VisibleForTesting public ReentrantLock getCpLockForTests() { return cpLock; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/2408f313/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java ---------------------------------------------------------------------- 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 f031284..7e820d8 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(); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/2408f313/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java ---------------------------------------------------------------------- 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 2792460..e36f0f7 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();