[ https://issues.apache.org/jira/browse/ZOOKEEPER-1159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16370032#comment-16370032 ]
Andor Molnar commented on ZOOKEEPER-1159: ----------------------------------------- Is this still an outstanding issue or can we close it by any chance? [~mspycher] and [~fournc] 's analysis and comments are pretty much accurate and I'm not sure what else we can do about it? > ClientCnxn does not propagate session expiration indication > ----------------------------------------------------------- > > Key: ZOOKEEPER-1159 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1159 > Project: ZooKeeper > Issue Type: Bug > Components: java client > Affects Versions: 3.4.0 > Reporter: Andrew Purtell > Assignee: Flavio Junqueira > Priority: Blocker > Fix For: 3.5.4, 3.6.0 > > > ClientCnxn does not always propagate session expiration indication up to > clients. If a reconnection attempt fails because the session has since > expired, the KeeperCode is still Disconnected, but shouldn't it be set to > Expired? Perhaps like so: > {code} > --- a/src/java/main/org/apache/zookeeper/ClientCnxn.java > +++ b/src/java/main/org/apache/zookeeper/ClientCnxn.java > @@ -1160,6 +1160,7 @@ public class ClientCnxn { > clientCnxnSocket.doTransport(to, pendingQueue, > outgoingQueue); > > } catch (Exception e) { > + Event.KeeperState eventState = > Event.KeeperState.Disconnected; > if (closing) { > if (LOG.isDebugEnabled()) { > // closing so this is expected > @@ -1172,6 +1173,7 @@ public class ClientCnxn { > // this is ugly, you have a better way speak up > if (e instanceof SessionExpiredException) { > LOG.info(e.getMessage() + ", closing socket > connection"); > + eventState = Event.KeeperState.Expired; > } else if (e instanceof SessionTimeoutException) { > LOG.info(e.getMessage() + RETRY_CONN_MSG); > } else if (e instanceof EndOfStreamException) { > @@ -1191,7 +1193,7 @@ public class ClientCnxn { > if (state.isAlive()) { > eventThread.queueEvent(new WatchedEvent( > Event.EventType.None, > - Event.KeeperState.Disconnected, > + eventState, > null)); > } > clientCnxnSocket.updateNow(); > {code} > This affects HBase. HBase master and region server processes will shut down > by design if their session has expired, but will attempt to reconnect if they > think they have been disconnected. The above prevents proper termination. -- This message was sent by Atlassian JIRA (v7.6.3#76005)