[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237394#comment-16237394 ] ramkrishna.s.vasudevan commented on HBASE-15064: But if you are seeing the issue then probably there is a bug hidden some where and it may need a fix. Thanks. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237393#comment-16237393 ] ramkrishna.s.vasudevan commented on HBASE-15064: Though stack trace is similar the reason for the error is different as the one described in this JIRA is coming out a data structure that is added only in 2.0. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237381#comment-16237381 ] Mark Christiaens commented on HBASE-15064: -- Well, I don't know if it is related but we saw a stack trace {noformat} Caused by: java.lang.ArrayIndexOutOfBoundsException at org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:437) at org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:516) at org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:652) at org.apache.hadoop.hbase.io.hfile.HFileReaderV2$EncodedScannerV2.next(HFileReaderV2.java:1260) at org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:152) at org.apache.hadoop.hbase.regionserver.KeyValueHeap.next(KeyValueHeap.java:108) at org.apache.hadoop.hbase.regionserver.StoreScanner.next(StoreScanner.java:629) at org.apache.hadoop.hbase.regionserver.KeyValueHeap.next(KeyValueHeap.java:147) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.populateResult(HRegion.java:5587) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextInternal(HRegion.java:5738) at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.nextRaw(HRegion.java:5525) at org.apache.phoenix.coprocessor.BaseScannerRegionObserver$2.nextRaw(BaseScannerRegionObserver.java:337) ... 8 more at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1225) at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:213) at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:287) at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:32651) at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:213) {noformat} I thought it looked somewhat similar. I think this stack trace originates from an HBase 1.1.2. I was looking for any known issues to avoid filing a duplicate. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237363#comment-16237363 ] ramkrishna.s.vasudevan commented on HBASE-15064: [~mark_christiaens] Can you tell us more on where you find a similar issue. This was specific to 2.0 because in 2.0 we try to serve from the L2 offheap bucket cache directly without having to copy onheap. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16237357#comment-16237357 ] Mark Christiaens commented on HBASE-15064: -- I noticed that this bug is not backported. Is it really 2.0 specific? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15208484#comment-15208484 ] Hudson commented on HBASE-15064: FAILURE: Integrated in HBase-Trunk_matrix #800 (See [https://builds.apache.org/job/HBase-Trunk_matrix/800/]) HBASE-15064 BufferUnderflowException after last Cell fetched from an (anoopsamjohn: rev cadfb21f4bb465d1e305db2a159b8574282c8150) * hbase-common/src/test/java/org/apache/hadoop/hbase/nio/TestMultiByteBuff.java * hbase-common/src/main/java/org/apache/hadoop/hbase/nio/MultiByteBuff.java > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15208085#comment-15208085 ] ramkrishna.s.vasudevan commented on HBASE-15064: +1 > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064-addendum.patch, > HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15208041#comment-15208041 ] ramkrishna.s.vasudevan commented on HBASE-15064: Want to add a test case in the patch? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064-addendum.patch, HBASE-15064.patch, > MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15207082#comment-15207082 ] deepankar commented on HBASE-15064: --- Yeah I think this will fix this issue. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15206837#comment-15206837 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq.(this.curItemIndex < this.limitedItemIndex && this.items[this.curItemIndex + 1].hasRemaining()); I think reading the full condition it will do that. So no problem. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15206829#comment-15206829 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq.this.curItemIndex < this.limitedItemIndex Should we not check if really the curItemIndex is one less than the limitedItemIndex? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15206616#comment-15206616 ] Anoop Sam John commented on HBASE-15064: As this is opened let us fix this particular case with below fix? {code} public final boolean hasRemaining() { return this.curItem.hasRemaining() || (this.curItemIndex < this.limitedItemIndex && this.items[this.curItemIndex + 1].hasRemaining()); } {code} > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198769#comment-15198769 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq.because if somebody is trying to limit at the place which is exactly at the boundary of the limitIndexBuffer then we are also including the last item which does not have any data as you are limiting at 0 (as limit == limitedIndexBegin, which is at the boundary), But then once you have read everything in the previous buffer if the client consults hasRemaining function this will return again true (as curIterm < no_of_items in array) but when you actually try to read anything we will throw BufferUnderFlowException because again the last element has no data. This is again true. In case you see MBB as a generic API what you say is true > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198849#comment-15198849 ] ramkrishna.s.vasudevan commented on HBASE-15064: bqLet us revisit all logic.. Add one more check for corner case again and again, Okie to revisit all logic. But this fix is only for limit() and hasRemaining I think. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198794#comment-15198794 ] deepankar commented on HBASE-15064: --- pressed add too early i mean like this {code} public MultiByteBuff limit(int limit) { this.limit = limit; // Normally the limit will try to limit within the last BB item int limitedIndexBegin = this.itemBeginPos[this.limitedItemIndex]; if (limit > limitedIndexBegin && limit < this.itemBeginPos[this.limitedItemIndex + 1]) { this.items[this.limitedItemIndex].limit(limit - limitedIndexBegin); return this; } int itemIndex = getItemIndex(limit - 1); {code} > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198777#comment-15198777 ] Anoop Sam John commented on HBASE-15064: I see I get now what you are saying.. Let me see > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198793#comment-15198793 ] deepankar commented on HBASE-15064: --- What if we remove the equality in the if clause in the limit and in the limit method modify the new limitIndex to search for limit - 1 will that not work seamlessly ? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198872#comment-15198872 ] ramkrishna.s.vasudevan commented on HBASE-15064: {code} for(int i = 0; i < 12; i++) { assertTrue(mbb1.hasRemaining()); mbb1.get(); } {code} Ya that is true. Good point. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198754#comment-15198754 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq.Also the items array is not changed in the limit(int) function, this means there could be a scenario where the user has asked to limit at the end of first buffer, but the hasRemaining() will still return true, Is there any flaw in my logic here ? In a general usage I think the limit() function on MBB and the hasRemaining has a flaw. You are example is valid here. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198775#comment-15198775 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq.Actually we will not include that BB going into the MBB. Just seeing these comments. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198761#comment-15198761 ] ramkrishna.s.vasudevan commented on HBASE-15064: Also once a limit is explicitly set on an MBB we should honour that in other operations. Currently even if the limit is set to 5 and we do a position(5), ya we get an Run time Exception but that happens from the internal BB instead I think the MBB should identify and throw an exception. But ya that will add some preChecks (based on the case). > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198685#comment-15198685 ] ramkrishna.s.vasudevan commented on HBASE-15064: [~dvdreddy] Let's look at this once again. Thanks for the comments. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198828#comment-15198828 ] Anoop Sam John commented on HBASE-15064: Let us revisit all logic.. Add one more check for corner case again and again, we will land in issues later.. Let us clean it up. I will work on that today. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198764#comment-15198764 ] Anoop Sam John commented on HBASE-15064: Wanted to avoid many checks.. And regarding your point on the limit(int) issue That will be issue with the last item with 0 size right? Actually we will not include that BB going into the MBB. So that wont come in? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198752#comment-15198752 ] deepankar commented on HBASE-15064: --- Is there something wrong with my reasoning there ? or am i missing something ? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198774#comment-15198774 ] Anoop Sam John commented on HBASE-15064: FYI, we will not include the last 0 sized BB in the BucketArray within any of the MBB created. This was fixed. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198820#comment-15198820 ] ramkrishna.s.vasudevan commented on HBASE-15064: {code} int itemIndex = getItemIndex(limit - 1); {code} Why is that 'limit - 1' ? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198780#comment-15198780 ] Anoop Sam John commented on HBASE-15064: But let us keep the limitedItemIndex to whichever we found. It may so happen that within that item it has 0 readable size as it was limited to begin pos. In hasRemaining may be we need to consider this fact also? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198749#comment-15198749 ] Anoop Sam John commented on HBASE-15064: I think this is the correct impl of hasRemaining() {code} public final boolean hasRemaining() { return this.curItem.hasRemaining() || this.curItemIndex < this.limitedItemIndex; } {code} What do you think ? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15199100#comment-15199100 ] deepankar commented on HBASE-15064: --- Yeah something like that which was what [~anoop.hbase] was suggesting, just the limitedItemIndex computation was wrong in the first place. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198811#comment-15198811 ] ramkrishna.s.vasudevan commented on HBASE-15064: {code} Also the hasRemaining method Anoop Sam John suggested should also work seamlessly similar to the generic API right ? {code} Just seeing these comments. I tried it out. But that may not work for the case when the limit is set exactly at the first BB (see in patch for case where we have the Mbb.limit(4). May be then your suggestion also needs to be combined then. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198784#comment-15198784 ] ramkrishna.s.vasudevan commented on HBASE-15064: bq. In hasRemaining may be we need to consider this fact also? Yes.. We should ensure that the global 'limit' tracking variable is used here. I think limit(int) is anyway going to set the limit upto which we can use on this MBB. (like in Bytebuffers). So before returning hasRemaining we may have to check this 'limit' and decide on it. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198858#comment-15198858 ] deepankar commented on HBASE-15064: --- No I was saying, when you have done mbb1.get() for 4 times and then you check hasRemaining it will return false; so I think the following test will fail {code} bb1 = ByteBuffer.wrap(b); bb2 = ByteBuffer.wrap(b1); bb3 = ByteBuffer.allocate(4); mbb1 = new MultiByteBuff(bb1, bb2, bb3); mbb1.limit(12); for(int i = 0; i < 12; i++) { assertTrue(mbb1.hasRemaining()); mbb1.get(); } assertFalse(mbb1.hasRemaining()); {code} > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198821#comment-15198821 ] deepankar commented on HBASE-15064: --- I think the test in your patch should fail Mbb.limit(12); because once your cross the 4th byte the hasRemaining will start returning false as you are checking only the limit index. I think just [~anoop.hbase] 's suggestion will not work, that coupled with the modification of the way we calculate limitedItemIndex should work I think > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198751#comment-15198751 ] deepankar commented on HBASE-15064: --- yeah I think that will work, but what about the other bug in calculating limitedItemIndex > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198873#comment-15198873 ] ramkrishna.s.vasudevan commented on HBASE-15064: Ideally this limitedItemIndex should be used if the curItemIndex is just the one before it right? Otherwise it makes sense to say hasReminaing is true. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198848#comment-15198848 ] ramkrishna.s.vasudevan commented on HBASE-15064: {code} bb1 = ByteBuffer.wrap(b); bb2 = ByteBuffer.wrap(b1); bb3 = ByteBuffer.allocate(4); mbb1 = new MultiByteBuff(bb1, bb2, bb3); mbb1.limit(12); for(int i = 0; i < 12; i++) { mbb1.get(); } assertFalse(mbb1.hasRemaining()); {code} You mean this hasRemaining() will return true in this case? No it will work correctly. Because the limitedItemIndex will be 2 and once we have reached the end of 12 bytes the item at the limitedItemIndex will have its limit 0. So this check 'return this.items[limitedItemIndex].hasRemaining();' will return false. > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch, MBB_hasRemaining.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198796#comment-15198796 ] deepankar commented on HBASE-15064: --- Also the hasRemaining method [~anoop.hbase] suggested should also work seamlessly similar to the generic API right ? > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198473#comment-15198473 ] deepankar commented on HBASE-15064: --- I am still seeing this exception on our servers, I think I found something, what I observe is that a couple of things, in the normal byte buffers (java.nio) the hasRemaining function uses the current position and limit {code} /** * Tells whether there are any elements between the current position and * the limit. * * @return true if, and only if, there is at least one element * remaining in this buffer */ public final boolean hasRemaining() { return position < limit; } {code} But in the MultiByteBuff we have the hasRemaining is not taking care of limit {code} /** * Returns true if there are elements between the current position and the limit * @return true if there are elements, false otherwise */ @Override public final boolean hasRemaining() { return this.curItem.hasRemaining() || this.curItemIndex < this.items.length - 1; } {code} Also the items array is not changed in the limit(int) function, this means there could be a scenario where the user has asked to limit at the end of first buffer, but the hasRemaining() will still return true, Is there any flaw in my logic here ? Also in the limit(int) function in the MultiByteBuff function we are doing {code} // Normally the limit will try to limit within the last BB item int limitedIndexBegin = this.itemBeginPos[this.limitedItemIndex]; if (limit >= limitedIndexBegin && limit < this.itemBeginPos[this.limitedItemIndex + 1]) { this.items[this.limitedItemIndex].limit(limit - limitedIndexBegin); return this; } {code} here I think in the if statement isn't the logic be just {noformat} if (limit > limitedIndexBegin && limit < this.itemBeginPos[this.limitedItemIndex + 1]) {noformat} because if somebody is trying to limit at the place which is exactly at the boundary of the limitIndexBuffer then we are also including the last item which does not have any data as you are limiting at 0 (as limit == limitedIndexBegin, which is at the boundary), But then once you have read everything in the previous buffer if the client consults hasRemaining function this will return again true (as curIterm < no_of_items in array) but when you actually try to read anything we will throw BufferUnderFlowException because again the last element has no data. There is similar issue with {{getItemIndexfunction}} when again the {{elemIndex}} matches with the boundary > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This messag
[jira] [Commented] (HBASE-15064) BufferUnderflowException after last Cell fetched from an HFile Block served from L2 offheap cache
[ https://issues.apache.org/jira/browse/HBASE-15064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15085155#comment-15085155 ] Hudson commented on HBASE-15064: FAILURE: Integrated in HBase-Trunk_matrix #613 (See [https://builds.apache.org/job/HBase-Trunk_matrix/613/]) HBASE-15064 BufferUnderflowException after last Cell fetched from an (anoopsamjohn: rev 7cd09bfb91e829a7595b97842e64cfd8edcd97f9) * hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferArray.java * hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestByteBufferArray.java > BufferUnderflowException after last Cell fetched from an HFile Block served > from L2 offheap cache > - > > Key: HBASE-15064 > URL: https://issues.apache.org/jira/browse/HBASE-15064 > Project: HBase > Issue Type: Bug > Components: io >Affects Versions: 2.0.0 >Reporter: deepankar >Assignee: Anoop Sam John >Priority: Critical > Fix For: 2.0.0 > > Attachments: HBASE-15064.patch > > > While running the newer patches on our production system, I saw this error > come couple of times > {noformat} > ipc.RpcServer: Unexpected throwable object > 2016-01-01 16:42:56,090 ERROR > [B.defaultRpcServer.handler=20,queue=20,port=60020] ipc.RpcServer: Unexpected > throwable object > java.nio.BufferUnderflowException > at java.nio.Buffer.nextGetIndex(Buffer.java:500) > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:249) > at org.apache.hadoop.hbase.nio.MultiByteBuff.get(MultiByteBuff.java:494) > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decode(FastDiffDeltaEncoder.java:402) > > at > org.apache.hadoop.hbase.io.encoding.FastDiffDeltaEncoder$1.decodeNext(FastDiffDeltaEncoder.java:517) > > at > org.apache.hadoop.hbase.io.encoding.BufferedDataBlockEncoder$BufferedEncodedSeeker.next(BufferedDataBlockEncoder.java:815) > at > org.apache.hadoop.hbase.regionserver.StoreFileScanner.next(StoreFileScanner.java:138) > {noformat} > Looking at the get code > {code} > if (this.curItem.remaining() == 0) { > if (items.length - 1 == this.curItemIndex) { > // means cur item is the last one and we wont be able to read a long. > Throw exception > throw new BufferUnderflowException(); > } > this.curItemIndex++; > this.curItem = this.items[this.curItemIndex]; > } > return this.curItem.get(); > {code} > Can the new currentItem have zero elements (position == limit), does it make > sense to change the {{if}} to {{while}} ? {{while (this.curItem.remaining() > == 0)}}. This logic is repeated may make sense abstract to a new function if > we plan to change to {{if}} to {{while}} -- This message was sent by Atlassian JIRA (v6.3.4#6332)