cuijianwei created HBASE-11479:
----------------------------------
Summary: SecureConnection can't be closed when SecureClient is
stopping because InterruptedException won't be caught in
SecureClient#setupIOstreams()
Key: HBASE-11479
URL: https://issues.apache.org/jira/browse/HBASE-11479
Project: HBase
Issue Type: Bug
Components: security
Affects Versions: 0.94.20
Reporter: cuijianwei
Priority: Minor
When HBaseClient.stop() is invoked, all cached HBaseClient.Connections will be
interrupted, marked as closed and then finally closed. HBaseClient.stop() won't
return before all cached HBaseClient.Connections have been closed. However,
SecureConnection might not be closed after HBaseClient.stop() is invoked
because of the following code in SecureClient,setupIOstreams():
{code}
...
try {
...
try {
continueSasl =
ticket.runAs(new PrivilegedExceptionAction<Boolean>() {
@Override
public Boolean run() throws IOException {
return setupSaslConnection(in2, out2);
}
});
} catch (Exception ex) {
if (rand == null) {
rand = new Random();
}
<font color='red'>handleSaslConnectionFailure(numRetries++,
MAX_RETRIES, ex, rand, ticket)</font>;
continue;
...
}
}
} catch (IOException e) {
markClosed(e);
close();
throw e;
}
...
{code}
SecureClient.handleSaslConnectionFailure(...) will throw InterruptedException
exception(there will be Thread.sleep() in
SecureClient.handleSaslConnectionFailure(...)) when HBaseClient#stop() is
invoked. However, this InterruptedException won't be caught, making this
SecureConnection can't be closed.
This problem might make regionserver can't exit because regionserver will wait
all SecureConnection closed when exiting. A simple way to fix this bug is to
catch InterruptedException in SecureClient#setupIOstreams() and close the
SecureConnection.
--
This message was sent by Atlassian JIRA
(v6.2#6252)