hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eric Hanson (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-11660) Make WAL reader follow contract for java.io.InputStream.available()
Date Mon, 04 Aug 2014 17:00:14 GMT

     [ https://issues.apache.org/jira/browse/HBASE-11660?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Eric Hanson updated HBASE-11660:
--------------------------------

    Attachment: hbase-11660.01.patch

Here's a patch that was enough to fix the problem for log files on Azure page blobs and block
blobs. 

With quite a lot of effort to track this down and fix it, I've worked around this in our Azure
file system driver for Hadoop (the WASB driver). Nevertheless, I think that for the future
it'd be preferred to follow the InputStream contract for available(), which most input stream
does. 

That can be good for HBase by letting more people port to different storage systems more easily.


> 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)

Mime
View raw message