diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index c3d32b88ec..823b3d1660 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 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 e7bf8e9a15..9d2fe6bf79 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 void readLock() { 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() { @@ -7137,11 +7110,6 @@ public ReentrantReadWriteLock getFsLockForTests() { 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 f0312849b7..7e820d8502 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 @@ public Lock writeLock() { 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 2792460d53..e36f0f7e08 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();