[ https://issues.apache.org/jira/browse/ZOOKEEPER-2774?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16011608#comment-16011608 ]
Hadoop QA commented on ZOOKEEPER-2774: -------------------------------------- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 28 new or modified tests. -1 javadoc. The javadoc tool appears to have generated 1 warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. -1 findbugs. The patch appears to introduce 90 new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/690//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/690//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/690//console This message is automatically generated. > 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)