Return-Path: X-Original-To: apmail-hadoop-hdfs-commits-archive@minotaur.apache.org Delivered-To: apmail-hadoop-hdfs-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BB97B82F6 for ; Fri, 26 Aug 2011 04:42:39 +0000 (UTC) Received: (qmail 35868 invoked by uid 500); 26 Aug 2011 04:42:38 -0000 Delivered-To: apmail-hadoop-hdfs-commits-archive@hadoop.apache.org Received: (qmail 35719 invoked by uid 500); 26 Aug 2011 04:42:25 -0000 Mailing-List: contact hdfs-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hdfs-dev@hadoop.apache.org Delivered-To: mailing list hdfs-commits@hadoop.apache.org Received: (qmail 35711 invoked by uid 99); 26 Aug 2011 04:42:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2011 04:42:21 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.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; Fri, 26 Aug 2011 04:42:15 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id B3EFF23889E2; Fri, 26 Aug 2011 04:41:53 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1161991 - in /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src: main/java/org/apache/hadoop/hdfs/server/blockmanagement/ main/java/org/apache/hadoop/hdfs/server/datanode/ main/java/org/apache/hadoop/hdfs/server/namenode/ main/java/o... Date: Fri, 26 Aug 2011 04:41:53 -0000 To: hdfs-commits@hadoop.apache.org From: hairong@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110826044153.B3EFF23889E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: hairong Date: Fri Aug 26 04:41:52 2011 New Revision: 1161991 URL: http://svn.apache.org/viewvc?rev=1161991&view=rev Log: Revert 1161976 since the log message was incorrectly marked the issue as HDFS-349. Removed: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/ReceivedDeletedBlockInfo.java Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/FSDataset.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/FSDatasetAsyncDiskService.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockCommand.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NNThroughputBenchmark.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestDeadDatanode.java Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java?rev=1161991&r1=1161990&r2=1161991&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java Fri Aug 26 04:41:52 2011 @@ -59,12 +59,10 @@ import org.apache.hadoop.hdfs.server.nam import org.apache.hadoop.hdfs.server.namenode.INodeFileUnderConstruction; import org.apache.hadoop.hdfs.server.namenode.NameNode; import org.apache.hadoop.hdfs.server.namenode.Namesystem; -import org.apache.hadoop.hdfs.server.protocol.BlockCommand; import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations.BlockWithLocations; import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand; import org.apache.hadoop.hdfs.server.protocol.KeyUpdateCommand; -import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo; import org.apache.hadoop.net.Node; import org.apache.hadoop.util.Daemon; @@ -2004,7 +2002,7 @@ public class BlockManager { * Modify (block-->datanode) map. Possibly generate replication tasks, if the * removed block is still valid. */ - public void removeStoredBlock(Block block, DatanodeDescriptor node) { + private void removeStoredBlock(Block block, DatanodeDescriptor node) { if(NameNode.stateChangeLog.isDebugEnabled()) { NameNode.stateChangeLog.debug("BLOCK* removeStoredBlock: " + block + " from " + node.getName()); @@ -2123,48 +2121,27 @@ public class BlockManager { } } - /** The given node is reporting that it received/deleted certain blocks. */ - public void blockReceivedAndDeleted(final DatanodeID nodeID, - final String poolId, - final ReceivedDeletedBlockInfo receivedAndDeletedBlocks[] - ) throws IOException { + /** The given node is reporting that it received a certain block. */ + public void blockReceived(final DatanodeID nodeID, final String poolId, + final Block block, final String delHint) throws IOException { namesystem.writeLock(); - int received = 0; - int deleted = 0; try { final DatanodeDescriptor node = datanodeManager.getDatanode(nodeID); if (node == null || !node.isAlive) { - NameNode.stateChangeLog - .warn("BLOCK* blockReceivedDeleted" - + " is received from dead or unregistered node " - + nodeID.getName()); - throw new IOException( - "Got blockReceivedDeleted message from unregistered or dead node"); + final String s = block + " is received from dead or unregistered node " + + nodeID.getName(); + NameNode.stateChangeLog.warn("BLOCK* blockReceived: " + s); + throw new IOException(s); + } + + if (NameNode.stateChangeLog.isDebugEnabled()) { + NameNode.stateChangeLog.debug("BLOCK* blockReceived: " + block + + " is received from " + nodeID.getName()); } - for (int i = 0; i < receivedAndDeletedBlocks.length; i++) { - if (receivedAndDeletedBlocks[i].isDeletedBlock()) { - removeStoredBlock( - receivedAndDeletedBlocks[i].getBlock(), node); - deleted++; - } else { - addBlock(node, receivedAndDeletedBlocks[i].getBlock(), - receivedAndDeletedBlocks[i].getDelHints()); - received++; - } - if (NameNode.stateChangeLog.isDebugEnabled()) { - NameNode.stateChangeLog.debug("BLOCK* block" - + (receivedAndDeletedBlocks[i].isDeletedBlock() ? "Deleted" - : "Received") + ": " + receivedAndDeletedBlocks[i].getBlock() - + " is received from " + nodeID.getName()); - } - } + addBlock(node, block, delHint); } finally { namesystem.writeUnlock(); - NameNode.stateChangeLog - .debug("*BLOCK* NameNode.blockReceivedAndDeleted: " + "from " - + nodeID.getName() + " received: " + received + ", " - + " deleted: " + deleted); } } @@ -2339,7 +2316,6 @@ public class BlockManager { } public void removeBlock(Block block) { - block.setNumBytes(BlockCommand.NO_ACK); addToInvalidates(block); corruptReplicas.removeFromCorruptReplicasMap(block); blocksMap.removeBlock(block); Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java?rev=1161991&r1=1161990&r2=1161991&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java Fri Aug 26 04:41:52 2011 @@ -106,7 +106,6 @@ import org.apache.hadoop.hdfs.server.pro import org.apache.hadoop.hdfs.server.protocol.InterDatanodeProtocol; import org.apache.hadoop.hdfs.server.protocol.KeyUpdateCommand; import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; -import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo; import org.apache.hadoop.hdfs.server.protocol.ReplicaRecoveryInfo; import org.apache.hadoop.hdfs.server.protocol.UpgradeCommand; import org.apache.hadoop.hdfs.server.protocol.BalancerBandwidthCommand; @@ -349,8 +348,6 @@ public class DataNode extends Configured ThreadGroup threadGroup = null; long blockReportInterval; boolean resetBlockReportTime = true; - long deleteReportInterval; - long lastDeletedReport = 0; long initialBlockReportDelay = DFS_BLOCKREPORT_INTERVAL_MSEC_DEFAULT * 1000L; long heartBeatInterval; private boolean heartbeatsDisabledForTests = false; @@ -461,7 +458,6 @@ public class DataNode extends Configured this.heartBeatInterval = conf.getLong(DFS_HEARTBEAT_INTERVAL_KEY, DFS_HEARTBEAT_INTERVAL_DEFAULT) * 1000L; - this.deleteReportInterval = 100 * heartBeatInterval; // do we need to sync block file contents to disk when blockfile is closed? this.syncOnClose = conf.getBoolean(DFS_DATANODE_SYNCONCLOSE_KEY, DFS_DATANODE_SYNCONCLOSE_DEFAULT); @@ -647,17 +643,6 @@ public class DataNode extends Configured } } - // calls specific to BP - protected void notifyNamenodeDeletedBlock(ExtendedBlock block) { - BPOfferService bpos = blockPoolManager.get(block.getBlockPoolId()); - if (bpos != null) { - bpos.notifyNamenodeDeletedBlock(block); - } else { - LOG.warn("Cannot find BPOfferService for reporting block deleted for bpid=" - + block.getBlockPoolId()); - } - } - public void reportBadBlocks(ExtendedBlock block) throws IOException{ BPOfferService bpos = blockPoolManager.get(block.getBlockPoolId()); if(bpos == null || bpos.bpNamenode == null) { @@ -692,9 +677,8 @@ public class DataNode extends Configured private String blockPoolId; private long lastHeartbeat = 0; private volatile boolean initialized = false; - private final LinkedList receivedAndDeletedBlockList - = new LinkedList(); - private volatile int pendingReceivedRequests = 0; + private final LinkedList receivedBlockList = new LinkedList(); + private final LinkedList delHints = new LinkedList(); private volatile boolean shouldServiceRun = true; private boolean isBlockTokenInitialized = false; UpgradeManagerDatanode upgradeManager = null; @@ -864,33 +848,41 @@ public class DataNode extends Configured /** * Report received blocks and delete hints to the Namenode - * * @throws IOException */ - private void reportReceivedDeletedBlocks() throws IOException { - - // check if there are newly received blocks - ReceivedDeletedBlockInfo[] receivedAndDeletedBlockArray = null; - int currentReceivedRequestsCounter; - synchronized (receivedAndDeletedBlockList) { - currentReceivedRequestsCounter = pendingReceivedRequests; - int numBlocks = receivedAndDeletedBlockList.size(); - if (numBlocks > 0) { - // - // Send newly-received and deleted blockids to namenode - // - receivedAndDeletedBlockArray = receivedAndDeletedBlockList - .toArray(new ReceivedDeletedBlockInfo[numBlocks]); + private void reportReceivedBlocks() throws IOException { + //check if there are newly received blocks + Block [] blockArray=null; + String [] delHintArray=null; + synchronized(receivedBlockList) { + synchronized(delHints){ + int numBlocks = receivedBlockList.size(); + if (numBlocks > 0) { + if(numBlocks!=delHints.size()) { + LOG.warn("Panic: receiveBlockList and delHints are not of " + + "the same length" ); + } + // + // Send newly-received blockids to namenode + // + blockArray = receivedBlockList.toArray(new Block[numBlocks]); + delHintArray = delHints.toArray(new String[numBlocks]); + } } } - if (receivedAndDeletedBlockArray != null) { - bpNamenode.blockReceivedAndDeleted(bpRegistration, blockPoolId, - receivedAndDeletedBlockArray); - synchronized (receivedAndDeletedBlockList) { - for (int i = 0; i < receivedAndDeletedBlockArray.length; i++) { - receivedAndDeletedBlockList.remove(receivedAndDeletedBlockArray[i]); + if (blockArray != null) { + if(delHintArray == null || delHintArray.length != blockArray.length ) { + LOG.warn("Panic: block array & delHintArray are not the same" ); + } + bpNamenode.blockReceived(bpRegistration, blockPoolId, blockArray, + delHintArray); + synchronized(receivedBlockList) { + synchronized(delHints){ + for(int i=0; i