Repository: hbase
Updated Branches:
  refs/heads/master 0cb2ab6a7 -> f4c55b877


HBASE-11834 TestHRegionBusyWait.testParallelAppendWithMemStoreFlush fails 
sporadically


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

Branch: refs/heads/master
Commit: f4c55b877c1da62884873d5db8dadca569e50f96
Parents: 0cb2ab6
Author: stack <st...@apache.org>
Authored: Wed Aug 27 08:21:38 2014 -0700
Committer: stack <st...@apache.org>
Committed: Wed Aug 27 08:21:38 2014 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/regionserver/HRegion.java      | 46 ++++++++++----------
 .../hadoop/hbase/regionserver/TestHRegion.java  |  7 +--
 2 files changed, 27 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/f4c55b87/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 73b7957..cc78751 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
@@ -501,12 +501,10 @@ public class HRegion implements HeapSize { // , Writable{
   private long blockingMemStoreSize;
   final long threadWakeFrequency;
   // Used to guard closes
-  final ReentrantReadWriteLock lock =
-    new ReentrantReadWriteLock();
+  final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
   // Stop updates lock
-  private final ReentrantReadWriteLock updatesLock =
-    new ReentrantReadWriteLock();
+  private final ReentrantReadWriteLock updatesLock = new 
ReentrantReadWriteLock();
   private boolean splitRequest;
   private byte[] explicitSplitPoint = null;
 
@@ -1751,26 +1749,22 @@ public class HRegion implements HeapSize { // , 
Writable{
           // sure just beyond the last appended region edit (useful as a 
marker when bulk loading,
           // etc.)
           // wal can be null replaying edits.
-          try {
-            if (wal != null) {
-              w = mvcc.beginMemstoreInsert();
-              long flushSeqId = getNextSequenceId(wal);
-              FlushResult flushResult = new FlushResult(
-                  FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, flushSeqId, 
"Nothing to flush");
-              w.setWriteNumber(flushSeqId);
-              mvcc.waitForPreviousTransactionsComplete(w);
-              w = null;
-              return flushResult;
-            } else {
-              return new 
FlushResult(FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY,
-                  "Nothing to flush");
-            }
-
-          } finally {
-            this.updatesLock.writeLock().unlock();
+          if (wal != null) {
+            w = mvcc.beginMemstoreInsert();
+            long flushSeqId = getNextSequenceId(wal);
+            FlushResult flushResult = new FlushResult(
+              FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, flushSeqId, 
"Nothing to flush");
+            w.setWriteNumber(flushSeqId);
+            mvcc.waitForPreviousTransactionsComplete(w);
+            w = null;
+            return flushResult;
+          } else {
+            return new 
FlushResult(FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY,
+              "Nothing to flush");
           }
         }
       } finally {
+        this.updatesLock.writeLock().unlock();
         if (w != null) {
           mvcc.advanceMemstore(w);
         }
@@ -3659,11 +3653,11 @@ public class HRegion implements HeapSize { // , 
Writable{
           rowLockContext = existingContext;
           break;
         } else {
-          // Row is already locked by some other thread, give up or wait for it
           if (!waitForLock) {
             return null;
           }
           try {
+            // Row is already locked by some other thread, give up or wait for 
it
             if (!existingContext.latch.await(this.rowLockWaitDuration, 
TimeUnit.MILLISECONDS)) {
               throw new IOException("Timed out waiting for lock for row: " + 
rowKey);
             }
@@ -5285,7 +5279,6 @@ public class HRegion implements HeapSize { // , Writable{
               get.addColumn(family.getKey(), CellUtil.cloneQualifier(cell));
             }
             List<Cell> results = get(get, false);
-
             // Iterate the input columns and update existing values if they 
were
             // found, otherwise add new column initialized to the append value
 
@@ -6325,6 +6318,13 @@ public class HRegion implements HeapSize { // , Writable{
       return new RowLock(this);
     }
 
+    @Override
+    public String toString() {
+      Thread t = this.thread;
+      return "Thread=" + (t == null? "null": t.getName()) + ", row=" + 
this.row +
+        ", lockCount=" + this.lockCount;
+    }
+
     void releaseLock() {
       if (!ownedByCurrentThread()) {
         throw new IllegalArgumentException("Lock held by thread: " + thread

http://git-wip-us.apache.org/repos/asf/hbase/blob/f4c55b87/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
index 9fa430f..2d482b1 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
@@ -77,6 +77,7 @@ import org.apache.hadoop.hbase.HBaseTestCase;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.RegionTooBusyException;
 import org.apache.hadoop.hbase.HConstants.OperationStatusCode;
 import org.apache.hadoop.hbase.HDFSBlocksDistribution;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -4210,7 +4211,7 @@ public class TestHRegion {
         try {
           region.increment(inc);
         } catch (IOException e) {
-          e.printStackTrace();
+          LOG.info("Count=" + count + ", " + e);
           break;
         }
       }
@@ -4297,7 +4298,7 @@ public class TestHRegion {
         try {
           region.append(app);
         } catch (IOException e) {
-          e.printStackTrace();
+          LOG.info("Count=" + count + ", max=" + appendCounter + ", " + e);
           break;
         }
       }
@@ -4327,7 +4328,7 @@ public class TestHRegion {
       }
     };
 
-    // after all append finished, the value will append to threadNum *
+    // After all append finished, the value will append to threadNum *
     // appendCounter Appender.CHAR
     int threadNum = 20;
     int appendCounter = 100;

Reply via email to