Return-Path: Delivered-To: apmail-hadoop-core-commits-archive@www.apache.org Received: (qmail 61695 invoked from network); 23 Jun 2008 21:36:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Jun 2008 21:36:13 -0000 Received: (qmail 71627 invoked by uid 500); 23 Jun 2008 21:36:14 -0000 Delivered-To: apmail-hadoop-core-commits-archive@hadoop.apache.org Received: (qmail 71596 invoked by uid 500); 23 Jun 2008 21:36:14 -0000 Mailing-List: contact core-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: core-dev@hadoop.apache.org Delivered-To: mailing list core-commits@hadoop.apache.org Received: (qmail 71587 invoked by uid 99); 23 Jun 2008 21:36:14 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Jun 2008 14:36:14 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 Jun 2008 21:35:33 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5BC392388A04; Mon, 23 Jun 2008 14:35:52 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Mon, 23 Jun 2008 21:35:52 -0000 To: core-commits@hadoop.apache.org From: shv@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080623213552.5BC392388A04@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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);