[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1366?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14075021#comment-14075021
 ] 

Raul Gutierrez Segales commented on ZOOKEEPER-1366:
---------------------------------------------------

Some nits:

Lines too long (> 80):

{noformat}
+    /**
+     * Returns time in milliseconds as does System.currentTimeMillis(), but 
uses elapsed time from an arbitrary epoch
+     * more like System.nanoTime().  The difference is that if somebody 
changes the system clock, Time.currentElapsedTime
+     * will change but nanoTime won't.  On the other hand, all of ZK assumes 
that time is measured in milliseconds.
+     * @return  The time in milliseconds from some arbitrary point in time.
+     */
{noformat}

Might as well put the comment outside of the method:

{noformat}
     long getTime() {
+        // This method doesn't use Time.currentElapsedTime() because it's used
+        // to set znode ctime and mtime.
{noformat}

Long lines:

{noformat}
+        Assert.assertEquals(Time.currentElapsedTime() - nt0, 
System.currentTimeMillis() - mt0, 10);
{noformat}

{noformat}
+     * While running this, try changing the clock forward using something like 
[date -s "+1hour"].
+     * On a zookeeper that uses currentTimeMillis(), this will cause all 
ephemerals to be deleted
+     * due to session expiration.  With the use of nanoTime instead, zookeeper 
is unphased.
+     *
+     * @param args  Not used.
+     * @throws Exception Not really.  In fact, the only exceptions are 
InterruptedException, KeeperException
{noformat}

ditto:

{noformat}
+            System.out.printf("%d\t%s\n", discrepancy(), 
zk.exists("/ephemeral", watchCount.get() == 0 ? createWatcher() : null) != 
null);
{noformat}

Consistent spaces around + operator:

{noformat}
+            LOG.info("Elapsed "+(end - start) + " ms: " + message);
{noformat}


> Zookeeper should be tolerant of clock adjustments
> -------------------------------------------------
>
>                 Key: ZOOKEEPER-1366
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1366
>             Project: ZooKeeper
>          Issue Type: Bug
>            Reporter: Ted Dunning
>            Assignee: Ted Dunning
>            Priority: Critical
>             Fix For: 3.5.0
>
>         Attachments: ZOOKEEPER-1366-3.3.3.patch, ZOOKEEPER-1366.patch, 
> ZOOKEEPER-1366.patch, ZOOKEEPER-1366.patch, ZOOKEEPER-1366.patch, 
> ZOOKEEPER-1366.patch, ZOOKEEPER-1366.patch, ZOOKEEPER-1366.patch, 
> ZOOKEEPER-1366.patch, ZOOKEEPER-1366.patch, zookeeper-3.4.5-ZK1366-SC01.patch
>
>
> If you want to wreak havoc on a ZK based system just do [date -s "+1hour"] 
> and watch the mayhem as all sessions expire at once.
> This shouldn't happen.  Zookeeper could easily know handle elapsed times as 
> elapsed times rather than as differences between absolute times.  The 
> absolute times are subject to adjustment when the clock is set while a timer 
> is not subject to this problem.  In Java, System.currentTimeMillis() gives 
> you absolute time while System.nanoTime() gives you time based on a timer 
> from an arbitrary epoch.
> I have done this and have been running tests now for some tens of minutes 
> with no failures.  I will set up a test machine to redo the build again on 
> Ubuntu and post a patch here for discussion.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to