HDFS-7615. Remove longReadLock. Contributed by Kihwal Lee.
(cherry picked from commit 44eed6cbc9
)
This commit is contained in:
parent
450561a934
commit
0090157fff
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue