[ 
https://issues.apache.org/jira/browse/HBASE-11660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14084934#comment-14084934
 ] 

Matteo Bertozzi commented on HBASE-11660:
-----------------------------------------

if I read it correctly advance() now will always return true (and the hasNext 
boolean can be removed).
but this seems to work just because we know the number of items in the WAL 
ahead, or am I missing something?
{code}
HLogSplitter.java
for (int i = 0; i < count; i++) {
      // Throw index out of bounds if our cell count is off
      if (!cells.advance()) {
{code}

{code}
WALEdit.java:    while (kvs.size() < expectedCount && cellDecoder.advance()) {
{code}

> Make WAL reader follow contract for java.io.InputStream.available()
> -------------------------------------------------------------------
>
>                 Key: HBASE-11660
>                 URL: https://issues.apache.org/jira/browse/HBASE-11660
>             Project: HBase
>          Issue Type: Bug
>          Components: wal
>            Reporter: Eric Hanson
>            Priority: Minor
>         Attachments: hbase-11660.01.patch
>
>
> In the process of building support to running HBase on Microsoft Azure 
> HDInsight, I hit an issue in the HBase WAL reading process that took a lot of 
> time to debug. The WAL reading code depends on available() for the log 
> InputStream never returing 0 until end of file. This is not the same as the 
> contract in java.io.InputStream for available. 
> To prevent future grief for others that may want to port HBase onto storage 
> systems other than HDFS, I propose to change the HBase WAL reader so it does 
> not assume that EOF has been reached when available() == 0. It instead would 
> treat available only as described in InputStream, i.e. available() is merely 
> the number of bytes that could be read from the stream without blocking. That 
> could be 0 even before EOF.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to