[
https://issues.apache.org/jira/browse/HBASE-1604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12731506#action_12731506
]
Jonathan Gray commented on HBASE-1604:
--------------------------------------
Eugene, can you provide a patch?
> HBaseClient.getConnection() may return a broken connection without throwing
> an exception
> ----------------------------------------------------------------------------------------
>
> Key: HBASE-1604
> URL: https://issues.apache.org/jira/browse/HBASE-1604
> Project: Hadoop HBase
> Issue Type: Bug
> Components: client
> Affects Versions: 0.19.2
> Reporter: Eugene Kirpichov
>
> Consider the code of HBaseClient.getConnection():
> {code}
> connection.setupIOstreams();
> return connection;
> }
> {code}
> Now consider the setupIOstreams() method:
> {code}
> } catch (IOException e) {
> markClosed(e);
> close(); // Removes the connection from pool
> }
> {code}
> So, if something goes wrong inside of setupIOstreams, then after its
> invocation the connection will be broken (will have its .in and .out streams
> nulls, for example) and will not be in pool, but will still be returned from
> the getConnection method and cause further harm (for example, cause a
> NullPointerException in further calls such as sendCall, which use the in and
> out streams).
> Suggested fix: make the setupIOstreams method rethrow the IOException inside
> that catch block.
> Reproduction: Restart the hbase master and/or regionserver while a client
> program is running, and put a breakpoint into that catch block.
> I actually observed a situation where the broken connection stayed in the
> pool, but I don't yet know how to reproduce it or what is the reason. I am
> investigating the issue, but for now at least the aforementioned bug should
> be fixed.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.