hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From apurt...@apache.org
Subject [6/6] hbase git commit: HBASE-18487 Minor fixes in row lock implementation
Date Tue, 01 Aug 2017 19:41:14 GMT
HBASE-18487 Minor fixes in row lock implementation

Signed-off-by: Andrew Purtell <apurtell@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f67dae90
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f67dae90
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f67dae90

Branch: refs/heads/branch-2
Commit: f67dae90f952e84681a07a612b8005a2d688cae5
Parents: 7bdabed
Author: James Taylor <jamestaylor@apache.org>
Authored: Mon Jul 31 12:00:04 2017 -0700
Committer: Andrew Purtell <apurtell@apache.org>
Committed: Tue Aug 1 12:16:43 2017 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/regionserver/HRegion.java     | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/f67dae90/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 2163ac0..31357ad 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -5404,6 +5404,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
       traceScope.getSpan().addTimelineAnnotation("Getting a " + (readLock?"readLock":"writeLock"));
     }
 
+    boolean success = false;
     try {
       // Keep trying until we have a lock or error out.
       // TODO: do we need to add a time component here?
@@ -5434,8 +5435,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
           traceScope.getSpan().addTimelineAnnotation("Failed to get row lock");
         }
         result = null;
-        // Clean up the counts just in case this was the thing keeping the context alive.
-        rowLockContext.cleanUp();
         String message = "Timed out waiting for lock for row: " + rowKey + " in region "
             + getRegionInfo().getEncodedName();
         if (reachDeadlineFirst) {
@@ -5446,6 +5445,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
         }
       }
       rowLockContext.setThreadName(Thread.currentThread().getName());
+      success = true;
       return result;
     } catch (InterruptedException ie) {
       LOG.warn("Thread interrupted waiting for lock on row: " + rowKey);
@@ -5457,6 +5457,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
       Thread.currentThread().interrupt();
       throw iie;
     } finally {
+      // Clean up the counts just in case this was the thing keeping the context alive.
+      if (!success && rowLockContext != null) {
+        rowLockContext.cleanUp();
+      }
       if (traceScope != null) {
         traceScope.close();
       }
@@ -5519,7 +5523,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
       long c = count.decrementAndGet();
       if (c <= 0) {
         synchronized (lock) {
-          if (count.get() <= 0){
+          if (count.get() <= 0 && usable.get()){ // Don't attempt to remove row
if already removed
             usable.set(false);
             RowLockContext removed = lockedRows.remove(row);
             assert removed == this: "we should never remove a different context";


Mime
View raw message