You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2010/05/28 21:28:02 UTC

svn commit: r949269 - in /hbase/branches/0.20: CHANGES.txt src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java

Author: apurtell
Date: Fri May 28 19:28:02 2010
New Revision: 949269

URL: http://svn.apache.org/viewvc?rev=949269&view=rev
Log:
HBASE-2589 TestHRegion.testWritesWhileScanning flaky

Modified:
    hbase/branches/0.20/CHANGES.txt
    hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java

Modified: hbase/branches/0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/CHANGES.txt?rev=949269&r1=949268&r2=949269&view=diff
==============================================================================
--- hbase/branches/0.20/CHANGES.txt (original)
+++ hbase/branches/0.20/CHANGES.txt Fri May 28 19:28:02 2010
@@ -18,6 +18,7 @@ Release 0.20.5 - Wed May 26 00:15:56 PDT
    HBASE-2610  ValueFilter copy pasted javadoc from QualifierFilter
    HBASE-2167  Load balancer falls into pathological state if one server under
                average - slop; endless churn
+   HBASE-2589  TestHRegion.testWritesWhileScanning flaky
 
   IMPROVEMENTS
    HBASE-2567  [stargate] minimize differences between 0.20 branch and trunk

Modified: hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=949269&r1=949268&r2=949269&view=diff
==============================================================================
--- hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java (original)
+++ hbase/branches/0.20/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java Fri May 28 19:28:02 2010
@@ -2076,6 +2076,8 @@ public class TestHRegion extends HBaseTe
     initHRegion(tableName, method, families);
     PutThread putThread = new PutThread(numRows, families, qualifiers);
     putThread.start();
+    putThread.waitForFirstPut();
+
     FlushThread flushThread = new FlushThread();
     flushThread.start();
 
@@ -2126,6 +2128,7 @@ public class TestHRegion extends HBaseTe
     private int numRows;
     private byte[][] families;
     private byte[][] qualifiers;
+    private volatile int numPutsFinished = 0;
 
     private PutThread(int numRows, byte[][] families,
       byte[][] qualifiers) {
@@ -2134,6 +2137,17 @@ public class TestHRegion extends HBaseTe
       this.qualifiers = qualifiers;
     }
 
+    /**
+     * Block until this thread has put at least one row.
+     */
+    public void waitForFirstPut() throws InterruptedException {
+      // wait until put thread actually puts some data
+      while (numPutsFinished == 0) {
+        checkNoError();
+        Thread.sleep(50);
+      }
+    }
+
     public void done() {
       done.set(true);
     }
@@ -2147,7 +2161,6 @@ public class TestHRegion extends HBaseTe
     @Override
     public void run() {
       done.set(false);
-      int val = 0;
       while (!done.get()) {
         try {
           for (int r = 0; r < numRows; r++) {
@@ -2155,18 +2168,19 @@ public class TestHRegion extends HBaseTe
             Put put = new Put(row);
             for (byte[] family : families) {
               for (byte[] qualifier : qualifiers) {
-                put.add(family, qualifier, (long) val,
-                    Bytes.toBytes(val));
+                put.add(family, qualifier, (long) numPutsFinished,
+                  Bytes.toBytes(numPutsFinished));
               }
             }
 //            System.out.println("Putting of kvsetsize=" + put.size());
             region.put(put);
-            if (val > 0 && val % 47 == 0) {
-              System.out.println("put iteration = " + val);
-              Delete delete = new Delete(row, (long)val-30, null);
+            numPutsFinished++;
+            if (numPutsFinished > 0 && numPutsFinished % 47 == 0) {
+              System.out.println("put iteration = " + numPutsFinished);
+              Delete delete = new Delete(row, (long)numPutsFinished-30, null);
               region.delete(delete, null, true);
             }
-            val++;
+            numPutsFinished++;
           }
         } catch (IOException e) {
           LOG.error("error while putting records", e);
@@ -2210,6 +2224,8 @@ public class TestHRegion extends HBaseTe
     initHRegion(tableName, method, families);
     PutThread putThread = new PutThread(numRows, families, qualifiers);
     putThread.start();
+    putThread.waitForFirstPut();
+
     FlushThread flushThread = new FlushThread();
     flushThread.start();