|
@@ -858,7 +858,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
LOG.info("Reducing replication for file " + src
|
|
|
+ ". New replication is " + replication);
|
|
|
for(int idx = 0; idx < fileBlocks.length; idx++)
|
|
|
- proccessOverReplicatedBlock(fileBlocks[idx], replication, null, null);
|
|
|
+ processOverReplicatedBlock(fileBlocks[idx], replication, null, null);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
@@ -1300,21 +1300,41 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Remove a datanode from the invalidatesSet
|
|
|
+ * @param n datanode
|
|
|
+ */
|
|
|
+ private void removeFromInvalidates(DatanodeInfo n) {
|
|
|
+ recentInvalidateSets.remove(n.getStorageID());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Adds block to list of blocks which will be invalidated on
|
|
|
- * specified datanode.
|
|
|
+ * specified datanode and log the move
|
|
|
+ * @param b block
|
|
|
+ * @param n datanode
|
|
|
*/
|
|
|
private void addToInvalidates(Block b, DatanodeInfo n) {
|
|
|
+ addToInvalidatesNoLog(b, n);
|
|
|
+ NameNode.stateChangeLog.info("BLOCK* NameSystem.addToInvalidates: "
|
|
|
+ + b.getBlockName() + " is added to invalidSet of " + n.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Adds block to list of blocks which will be invalidated on
|
|
|
+ * specified datanode
|
|
|
+ * @param b block
|
|
|
+ * @param n datanode
|
|
|
+ */
|
|
|
+ private void addToInvalidatesNoLog(Block b, DatanodeInfo n) {
|
|
|
Collection<Block> invalidateSet = recentInvalidateSets.get(n.getStorageID());
|
|
|
if (invalidateSet == null) {
|
|
|
invalidateSet = new HashSet<Block>();
|
|
|
recentInvalidateSets.put(n.getStorageID(), invalidateSet);
|
|
|
}
|
|
|
invalidateSet.add(b);
|
|
|
- NameNode.stateChangeLog.info("BLOCK* NameSystem.delete: "
|
|
|
- + b.getBlockName() + " is added to invalidSet of " + n.getName());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Adds block to list of blocks which will be invalidated on
|
|
|
* all its datanodes.
|
|
@@ -2559,6 +2579,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
|
|
|
void unprotectedRemoveDatanode(DatanodeDescriptor nodeDescr) {
|
|
|
nodeDescr.resetBlocks();
|
|
|
+ removeFromInvalidates(nodeDescr);
|
|
|
NameNode.stateChangeLog.debug(
|
|
|
"BLOCK* NameSystem.unprotectedRemoveDatanode: "
|
|
|
+ nodeDescr.getName() + " is out of service now.");
|
|
@@ -2839,7 +2860,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
updateNeededReplications(block, curReplicaDelta, 0);
|
|
|
}
|
|
|
if (numCurrentReplica > fileReplication) {
|
|
|
- proccessOverReplicatedBlock(block, fileReplication, node, delNodeHint);
|
|
|
+ processOverReplicatedBlock(block, fileReplication, node, delNodeHint);
|
|
|
}
|
|
|
// If the file replication has reached desired value
|
|
|
// we can remove any corrupt replicas the block may have
|
|
@@ -2920,7 +2941,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
if (numCurrentReplica > expectedReplication) {
|
|
|
// over-replicated block
|
|
|
nrOverReplicated++;
|
|
|
- proccessOverReplicatedBlock(block, expectedReplication, null, null);
|
|
|
+ processOverReplicatedBlock(block, expectedReplication, null, null);
|
|
|
}
|
|
|
}
|
|
|
LOG.info("Total number of blocks = " + blocksMap.size());
|
|
@@ -2934,7 +2955,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
* If there are any extras, call chooseExcessReplicates() to
|
|
|
* mark them in the excessReplicateMap.
|
|
|
*/
|
|
|
- private void proccessOverReplicatedBlock(Block block, short replication,
|
|
|
+ private void processOverReplicatedBlock(Block block, short replication,
|
|
|
DatanodeDescriptor addedNode, DatanodeDescriptor delNodeHint) {
|
|
|
if(addedNode == delNodeHint) {
|
|
|
delNodeHint = null;
|
|
@@ -3066,14 +3087,9 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
// should be deleted. Items are removed from the invalidate list
|
|
|
// upon giving instructions to the namenode.
|
|
|
//
|
|
|
- Collection<Block> invalidateSet = recentInvalidateSets.get(cur.getStorageID());
|
|
|
- if (invalidateSet == null) {
|
|
|
- invalidateSet = new ArrayList<Block>();
|
|
|
- recentInvalidateSets.put(cur.getStorageID(), invalidateSet);
|
|
|
- }
|
|
|
- invalidateSet.add(b);
|
|
|
- NameNode.stateChangeLog.debug("BLOCK* NameSystem.chooseExcessReplicates: "
|
|
|
- +"("+cur.getName()+", "+b+") is added to recentInvalidateSets");
|
|
|
+ addToInvalidatesNoLog(b, cur);
|
|
|
+ NameNode.stateChangeLog.info("BLOCK* NameSystem.chooseExcessReplicates: "
|
|
|
+ +"("+cur.getName()+", "+b+") is added to recentInvalidateSets");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3115,6 +3131,7 @@ class FSNamesystem implements FSConstants, FSNamesystemMBean {
|
|
|
excessReplicateMap.remove(node.getStorageID());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// Remove the replica from corruptReplicas
|
|
|
corruptReplicas.removeFromCorruptReplicasMap(block, node);
|
|
|
}
|