Repository: hbase
Updated Branches:
  refs/heads/0.98 3ba9b9a4f -> 5467da9fb


HBASE-13945 - Prefix_Tree seekBefore() does not work correctly (Ram)


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

Branch: refs/heads/0.98
Commit: 5467da9fb96b6ba49af60312426aee8fb8efc93b
Parents: 3ba9b9a
Author: ramkrishna <[email protected]>
Authored: Wed Jun 24 09:19:30 2015 +0530
Committer: ramkrishna <[email protected]>
Committed: Wed Jun 24 09:19:30 2015 +0530

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/KeyValueUtil.java   |  2 -
 .../io/encoding/BufferedDataBlockEncoder.java   |  2 +
 .../hbase/io/encoding/DataBlockEncoder.java     |  3 +-
 .../io/encoding/TestDataBlockEncoders.java      |  1 -
 .../hadoop/hbase/io/hfile/TestSeekTo.java       | 68 ++++++++++----------
 5 files changed, 37 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/5467da9f/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
----------------------------------------------------------------------
diff --git 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
index 015ffc2..d35b12e 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
@@ -82,7 +82,6 @@ public class KeyValueUtil {
     byte[] bytes = new byte[keyLength(cell)];
     appendKeyToByteArrayWithoutValue(cell, bytes, 0);
     ByteBuffer buffer = ByteBuffer.wrap(bytes);
-    buffer.position(buffer.limit());//make it look as if each field were 
appended
     return buffer;
   }
 
