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.

Reply via email to