Author: shv
Date: Fri Feb 4 04:11:10 2011
New Revision: 1067080
URL: http://svn.apache.org/viewvc?rev=1067080&view=rev
Log:
HDFS-900. Merge 1067079 from trunk to branch 0.22.
Modified:
hadoop/hdfs/branches/branch-0.22/CHANGES.txt
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java
Modified: hadoop/hdfs/branches/branch-0.22/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.22/CHANGES.txt?rev=1067080&r1=1067079&r2=1067080&view=diff
==============================================================================
--- hadoop/hdfs/branches/branch-0.22/CHANGES.txt (original)
+++ hadoop/hdfs/branches/branch-0.22/CHANGES.txt Fri Feb 4 04:11:10 2011
@@ -437,6 +437,8 @@ Release 0.22.0 - Unreleased
HDFS-1591. HDFS part of HADOOP-6642. (Chris Douglas, Po Cheung via shv)
+ HDFS-900. Corrupt replicas are not processed correctly in block report
(shv)
+
Release 0.21.1 - Unreleased
IMPROVEMENTS
Modified:
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java?rev=1067080&r1=1067079&r2=1067080&view=diff
==============================================================================
---
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java
(original)
+++
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/BlockManager.java
Fri Feb 4 04:11:10 2011
@@ -399,8 +399,7 @@ public class BlockManager {
blocksMap.nodeIterator(block); it.hasNext();) {
String storageID = it.next().getStorageID();
// filter invalidate replicas
- Collection<Block> blocks = recentInvalidateSets.get(storageID);
- if(blocks==null || !blocks.contains(block)) {
+ if( ! belongsToInvalidates(storageID, block)) {
machineSet.add(storageID);
}
}
@@ -498,16 +497,21 @@ public class BlockManager {
minReplication);
}
- void removeFromInvalidates(String datanodeId, Block block) {
- Collection<Block> v = recentInvalidateSets.get(datanodeId);
+ void removeFromInvalidates(String storageID, Block block) {
+ Collection<Block> v = recentInvalidateSets.get(storageID);
if (v != null && v.remove(block)) {
pendingDeletionBlocksCount--;
if (v.isEmpty()) {
- recentInvalidateSets.remove(datanodeId);
+ recentInvalidateSets.remove(storageID);
}
}
}
+ boolean belongsToInvalidates(String storageID, Block block) {
+ Collection<Block> invalidateSet = recentInvalidateSets.get(storageID);
+ return invalidateSet != null && invalidateSet.contains(block);
+ }
+
/**
* Adds block to list of blocks which will be invalidated on specified
* datanode
Modified:
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java?rev=1067080&r1=1067079&r2=1067080&view=diff
==============================================================================
---
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java
(original)
+++
hadoop/hdfs/branches/branch-0.22/src/java/org/apache/hadoop/hdfs/server/namenode/DatanodeDescriptor.java
Fri Feb 4 04:11:10 2011
@@ -499,6 +499,13 @@ public class DatanodeDescriptor extends
storedBlock.getBlockUCState());
}
+ // Ignore replicas already scheduled to be removed from the DN
+ if(blockManager.belongsToInvalidates(getStorageID(), block)) {
+ assert storedBlock.findDatanode(this) < 0 : "Block " + block
+ + " in recentInvalidatesSet should not appear in DN " + this;
+ return storedBlock;
+ }
+
// Block is on the DN
boolean isCorrupt = false;
switch(rState) {