HDFS-8214. Secondary NN Web UI shows wrong date for Last Checkpoint. Contributed by Charles Lamb.
This commit is contained in:
parent
4c1af156ae
commit
aa22450442
@ -582,6 +582,8 @@ Release 2.8.0 - UNRELEASED
|
||||
HDFS-8232. Missing datanode counters when using Metrics2 sink interface.
|
||||
(Anu Engineer via cnauroth)
|
||||
|
||||
HDFS-8214. Secondary NN Web UI shows wrong date for Last Checkpoint. (clamb via wang)
|
||||
|
||||
Release 2.7.1 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -108,6 +108,7 @@ public class SecondaryNameNode implements Runnable,
|
||||
|
||||
private final long starttime = Time.now();
|
||||
private volatile long lastCheckpointTime = 0;
|
||||
private volatile long lastCheckpointWallclockTime = 0;
|
||||
|
||||
private URL fsName;
|
||||
private CheckpointStorage checkpointImage;
|
||||
@ -134,8 +135,9 @@ public String toString() {
|
||||
+ "\nName Node Address : " + nameNodeAddr
|
||||
+ "\nStart Time : " + new Date(starttime)
|
||||
+ "\nLast Checkpoint : " + (lastCheckpointTime == 0? "--":
|
||||
((Time.monotonicNow() - lastCheckpointTime) / 1000))
|
||||
+ " seconds ago"
|
||||
new Date(lastCheckpointWallclockTime))
|
||||
+ " (" + ((Time.monotonicNow() - lastCheckpointTime) / 1000)
|
||||
+ " seconds ago)"
|
||||
+ "\nCheckpoint Period : " + checkpointConf.getPeriod() + " seconds"
|
||||
+ "\nCheckpoint Transactions: " + checkpointConf.getTxnCount()
|
||||
+ "\nCheckpoint Dirs : " + checkpointDirs
|
||||
@ -388,12 +390,14 @@ public void doWork() {
|
||||
if(UserGroupInformation.isSecurityEnabled())
|
||||
UserGroupInformation.getCurrentUser().checkTGTAndReloginFromKeytab();
|
||||
|
||||
final long now = Time.monotonicNow();
|
||||
final long monotonicNow = Time.monotonicNow();
|
||||
final long now = Time.now();
|
||||
|
||||
if (shouldCheckpointBasedOnCount() ||
|
||||
now >= lastCheckpointTime + 1000 * checkpointConf.getPeriod()) {
|
||||
monotonicNow >= lastCheckpointTime + 1000 * checkpointConf.getPeriod()) {
|
||||
doCheckpoint();
|
||||
lastCheckpointTime = now;
|
||||
lastCheckpointTime = monotonicNow;
|
||||
lastCheckpointWallclockTime = now;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOG.error("Exception in doCheckpoint", e);
|
||||
@ -695,22 +699,31 @@ public void startCheckpointThread() {
|
||||
checkpointThread.start();
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXXBean
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public String getHostAndPort() {
|
||||
return NetUtils.getHostPortString(nameNodeAddr);
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXXBean
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public long getStartTime() {
|
||||
return starttime;
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXXBean
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public long getLastCheckpointTime() {
|
||||
return lastCheckpointTime;
|
||||
return lastCheckpointWallclockTime;
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXXBean
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public long getLastCheckpointDeltaMs() {
|
||||
if (lastCheckpointTime == 0) {
|
||||
return -1;
|
||||
} else {
|
||||
return (Time.monotonicNow() - lastCheckpointTime);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public String[] getCheckpointDirectories() {
|
||||
ArrayList<String> r = Lists.newArrayListWithCapacity(checkpointDirs.size());
|
||||
for (URI d : checkpointDirs) {
|
||||
@ -719,7 +732,7 @@ public String[] getCheckpointDirectories() {
|
||||
return r.toArray(new String[r.size()]);
|
||||
}
|
||||
|
||||
@Override // SecondaryNameNodeInfoMXXBean
|
||||
@Override // SecondaryNameNodeInfoMXBean
|
||||
public String[] getCheckpointEditlogDirectories() {
|
||||
ArrayList<String> r = Lists.newArrayListWithCapacity(checkpointEditsDirs.size());
|
||||
for (URI d : checkpointEditsDirs) {
|
||||
|
@ -41,6 +41,12 @@ public interface SecondaryNameNodeInfoMXBean extends VersionInfoMXBean {
|
||||
*/
|
||||
public long getLastCheckpointTime();
|
||||
|
||||
/**
|
||||
* @return the number of msec since the last checkpoint, or -1 if no
|
||||
* checkpoint has been done yet.
|
||||
*/
|
||||
public long getLastCheckpointDeltaMs();
|
||||
|
||||
/**
|
||||
* @return the directories that store the checkpoint images
|
||||
*/
|
||||
|
@ -65,7 +65,7 @@
|
||||
<tr><th>Compiled</th><td>{CompileInfo}</td></tr>
|
||||
<tr><th>NameNode Address</th><td>{HostAndPort}</td></tr>
|
||||
<tr><th>Started</th><td>{StartTime|date_tostring}</td></tr>
|
||||
<tr><th>Last Checkpoint</th><td>{@if cond="{LastCheckpointTime} === 0"}Never{:else}{LastCheckpointTime|date_tostring}{/if}</td></tr>
|
||||
<tr><th>Last Checkpoint</th><td>{@if cond="{LastCheckpointTime} === 0"}Never{:else}{LastCheckpointTime|date_tostring} ({LastCheckpointDeltaMs|fmt_time} ago){/if}</td></tr>
|
||||
<tr><th>Checkpoint Period</th><td>{CheckpointPeriod} seconds</td></tr>
|
||||
<tr><th>Checkpoint Transactions</th><td>{TxnCount}</td></tr>
|
||||
</table>
|
||||
|
@ -40,6 +40,9 @@
|
||||
},
|
||||
|
||||
'fmt_time': function (v) {
|
||||
if (v < 0) {
|
||||
return "unknown";
|
||||
}
|
||||
var s = Math.floor(v / 1000), h = Math.floor(s / 3600);
|
||||
s -= h * 3600;
|
||||
var m = Math.floor(s / 60);
|
||||
|
Loading…
Reference in New Issue
Block a user