hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anoopsamj...@apache.org
Subject hbase git commit: HBASE-15064 BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache - Addendum.
Date Wed, 23 Mar 2016 09:34:13 GMT
Repository: hbase
Updated Branches:
  refs/heads/master 5fcadb86a -> cadfb21f4


HBASE-15064 BufferUnderflowException after last Cell fetched from an HFile Block served from
L2 offheap cache - Addendum.


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

Branch: refs/heads/master
Commit: cadfb21f4bb465d1e305db2a159b8574282c8150
Parents: 5fcadb8
Author: anoopsjohn <anoopsamjohn@gmail.com>
Authored: Wed Mar 23 15:03:50 2016 +0530
Committer: anoopsjohn <anoopsamjohn@gmail.com>
Committed: Wed Mar 23 15:03:50 2016 +0530

----------------------------------------------------------------------
 .../apache/hadoop/hbase/nio/MultiByteBuff.java  |  3 ++-
 .../hadoop/hbase/nio/TestMultiByteBuff.java     | 25 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/cadfb21f/hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java
index ab2b5ea..107bb3f 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java
@@ -472,7 +472,8 @@ public class MultiByteBuff extends ByteBuff {
    */
   @Override
   public final boolean hasRemaining() {
-    return this.curItem.hasRemaining() || this.curItemIndex < this.items.length - 1;
+    return this.curItem.hasRemaining() || (this.curItemIndex < this.limitedItemIndex
+        && this.items[this.curItemIndex + 1].hasRemaining());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/cadfb21f/hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java
b/hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java
index 800c8e1..af4c464 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java
@@ -378,4 +378,29 @@ public class TestMultiByteBuff {
     assertTrue(Bytes.equals(actual, 0, actual.length,
             b, 1, 3));
   }
+
+  @Test
+  public void testHasRemaining() {
+    ByteBuffer b1 = ByteBuffer.allocate(8);
+    ByteBuffer b2 = ByteBuffer.allocate(8);
+    ByteBuffer b3 = ByteBuffer.allocate(8);
+    MultiByteBuff mbb1 = new MultiByteBuff(b1, b2, b3);
+    assertTrue(mbb1.hasRemaining());
+    mbb1.limit(20); // Limit in mid of last of BB
+    mbb1.position(15);
+    mbb1.get();// We are at the end of second BB
+    assertTrue(mbb1.hasRemaining());
+    mbb1.position(20);
+    assertFalse(mbb1.hasRemaining());
+    mbb1.limit(12); // Limit in mid of second BB
+    mbb1.position(11);
+    assertTrue(mbb1.hasRemaining());
+    mbb1.get(); // Now we have reached the limit
+    assertFalse(mbb1.hasRemaining());
+    mbb1.limit(16);// Limit at begin of the last BB
+    mbb1.position(15);
+    assertTrue(mbb1.hasRemaining());
+    mbb1.get(); // Now we have reached the limit
+    assertFalse(mbb1.hasRemaining());
+  }
 }


Mime
View raw message