@@ -126,7 +125,6 @@ public class KeyValueUtil {
     byte[] bytes = new byte[length(cell)];
     appendToByteArray(cell, bytes, 0);
     ByteBuffer buffer = ByteBuffer.wrap(bytes);
-    buffer.position(buffer.limit());//make it look as if each field were 
appended
     return buffer;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/5467da9f/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
----------------------------------------------------------------------
diff --git 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
index 3958c7c..4d1cb91 100644
--- 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
+++ 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
@@ -210,6 +210,7 @@ abstract class BufferedDataBlockEncoder implements 
DataBlockEncoder {
     public ByteBuffer getKeyDeepCopy() {
       ByteBuffer keyBuffer = ByteBuffer.allocate(current.keyLength);
       keyBuffer.put(current.keyBuffer, 0, current.keyLength);
+      keyBuffer.rewind();
       return keyBuffer;
     }
 
@@ -244,6 +245,7 @@ abstract class BufferedDataBlockEncoder implements 
DataBlockEncoder {
           kvBuffer.put(current.tagsBuffer, 0, current.tagsLength);
         }
       }
+      kvBuffer.rewind();
       return kvBuffer;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/5467da9f/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
----------------------------------------------------------------------
diff --git 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
index 0739f4c..aa859e4 100644
--- 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
+++ 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
@@ -139,7 +139,8 @@ public interface DataBlockEncoder {
      */
     ByteBuffer getValueShallowCopy();
 
-    /** @return key value at current position with position set to limit */
+    // TODO : To be removed - Used only in test cases.
+    /** @return key value buffer with the position set to the beginning*/
     ByteBuffer getKeyValueBuffer();
 
     /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/5467da9f/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
index 7e3d415..748352e 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
@@ -367,7 +367,6 @@ public class TestDataBlockEncoders {
       ByteBuffer actualKeyValue = seeker.getKeyValueBuffer();
       ByteBuffer actualKey = seeker.getKeyDeepCopy();
       ByteBuffer actualValue = seeker.getValueShallowCopy();
-
       if (expectedKeyValue != null) {
         assertEquals(expectedKeyValue, actualKeyValue);
       } else {

http://git-wip-us.apache.org/repos/asf/hbase/blob/5467da9f/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
index 9149b2a..759f5b7 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
@@ -61,10 +61,7 @@ public class TestSeekTo {
   public static Collection<Object[]> parameters() {
     List<Object[]> paramList = new ArrayList<Object[]>();
     for (DataBlockEncoding encoding : DataBlockEncoding.values()) {
-      // Remove after HBASE-13939
-      if (encoding != DataBlockEncoding.PREFIX_TREE) {
-        paramList.add(new Object[] { encoding });
-      }
+      paramList.add(new Object[] { encoding });
     }
     return paramList;
   }
@@ -125,10 +122,10 @@ public class TestSeekTo {
         .withDataBlockEncoding(encoding)
         .withIncludesTags(true).build();
     HFile.Writer writer = 
HFile.getWriterFactoryNoCache(conf).withOutputStream(fout)
-        .withFileContext(context)
-        // NOTE: This test is dependent on this deprecated nonstandard
-        // comparator
-        .withComparator(KeyValue.RAW_COMPARATOR).create();
+          .withFileContext(context)
+          // NOTE: This test is dependent on this deprecated nonstandard
+          // comparator
+          .withComparator(KeyValue.COMPARATOR).create();
     // 4 bytes * 3 * 2 for each key/value +
     // 3 for keys, 15 for values = 42 (woot)
     writer.append(toKV("c", tagUsage));
@@ -156,27 +153,26 @@ public class TestSeekTo {
     HFile.Reader reader = HFile.createReader(fs, p, new CacheConfig(conf), 
conf);
     reader.loadFileInfo();
     HFileScanner scanner = reader.getScanner(false, true);
-    assertEquals(false, scanner.seekBefore(toKV("a", tagUsage).getKey()));
+    assertFalse(scanner.seekBefore(toKV("a", tagUsage).getKey()));
 
-    assertEquals(false, scanner.seekBefore(toKV("c", tagUsage).getKey()));
+    assertFalse(scanner.seekBefore(toKV("c", tagUsage).getKey()));
 
-    assertEquals(true, scanner.seekBefore(toKV("d", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("d", tagUsage).getKey()));
     assertEquals("c", toRowStr(scanner.getKeyValue()));
 
-    assertEquals(true, scanner.seekBefore(toKV("e", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("e", tagUsage).getKey()));
     assertEquals("c", toRowStr(scanner.getKeyValue()));
 
-    assertEquals(true, scanner.seekBefore(toKV("f", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("f", tagUsage).getKey()));
     assertEquals("e", toRowStr(scanner.getKeyValue()));
 
-    assertEquals(true, scanner.seekBefore(toKV("g", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("g", tagUsage).getKey()));
     assertEquals("e", toRowStr(scanner.getKeyValue()));
-
-    assertEquals(true, scanner.seekBefore(toKV("h", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("h", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
-    assertEquals(true, scanner.seekBefore(toKV("i", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("i", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
-    assertEquals(true, scanner.seekBefore(toKV("j", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("j", tagUsage).getKey()));
     assertEquals("i", toRowStr(scanner.getKeyValue()));
     Cell cell = scanner.getKeyValue();
     if (tagUsage != TagUsage.NO_TAG && cell.getTagsLength() > 0) {
@@ -187,12 +183,14 @@ public class TestSeekTo {
         assertEquals("myTag1", Bytes.toString(next.getValue()));
       }
     }
-    assertEquals(true, scanner.seekBefore(toKV("k", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("k", tagUsage).getKey()));
     assertEquals("i", toRowStr(scanner.getKeyValue()));
-    assertEquals(true, scanner.seekBefore(toKV("l", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("l", tagUsage).getKey()));
     assertEquals("k", toRowStr(scanner.getKeyValue()));
 
     reader.close();
+
+    reader.close();
   }
 
   @Test
@@ -209,12 +207,12 @@ public class TestSeekTo {
     HFile.Reader reader = HFile.createReader(fs, p, new CacheConfig(conf), 
conf);
     reader.loadFileInfo();
     HFileScanner scanner = reader.getScanner(false, true);
-    assertEquals(false, scanner.seekBefore(toKV("a", tagUsage).getKey()));
-    assertEquals(false, scanner.seekBefore(toKV("b", tagUsage).getKey()));
-    assertEquals(false, scanner.seekBefore(toKV("c", tagUsage).getKey()));
+    assertFalse(scanner.seekBefore(toKV("a", tagUsage).getKey()));
+    assertFalse(scanner.seekBefore(toKV("b", tagUsage).getKey()));
+    assertFalse(scanner.seekBefore(toKV("c", tagUsage).getKey()));
 
     // seekBefore d, so the scanner points to c
-    assertEquals(true, scanner.seekBefore(toKV("d", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("d", tagUsage).getKey()));
     assertEquals("c", toRowStr(scanner.getKeyValue()));
     // reseekTo e and g
     assertEquals(0, scanner.reseekTo(toKV("c", tagUsage).getKey()));
@@ -223,7 +221,7 @@ public class TestSeekTo {
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore e, so the scanner points to c
-    assertEquals(true, scanner.seekBefore(toKV("e", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("e", tagUsage).getKey()));
     assertEquals("c", toRowStr(scanner.getKeyValue()));
     // reseekTo e and g
     assertEquals(0, scanner.reseekTo(toKV("e", tagUsage).getKey()));
@@ -232,7 +230,7 @@ public class TestSeekTo {
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore f, so the scanner points to e
-    assertEquals(true, scanner.seekBefore(toKV("f", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("f", tagUsage).getKey()));
     assertEquals("e", toRowStr(scanner.getKeyValue()));
     // reseekTo e and g
     assertEquals(0, scanner.reseekTo(toKV("e", tagUsage).getKey()));
@@ -241,7 +239,7 @@ public class TestSeekTo {
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore g, so the scanner points to e
-    assertEquals(true, scanner.seekBefore(toKV("g", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("g", tagUsage).getKey()));
     assertEquals("e", toRowStr(scanner.getKeyValue()));
     // reseekTo e and g again
     assertEquals(0, scanner.reseekTo(toKV("e", tagUsage).getKey()));
@@ -250,28 +248,28 @@ public class TestSeekTo {
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore h, so the scanner points to g
-    assertEquals(true, scanner.seekBefore(toKV("h", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("h", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
     // reseekTo g
     assertEquals(0, scanner.reseekTo(toKV("g", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore i, so the scanner points to g
-    assertEquals(true, scanner.seekBefore(toKV("i", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("i", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
     // reseekTo g
     assertEquals(0, scanner.reseekTo(toKV("g", tagUsage).getKey()));
     assertEquals("g", toRowStr(scanner.getKeyValue()));
 
     // seekBefore j, so the scanner points to i
-    assertEquals(true, scanner.seekBefore(toKV("j", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("j", tagUsage).getKey()));
     assertEquals("i", toRowStr(scanner.getKeyValue()));
     // reseekTo i
     assertEquals(0, scanner.reseekTo(toKV("i", tagUsage).getKey()));
     assertEquals("i", toRowStr(scanner.getKeyValue()));
 
     // seekBefore k, so the scanner points to i
-    assertEquals(true, scanner.seekBefore(toKV("k", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("k", tagUsage).getKey()));
     assertEquals("i", toRowStr(scanner.getKeyValue()));
     // reseekTo i and k
     assertEquals(0, scanner.reseekTo(toKV("i", tagUsage).getKey()));
@@ -280,7 +278,7 @@ public class TestSeekTo {
     assertEquals("k", toRowStr(scanner.getKeyValue()));
 
     // seekBefore l, so the scanner points to k
-    assertEquals(true, scanner.seekBefore(toKV("l", tagUsage).getKey()));
+    assertTrue(scanner.seekBefore(toKV("l", tagUsage).getKey()));
     assertEquals("k", toRowStr(scanner.getKeyValue()));
     // reseekTo k
     assertEquals(0, scanner.reseekTo(toKV("k", tagUsage).getKey()));
@@ -316,8 +314,8 @@ public class TestSeekTo {
     assertEquals("c", toRowStr(scanner.getKeyValue()));
 
     // Across a block boundary now.
-    assertEquals(1, scanner.seekTo(toKV("h", tagUsage).getKey()));
-    assertEquals("g", toRowStr(scanner.getKeyValue()));
+    assertEquals(0, scanner.seekTo(toKV("i", tagUsage).getKey()));
+    assertEquals("i", toRowStr(scanner.getKeyValue()));
 
     assertEquals(1, scanner.seekTo(toKV("l", tagUsage).getKey()));
     if (encoding == DataBlockEncoding.PREFIX_TREE) {
@@ -358,7 +356,7 @@ public class TestSeekTo {
         toKV("e", tagUsage).getKey(), 0, klen));
     assertEquals(0, blockIndexReader.rootBlockContainingKey(
         toKV("g", tagUsage).getKey(), 0, klen));
-    assertEquals(0, blockIndexReader.rootBlockContainingKey(
+    assertEquals(1, blockIndexReader.rootBlockContainingKey(
         toKV("h", tagUsage).getKey(), 0, klen));
     assertEquals(1, blockIndexReader.rootBlockContainingKey(
         toKV("i", tagUsage).getKey(), 0, klen));

Reply via email to