Author: suresh
Date: Tue Mar 29 22:12:05 2011
New Revision: 1086784
URL: http://svn.apache.org/viewvc?rev=1086784&view=rev
Log:
HDFS-1767. Namenode ignores non-initial block report from datanodes when in
safemode during startup. Contributed by Matt Foley.
Modified:
hadoop/common/branches/branch-0.20-security/CHANGES.txt
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Modified: hadoop/common/branches/branch-0.20-security/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/CHANGES.txt?rev=1086784&r1=1086783&r2=1086784&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.20-security/CHANGES.txt Tue Mar 29 22:12:05
2011
@@ -24,6 +24,9 @@ Release 0.20.204.0 - unreleased
HDFS-1541. Not marking datanodes dead when namenode in safemode.
(hairong)
+ HDFS-1767. Namenode ignores non-initial block report from datanodes
+ when in safemode during startup. (Matt Foley via suresh)
+
Release 0.20.203.0 - unreleased
HADOOP-7190. Add metrics v1 back for backwards compatibility. (omalley)
Modified:
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1086784&r1=1086783&r2=1086784&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
(original)
+++
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Tue Mar 29 22:12:05 2011
@@ -3157,6 +3157,15 @@ public class FSNamesystem implements FSC
throw new DisallowedDatanodeException(node);
}
+ // To minimize startup time, we discard any second (or later) block reports
+ // that we receive while still in startup phase.
+ if (isInStartupSafeMode() && node.numBlocks() > 0) {
+ NameNode.stateChangeLog.info("BLOCK* NameSystem.processReport: "
+ + "discarded non-initial block report from " + nodeID.getName()
+ + " because namenode still in startup phase");
+ return;
+ }
+
//
// Modify the (block-->datanode) map, according to the difference
// between the old and new block report.
@@ -4636,6 +4645,15 @@ public class FSNamesystem implements FSC
}
/**
+ * Check whether the name node is in startup mode.
+ */
+ synchronized boolean isInStartupSafeMode() {
+ if (safeMode == null)
+ return false;
+ return safeMode.isOn() && !safeMode.isManual();
+ }
+
+ /**
* Increment number of blocks that reached minimal replication.
* @param replication current replication
*/