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 sh...@apache.org on 2008/06/23 20:50:24 UTC
svn commit: r670709 - in /hadoop/core/trunk: CHANGES.txt
src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
Author: shv
Date: Mon Jun 23 11:50:24 2008
New Revision: 670709
URL: http://svn.apache.org/viewvc?rev=670709&view=rev
Log:
HADOOP-3571. Fix bug in block removal used in lease recovery. Contributed by Konstantin Shvachko.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=670709&r1=670708&r2=670709&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Mon Jun 23 11:50:24 2008
@@ -707,6 +707,8 @@
HADOOP-3537. Disallow adding a datanode to a network topology when its
network location is not resolved. (hairong)
+ HADOOP-3571. Fix bug in block removal used in lease recovery. (shv)
+
Release 0.17.0 - 2008-05-18
INCOMPATIBLE CHANGES
Modified: hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java?rev=670709&r1=670708&r2=670709&view=diff
==============================================================================
--- hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java (original)
+++ hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java Mon Jun 23 11:50:24 2008
@@ -156,11 +156,7 @@
* Remove data-node from the block.
*/
boolean removeNode(DatanodeDescriptor node) {
- return removeNode(findDatanode(node));
- }
-
- /** Remove the indexed datanode from the block. */
- boolean removeNode(int dnIndex) {
+ int dnIndex = findDatanode(node);
if(dnIndex < 0) // the node is not found
return false;
assert getPrevious(dnIndex) == null && getNext(dnIndex) == null :
@@ -336,18 +332,19 @@
}
/**
- * Remove the block from the block map.
- * If the mapped BlockInfo is not null,
- * it also removes the datanodes associated with the BlockInfo.
- */
- void remove(Block b) {
- BlockInfo info = map.remove(b);
- if (info != null) {
- info.inode = null;
- for(int n = info.numNodes(); n >= 0; ) {
- info.removeNode(--n);
- }
+ * Remove the block from the block map;
+ * remove it from all data-node lists it belongs to;
+ * and remove all data-node locations associated with the block.
+ */
+ void removeBlock(BlockInfo blockInfo) {
+ if (blockInfo == null)
+ return;
+ blockInfo.inode = null;
+ for(int idx = blockInfo.numNodes()-1; idx >= 0; idx--) {
+ DatanodeDescriptor dn = blockInfo.getDatanode(idx);
+ dn.removeBlock(blockInfo); // remove from the list and wipe the location
}
+ map.remove(blockInfo); // remove block from the map
}
/** Returns the block object it it exists in the map. */
Modified: hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java?rev=670709&r1=670708&r2=670709&view=diff
==============================================================================
--- hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java (original)
+++ hadoop/core/trunk/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java Mon Jun 23 11:50:24 2008
@@ -1716,8 +1716,8 @@
INodeFileUnderConstruction pendingFile = (INodeFileUnderConstruction)iFile;
// Remove old block from blocks map. This always have to be done
- // because the generationstamp of this block is changing.
- blocksMap.remove(lastblock);
+ // because the generation stamp of this block is changing.
+ blocksMap.removeBlock(oldblockinfo);
if (deleteblock) {
pendingFile.removeBlock(lastblock);