You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2011/07/07 23:39:14 UTC

svn commit: r1144060 - in /hbase/branches/0.90: CHANGES.txt src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java

Author: tedyu
Date: Thu Jul  7 21:39:13 2011
New Revision: 1144060

URL: http://svn.apache.org/viewvc?rev=1144060&view=rev
Log:
HBASE-4077  Deadlock if WrongRegionException is thrown from getLock in HRegion.delete

Modified:
    hbase/branches/0.90/CHANGES.txt
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java

Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1144060&r1=1144059&r2=1144060&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Thu Jul  7 21:39:13 2011
@@ -63,6 +63,8 @@ Release 0.90.4 - Unreleased
                AssignmentManager.servers again (Jieshan Bean)
    HBASE-4074  When a RS has hostname with uppercase letter, there are two RS
                entries in master (Weihua Jiang via Ted Yu)
+   HBASE-4077  Deadlock if WrongRegionException is thrown from getLock in HRegion.delete
+               (Adam Warrington via Ted Yu)
 
   IMPROVEMENT
    HBASE-3882  hbase-config.sh needs to be updated so it can auto-detects the

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1144060&r1=1144059&r2=1144060&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java Thu Jul  7 21:39:13 2011
@@ -1169,12 +1169,14 @@ public class HRegion implements HeapSize
       // If we did not pass an existing row lock, obtain a new one
       lid = getLock(lockid, row, true);
 
-      // All edits for the given row (across all column families) must happen atomically.
-      prepareDelete(delete);
-      delete(delete.getFamilyMap(), writeToWAL);
-
+      try {
+        // All edits for the given row (across all column families) must happen atomically.
+        prepareDelete(delete);
+        delete(delete.getFamilyMap(), writeToWAL);
+      } finally {
+        if(lockid == null) releaseRowLock(lid);
+      }
     } finally {
-      if(lockid == null) releaseRowLock(lid);
       closeRegionOperation();
     }
   }