[
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)