zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andor Molnar (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ZOOKEEPER-1159) ClientCnxn does not propagate session expiration indication
Date Tue, 20 Feb 2018 13:13:00 GMT

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

Mime
View raw message