You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sh...@apache.org on 2008/03/20 18:30:30 UTC
svn commit: r639378 - in /hadoop/core/trunk: CHANGES.txt
src/java/org/apache/hadoop/dfs/FSNamesystem.java
Author: shv
Date: Thu Mar 20 10:30:29 2008
New Revision: 639378
URL: http://svn.apache.org/viewvc?rev=639378&view=rev
Log:
HADOOP-2373. Improvement in safe-mode reporting. Contributed by Konstantin Shvachko.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=639378&r1=639377&r2=639378&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Thu Mar 20 10:30:29 2008
@@ -129,6 +129,8 @@
HADOOP-2886. Track individual RPC metrics.
(girish vaitheeswaran via dhruba)
+ HADOOP-2373. Improvement in safe-mode reporting. (shv)
+
OPTIMIZATIONS
HADOOP-2790. Fixed inefficient method hasSpeculativeTask by removing
Modified: hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java?rev=639378&r1=639377&r2=639378&view=diff
==============================================================================
--- hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java (original)
+++ hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Thu Mar 20 10:30:29 2008
@@ -3647,6 +3647,8 @@
int blockTotal;
/** Number of safe blocks. */
private int blockSafe;
+ /** time of the last status printout */
+ private long lastStatusReport = 0;
/**
* Creates SafeModeInfo when the name node enters
@@ -3678,6 +3680,7 @@
this.blockSafe = -1;
this.reached = -1;
enter();
+ reportStatus("STATE* Safe mode is ON.", true);
}
/**
@@ -3699,10 +3702,6 @@
* Enter safe mode.
*/
void enter() {
- if (reached != 0)
- NameNode.stateChangeLog.info(
- "STATE* SafeModeInfo.enter: " + "Safe mode is ON.\n"
- + getTurnOffTip());
this.reached = 0;
}
@@ -3722,18 +3721,16 @@
if(needUpgrade) {
// switch to manual safe mode
safeMode = new SafeModeInfo();
- NameNode.stateChangeLog.info("STATE* SafeModeInfo.leave: "
- + "Safe mode is ON.\n" + getTurnOffTip());
return;
}
}
long timeInSafemode = now() - systemStart;
- LOG.info("Leaving safemode after " + timeInSafemode + " msecs");
+ NameNode.stateChangeLog.info("STATE* Leaving safe mode after "
+ + timeInSafemode/1000 + " secs.");
NameNode.getNameNodeMetrics().safeModeTime.set((int) timeInSafemode);
if (reached >= 0) {
- NameNode.stateChangeLog.info(
- "STATE* SafeModeInfo.leave: " + "Safe mode is OFF.");
+ NameNode.stateChangeLog.info("STATE* Safe mode is OFF.");
}
reached = -1;
safeMode = null;
@@ -3753,8 +3750,10 @@
synchronized boolean canLeave() {
if (reached == 0)
return false;
- if (now() - reached < extension)
+ if (now() - reached < extension) {
+ reportStatus("STATE* Safe mode ON.", false);
return false;
+ }
return !needEnter();
}
@@ -3780,6 +3779,7 @@
private void checkMode() {
if (needEnter()) {
enter();
+ reportStatus("STATE* Safe mode ON.", false);
return;
}
// the threshold is reached
@@ -3788,12 +3788,15 @@
this.leave(true); // leave safe mode
return;
}
- if (reached > 0) // threshold has already been reached before
+ if (reached > 0) { // threshold has already been reached before
+ reportStatus("STATE* Safe mode ON.", false);
return;
+ }
// start monitor
reached = now();
smmthread = new Daemon(new SafeModeMonitor());
smmthread.start();
+ reportStatus("STATE* Safe mode extension entered.", true);
}
/**
@@ -3837,14 +3840,38 @@
* A tip on how safe mode is to be turned off: manually or automatically.
*/
String getTurnOffTip() {
- return (isManual() ? getDistributedUpgradeState() ?
- "Safe mode will be turned off automatically upon completion of " +
- "the distributed upgrade: upgrade progress = " +
- getDistributedUpgradeStatus() + "%" :
- "Use \"hadoop dfs -safemode leave\" to turn safe mode off." :
- "Safe mode will be turned off automatically.");
+ final String autoOffMsg = "Safe mode will be turned off automatically";
+ if(reached < 0)
+ return "Safe mode is OFF.";
+ if(isManual()) {
+ if(getDistributedUpgradeState())
+ return autoOffMsg + " upon completion of " +
+ "the distributed upgrade: upgrade progress = " +
+ getDistributedUpgradeStatus() + "%";
+ return "Use \"hadoop dfs -safemode leave\" to turn safe mode off.";
+ }
+ String safeBlockRatioMsg =
+ String.format(
+ "The ratio of reported blocks %.4f has not reached the threshold %.4f. ",
+ getSafeBlockRatio(), threshold) + autoOffMsg;
+ if(reached == 0) // threshold is not reached
+ return safeBlockRatioMsg + ".";
+ // extension period is in progress
+ return safeBlockRatioMsg + " in "
+ + Math.abs(reached + extension - now())/1000 + " seconds.";
}
-
+
+ /**
+ * Print status every 20 seconds.
+ */
+ private void reportStatus(String msg, boolean rightNow) {
+ long curTime = now();
+ if(!rightNow && (curTime - lastStatusReport < 20 * 1000))
+ return;
+ NameNode.stateChangeLog.info(msg + " \n" + getTurnOffTip());
+ lastStatusReport = curTime;
+ }
+
/**
* Returns printable state of the class.
*/
@@ -3973,8 +4000,7 @@
*/
synchronized void enterSafeMode() throws IOException {
if (isInSafeMode()) {
- NameNode.stateChangeLog.info(
- "STATE* FSNamesystem.enterSafeMode: " + "Safe mode is already ON.");
+ NameNode.stateChangeLog.info("STATE* Safe mode is already ON.");
return;
}
safeMode = new SafeModeInfo();
@@ -3986,8 +4012,7 @@
*/
synchronized void leaveSafeMode(boolean checkForUpgrades) throws IOException {
if (!isInSafeMode()) {
- NameNode.stateChangeLog.info(
- "STATE* FSNamesystem.leaveSafeMode: " + "Safe mode is already OFF.");
+ NameNode.stateChangeLog.info("STATE* Safe mode is already OFF.");
return;
}
if(getDistributedUpgradeState())