JiangJiafu created ZOOKEEPER-2774:
-------------------------------------

             Summary: Ephemeral znode will not be removed when sesstion 
timeout, if the system time of ZooKeeper node changes unexpectedly.
                 Key: ZOOKEEPER-2774
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2774
             Project: ZooKeeper
          Issue Type: Bug
          Components: server
    Affects Versions: 3.4.10, 3.4.9, 3.4.8
         Environment: Centos6.5
            Reporter: JiangJiafu


1. Deploy a ZooKeeper cluster with one node.
2. Create a Ephemeral znode.
3. Change the system time of the ZooKeeper node to a earlier point.
4. Disconnect the client with the ZooKeeper server.

Then the ephemeral znode will exist for a long time even when session timeout.

I have read the ZooKeeper source code and I find the code int 
SessionTrackerImpl.java,
{code:title=SessionTrackerImpl.java|borderStyle=solid}
    @Override
    synchronized public void run() {
        try {
            while (running) {
                currentTime = System.currentTimeMillis();
                if (nextExpirationTime > currentTime) {
                    this.wait(nextExpirationTime - currentTime);
                    continue;
                }
                SessionSet set;
                set = sessionSets.remove(nextExpirationTime);
                if (set != null) {
                    for (SessionImpl s : set.sessions) {
                        setSessionClosing(s.sessionId);
                        expirer.expire(s);
                    }
                }
                nextExpirationTime += expirationInterval;
            }
        } catch (InterruptedException e) {
            handleException(this.getName(), e);
        }
        LOG.info("SessionTrackerImpl exited loop!");
    }
{code}

I think it may be better to use System.nanoTime(), not 
System.currentTimeMillis, because the later can be changed manually or 
automatically by a NTP client. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to