Zili,
Sessions expire in the server. If you are not connected to the cluster you
cannot assume that the session is expired.

There is another weird edge case: if the server/cluster is down the session
cannot expire.

Hope that helps
Enrico

Il mar 24 set 2019, 13:54 Zili Chen <wander4...@gmail.com> ha scritto:

> Hi ZooKeepers,
>
> I want to trace where Watcher.Event.KeeperState.Expired generated and it
> seems only generated
> when connect to server fails due to exceed session timeout.
>
> Besides, I find code snippet in ClientCnxn as below
>
> void queueEvent(String clientPath, int err, Set<Watcher>
> materializedWatchers, EventType eventType) {
>         KeeperState sessionState = KeeperState.SyncConnected;
>         if (KeeperException.Code.SESSIONEXPIRED.intValue() == err
>             || KeeperException.Code.CONNECTIONLOSS.intValue() == err) {
>             sessionState = Event.KeeperState.Disconnected;
>         }
>         WatchedEvent event = new WatchedEvent(eventType, sessionState,
> clientPath);
>         eventThread.queueEvent(event, materializedWatchers);
>     }
>
> which seems a bit wried to me what we queue
> a Event.KeeperState.Disconnected on
> KeeperException.Code.SESSIONEXPIRED.
>
> Back to the question, how zookeeper discovers and triggers session expire
> event on
> session expired after connection established successfully?
>
> Best,
> tison.
>

Reply via email to