Author: wang Date: Wed Apr 2 08:33:25 2014 New Revision: 1583926 URL: http://svn.apache.org/r1583926 Log: HDFS-5591. Checkpointing should use monotonic time when calculating period. Contributed by Charles Lamb.
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSecondaryWebUi.java Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1583926&r1=1583925&r2=1583926&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Wed Apr 2 08:33:25 2014 @@ -299,6 +299,9 @@ Release 2.5.0 - UNRELEASED HDFS-6173. Move the default processor from Ls to Web in OfflineImageViewer. (Akira Ajisaka via wheat9) + HDFS-5591. Checkpointing should use monotonic time when calculating period. + (Charles Lamb via wang) + Release 2.4.1 - UNRELEASED INCOMPATIBLE CHANGES Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java?rev=1583926&r1=1583925&r2=1583926&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SecondaryNameNode.java Wed Apr 2 08:33:25 2014 @@ -129,7 +129,9 @@ public class SecondaryNameNode implement return getClass().getSimpleName() + " Status" + "\nName Node Address : " + nameNodeAddr + "\nStart Time : " + new Date(starttime) - + "\nLast Checkpoint Time : " + (lastCheckpointTime == 0? "--": new Date(lastCheckpointTime)) + + "\nLast Checkpoint : " + (lastCheckpointTime == 0? "--": + ((Time.monotonicNow() - lastCheckpointTime) / 1000)) + + " seconds ago" + "\nCheckpoint Period : " + checkpointConf.getPeriod() + " seconds" + "\nCheckpoint Size : " + StringUtils.byteDesc(checkpointConf.getTxnCount()) + " (= " + checkpointConf.getTxnCount() + " bytes)" @@ -376,7 +378,7 @@ public class SecondaryNameNode implement if(UserGroupInformation.isSecurityEnabled()) UserGroupInformation.getCurrentUser().checkTGTAndReloginFromKeytab(); - long now = Time.now(); + final long now = Time.monotonicNow(); if (shouldCheckpointBasedOnCount() || now >= lastCheckpointTime + 1000 * checkpointConf.getPeriod()) { Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java?rev=1583926&r1=1583925&r2=1583926&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java Wed Apr 2 08:33:25 2014 @@ -17,7 +17,7 @@ */ package org.apache.hadoop.hdfs.server.namenode.ha; -import static org.apache.hadoop.util.Time.now; +import static org.apache.hadoop.util.Time.monotonicNow; import java.io.IOException; import java.net.URI; @@ -277,14 +277,14 @@ public class StandbyCheckpointer { * prevented */ private void preventCheckpointsFor(long delayMs) { - preventCheckpointsUntil = now() + delayMs; + preventCheckpointsUntil = monotonicNow() + delayMs; } private void doWork() { final long checkPeriod = 1000 * checkpointConf.getCheckPeriod(); // Reset checkpoint time so that we don't always checkpoint // on startup. - lastCheckpointTime = now(); + lastCheckpointTime = monotonicNow(); while (shouldRun) { boolean needRollbackCheckpoint = namesystem.isNeedRollbackFsImage(); if (!needRollbackCheckpoint) { @@ -302,9 +302,9 @@ public class StandbyCheckpointer { UserGroupInformation.getCurrentUser().checkTGTAndReloginFromKeytab(); } - long now = now(); - long uncheckpointed = countUncheckpointedTxns(); - long secsSinceLast = (now - lastCheckpointTime)/1000; + final long now = monotonicNow(); + final long uncheckpointed = countUncheckpointedTxns(); + final long secsSinceLast = (now - lastCheckpointTime) / 1000; boolean needCheckpoint = needRollbackCheckpoint; if (needCheckpoint) { Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSecondaryWebUi.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSecondaryWebUi.java?rev=1583926&r1=1583925&r2=1583926&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSecondaryWebUi.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestSecondaryWebUi.java Wed Apr 2 08:33:25 2014 @@ -62,7 +62,8 @@ public class TestSecondaryWebUi { public void testSecondaryWebUi() throws IOException { String pageContents = DFSTestUtil.urlGet(new URL("http://localhost:" + SecondaryNameNode.getHttpAddress(conf).getPort() + "/status.jsp")); - assertTrue(pageContents.contains("Last Checkpoint Time")); + assertTrue("Didn't find \"Last Checkpoint\"", + pageContents.contains("Last Checkpoint")); } @Test