[
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)