[ https://issues.apache.org/jira/browse/HBASE-1604?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eugene Kirpichov updated HBASE-1604: ------------------------------------ Attachment: hbase-1604.patch Attaching a patch against trunk. > 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 > Attachments: hbase-1604.patch > > > 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.