You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2010/05/24 18:36:08 UTC

svn commit: r947707 - in /hbase/trunk: CHANGES.txt src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java

Author: stack
Date: Mon May 24 16:36:08 2010
New Revision: 947707

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

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

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=947707&r1=947706&r2=947707&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon May 24 16:36:08 2010
@@ -353,6 +353,8 @@ Release 0.21.0 - Unreleased
    HBASE-2519  StoreFileScanner.seek swallows IOEs (Todd Lipcon via Stack)
    HBASE-2516  Ugly IOE when region is being closed; rather, should NSRE
                (Daniel Ploeg via Stack)
+   HBASE-2589  TestHRegion.testWritesWhileScanning flaky on trunk
+               (Todd Lipcon via Stack)
 
   IMPROVEMENTS
    HBASE-1760  Cleanup TODOs in HTable

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=947707&r1=947706&r2=947707&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java Mon May 24 16:36:08 2010
@@ -2134,9 +2134,11 @@ 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();
-
+    
     Scan scan = new Scan(Bytes.toBytes("row0"), Bytes.toBytes("row1"));
 //    scan.setFilter(new RowFilter(CompareFilter.CompareOp.EQUAL,
 //      new BinaryComparator(Bytes.toBytes("row0"))));
@@ -2183,6 +2185,8 @@ public class TestHRegion extends HBaseTe
 
   protected class PutThread extends Thread {
     private volatile boolean done;
+    private volatile int numPutsFinished = 0;
+    
     private Throwable error = null;
     private int numRows;
     private byte[][] families;
@@ -2195,6 +2199,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 = true;
       synchronized (this) {
@@ -2211,7 +2226,6 @@ public class TestHRegion extends HBaseTe
     @Override
     public void run() {
       done = false;
-      int val = 0;
       while (!done) {
         try {
           for (int r = 0; r < numRows; r++) {
@@ -2219,18 +2233,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);
@@ -2274,6 +2289,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();