[ https://issues.apache.org/jira/browse/HBASE-11479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Purtell resolved HBASE-11479. ------------------------------------ Resolution: Fixed Fix Version/s: 0.94.22 Assignee: cuijianwei Hadoop Flags: Reviewed Committed to 0.94 only, Lars already acked it. Thanks for the patch! > 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 > Assignee: cuijianwei > Priority: Minor > Fix For: 0.94.22 > > Attachments: HBASE-11479-0.94-v1.patch > > > 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(); > } > // == InterruptedException won't be caught == > handleSaslConnectionFailure(numRetries++, MAX_RETRIES, ex, > rand, ticket); > 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)