You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by su...@apache.org on 2011/03/29 21:25:52 UTC
svn commit: r1086693 - in /hadoop/hdfs/trunk: CHANGES.txt
src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Author: suresh
Date: Tue Mar 29 19:25:52 2011
New Revision: 1086693
URL: http://svn.apache.org/viewvc?rev=1086693&view=rev
Log:
HDFS-1767. Namenode ignores non-initial block report from datanodes when in safemode during startup. Contributed by Matt Foley.
Modified:
hadoop/hdfs/trunk/CHANGES.txt
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=1086693&r1=1086692&r2=1086693&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Tue Mar 29 19:25:52 2011
@@ -92,6 +92,9 @@ Trunk (unreleased changes)
HDFS-1789. Refactor frequently used codes from DFSOutputStream and
DataXceiver. (szetszwo)
+ HDFS-1767. Namenode ignores non-initial block report from datanodes
+ when in safemode during startup. (Matt Foley via suresh)
+
OPTIMIZATIONS
HDFS-1458. Improve checkpoint performance by avoiding unnecessary image
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1086693&r1=1086692&r2=1086693&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Tue Mar 29 19:25:52 2011
@@ -3103,6 +3103,14 @@ public class FSNamesystem implements FSC
throw new IOException("ProcessReport from dead or unregisterted node: "
+ nodeID.getName());
}
+ // 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;
+ }
blockManager.processReport(node, newReport);
NameNode.getNameNodeMetrics().blockReport.inc((int) (now() - startTime));
@@ -4170,6 +4178,15 @@ public class FSNamesystem implements FSC
return false;
return safeMode.isOn();
}
+
+ /**
+ * Check whether the name node is in startup mode.
+ */
+ synchronized boolean isInStartupSafeMode() {
+ if (safeMode == null)
+ return false;
+ return safeMode.isOn() && !safeMode.isManual();
+ }
/**
* Check whether replication queues are populated.