You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2010/01/09 01:25:57 UTC
svn commit: r897355 - in /hadoop/hbase/branches/0.20: CHANGES.txt
src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
Author: jdcryans
Date: Sat Jan 9 00:25:57 2010
New Revision: 897355
URL: http://svn.apache.org/viewvc?rev=897355&view=rev
Log:
HBASE-2097 Deadlock between HRegion.put and HRegion.close (Stack via JD)
Modified:
hadoop/hbase/branches/0.20/CHANGES.txt
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
Modified: hadoop/hbase/branches/0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/CHANGES.txt?rev=897355&r1=897354&r2=897355&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.20/CHANGES.txt Sat Jan 9 00:25:57 2010
@@ -41,6 +41,7 @@
HBASE-2035 Binary values are formatted wrong in shel
HBASE-2094 hbase-2037 breaks mapreduce jobs going from 0.20.2 to 0.20.3
HBASE-2093 [stargate] RowSpec parse bug (Andrew Purtell via JD)
+ HBASE-2097 Deadlock between HRegion.put and HRegion.close (Stack via JD)
IMPROVEMENTS
HBASE-1970 Export does one version only; make it configurable how many
Modified: hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=897355&r1=897354&r2=897355&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Sat Jan 9 00:25:57 2010
@@ -1133,9 +1133,9 @@
throws IOException {
checkReadOnly();
checkResources();
- splitsAndClosesLock.readLock().lock();
- newScannerLock.writeLock().lock();
Integer lid = null;
+ newScannerLock.writeLock().lock();
+ splitsAndClosesLock.readLock().lock();
try {
byte [] row = delete.getRow();
// If we did not pass an existing row lock, obtain a new one
@@ -1162,8 +1162,8 @@
}
} finally {
if(lockid == null) releaseRowLock(lid);
- newScannerLock.writeLock().unlock();
splitsAndClosesLock.readLock().unlock();
+ newScannerLock.writeLock().unlock();
}
}
@@ -1268,8 +1268,8 @@
// read lock, resources may run out. For now, the thought is that this
// will be extremely rare; we'll deal with it when it happens.
checkResources();
- splitsAndClosesLock.readLock().lock();
newScannerLock.writeLock().lock();
+ splitsAndClosesLock.readLock().lock();
try {
// We obtain a per-row lock, so other clients will block while one client
// performs an update. The read lock is released by the client calling
@@ -1294,8 +1294,8 @@
if(lockid == null) releaseRowLock(lid);
}
} finally {
- newScannerLock.writeLock().unlock();
splitsAndClosesLock.readLock().unlock();
+ newScannerLock.writeLock().unlock();
}
}
Modified: hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java?rev=897355&r1=897354&r2=897355&view=diff
==============================================================================
--- hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java (original)
+++ hadoop/hbase/branches/0.20/src/java/org/apache/hadoop/hbase/regionserver/MemStoreScanner.java Sat Jan 9 00:25:57 2010
@@ -87,7 +87,6 @@
this.kvsetIterator = kvsetRef.iterator();
this.snapshotIterator = snapshotRef.iterator();
this.nextKV = currentKvsetKV = currentSnapshotKV = null;
- LOG.debug("New scanner created " + System.identityHashCode(this));
}
private void fill() {
@@ -154,7 +153,6 @@
}
public synchronized void close() {
- LOG.debug("Close requested " + System.identityHashCode(this));
this.kvsetRef = EMPTY_SET;
this.snapshotRef = EMPTY_SET;
this.kvsetIterator = EMPTY_ITERATOR;