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 ha...@apache.org on 2009/04/03 01:53:59 UTC
svn commit: r761482 - in /hadoop/core/trunk: CHANGES.txt
src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Author: hairong
Date: Thu Apr 2 23:53:59 2009
New Revision: 761482
URL: http://svn.apache.org/viewvc?rev=761482&view=rev
Log:
HADOOP-5605. All the replicas incorrectly got marked as corrupt. Contributed by Hairong Kuang.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=761482&r1=761481&r2=761482&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Thu Apr 2 23:53:59 2009
@@ -1176,6 +1176,8 @@
HADOOP-5607. Fix NPE in TestCapacityScheduler. (cdouglas)
+ HADOOP-5605. All the replicas incorrectly got marked as corrupt. (hairong)
+
Release 0.19.2 - Unreleased
BUG FIXES
Modified: hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=761482&r1=761481&r2=761482&view=diff
==============================================================================
--- hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/core/trunk/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Thu Apr 2 23:53:59 2009
@@ -1582,7 +1582,8 @@
" does not exist. ");
}
- if (!blocksMap.contains(blk, node)) {
+ final BlockInfo storedBlockInfo = blocksMap.getStoredBlock(blk);
+ if (storedBlockInfo == null) {
// Check if the replica is in the blockMap, if not
// ignore the request for now. This could happen when BlockScanner
// thread of Datanode reports bad block before Block reports are sent
@@ -1592,16 +1593,23 @@
"as corrupt as it does not exists in " +
"blocksMap");
} else {
- INodeFile inode = blocksMap.getINode(blk);
- assert inode!=null : (blk + " in blocksMap must belongs to a file.");
+ INodeFile inode = storedBlockInfo.getINode();
+ if (inode == null) {
+ NameNode.stateChangeLog.info("BLOCK NameSystem.markBlockAsCorrupt: " +
+ "block " + blk + " could not be marked " +
+ "as corrupt as it does not belong to " +
+ "any file");
+ addToInvalidates(storedBlockInfo, node);
+ return;
+ }
// Add this replica to corruptReplicas Map
- corruptReplicas.addToCorruptReplicasMap(blk, node);
- if (countNodes(blk).liveReplicas()>inode.getReplication()) {
+ corruptReplicas.addToCorruptReplicasMap(storedBlockInfo, node);
+ if (countNodes(storedBlockInfo).liveReplicas()>inode.getReplication()) {
// the block is over-replicated so invalidate the replicas immediately
- invalidateBlock(blk, node);
+ invalidateBlock(storedBlockInfo, node);
} else {
// add the block to neededReplication
- updateNeededReplications(blk, -1, 0);
+ updateNeededReplications(storedBlockInfo, -1, 0);
}
}
}