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 23:35:52 UTC
svn commit: r670776 - in /hadoop/core/branches/branch-0.18: CHANGES.txt
src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
Author: shv
Date: Mon Jun 23 14:35:51 2008
New Revision: 670776
URL: http://svn.apache.org/viewvc?rev=670776&view=rev
Log:
HADOOP-3571. Merge -r 670708:670709 from trunk to branch 0.18.
Modified:
hadoop/core/branches/branch-0.18/CHANGES.txt
hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
Modified: hadoop/core/branches/branch-0.18/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.18/CHANGES.txt?rev=670776&r1=670775&r2=670776&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.18/CHANGES.txt (original)
+++ hadoop/core/branches/branch-0.18/CHANGES.txt Mon Jun 23 14:35:51 2008
@@ -693,6 +693,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/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java?rev=670776&r1=670775&r2=670776&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java (original)
+++ hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/BlocksMap.java Mon Jun 23 14:35:51 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/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java?rev=670776&r1=670775&r2=670776&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java (original)
+++ hadoop/core/branches/branch-0.18/src/hdfs/org/apache/hadoop/dfs/FSNamesystem.java Mon Jun 23 14:35:51 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);