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 2009/02/26 00:34:51 UTC

svn commit: r747967 - in /hadoop/hbase/branches/0.19: CHANGES.txt src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java

Author: stack
Date: Wed Feb 25 23:34:51 2009
New Revision: 747967

URL: http://svn.apache.org/viewvc?rev=747967&view=rev
Log:
HBASE-1224 Scanner returns values from before startrow

Modified:
    hadoop/hbase/branches/0.19/CHANGES.txt
    hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java
    hadoop/hbase/branches/0.19/src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java

Modified: hadoop/hbase/branches/0.19/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/CHANGES.txt?rev=747967&r1=747966&r2=747967&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19/CHANGES.txt (original)
+++ hadoop/hbase/branches/0.19/CHANGES.txt Wed Feb 25 23:34:51 2009
@@ -10,6 +10,8 @@
    HBASE-1190  TableInputFormatBase with row filters scan too far (Dave
                Latham via Andrew Purtell)
    HBASE-1198  OOME in IPC server does not trigger abort behavior
+   HBASE-1224  Scanner returns values from before startrow
+               (Ben Maurer via Stack)
 
   IMPROVEMENTS
    HBASE-845   HCM.isTableEnabled doesn't really tell if it is, or not

Modified: hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java?rev=747967&r1=747966&r2=747967&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java (original)
+++ hadoop/hbase/branches/0.19/src/java/org/apache/hadoop/hbase/io/HalfMapFileReader.java Wed Feb 25 23:34:51 2009
@@ -21,6 +21,9 @@
 
 import java.io.IOException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -45,6 +48,8 @@
  */
 //TODO should be fixed generic warnings from MapFile methods
 public class HalfMapFileReader extends BloomFilterMapFile.Reader {
+  private static final Log LOG = LogFactory.getLog(HalfMapFileReader.class);
+
   private final boolean top;
   private final HStoreKey midkey;
   private boolean firstNextCall = true;
@@ -146,6 +151,8 @@
       // greater.
       closest = (key.compareTo(this.midkey) < 0)?
         this.midkey: super.getClosest(key, val);
+      // we know that we just went past the midkey
+      firstNextCall = false;
     } else {
       // We're serving bottom of the file.
       if (key.compareTo(this.midkey) < 0) {
@@ -190,7 +197,12 @@
       }
     }
     boolean result = super.next(key, val);
-    if (!top && key.compareTo(midkey) >= 0) {
+    int cmpresult = key.compareTo(midkey);
+
+    if (top && cmpresult < 0) {
+      LOG.error("BUG BUG BUG. HalfMapFileReader wanted to return key out of range. DANGER");
+      throw new IOException("BUG BUG BUG. HalfMapFileReader wanted to return key out of range. DANGER");
+    } else if (!top && cmpresult >= 0) {
       result = false;
     }
     return result;

Modified: hadoop/hbase/branches/0.19/src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.19/src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java?rev=747967&r1=747966&r2=747967&view=diff
==============================================================================
--- hadoop/hbase/branches/0.19/src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java (original)
+++ hadoop/hbase/branches/0.19/src/test/org/apache/hadoop/hbase/regionserver/TestHStoreFile.java Wed Feb 25 23:34:51 2009
@@ -66,7 +66,34 @@
     // ReflectionUtils.printThreadInfo(new PrintWriter(System.out),
     //  "Temporary end-of-test thread dump debugging HADOOP-2040: " + getName());
   }
-  
+
+  /**
+   * Assert we can go to an offset in top file and then start nexting from there.
+   * See hbase-1224.
+   * @throws Exception
+   */
+  @SuppressWarnings("unchecked")
+  public void testNextingAtOffsetinHalfMapFile() throws Exception {
+    Path p = writeMapFile(getName());
+    WritableComparable midkey = getMidkey(p);
+    // Now test reading from the top.
+    HalfMapFileReader top = new HalfMapFileReader(this.fs, p.toString(),
+      this.conf, Reference.Range.top, midkey, null);
+    ImmutableBytesWritable val = new ImmutableBytesWritable();
+    final String startRowPrefix = "zy";
+    HStoreKey key = new HStoreKey(startRowPrefix);
+    WritableComparable closest = top.getClosest(key, val);
+    assertTrue(closest.toString().startsWith(startRowPrefix));
+    int count = 0;
+    for (boolean first = true; top.next(key, val); count++) {
+      if (first) {
+        assertTrue(key.toString().compareTo(startRowPrefix) > 0);
+      }
+      LOG.info(key.toString());
+    }
+    assertTrue(count > 0);
+  }
+
   private Path writeMapFile(final String name)
   throws IOException {
     Path path = new Path(DIR, name);