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;