[ https://issues.apache.org/jira/browse/ZOOKEEPER-2774?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16005821#comment-16005821 ]
JiangJiafu commented on ZOOKEEPER-2774: --------------------------------------- Is this PB planed to be solved in 3.4.X??? > 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.8, 3.4.9, 3.4.10 > 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)