Author: arp Date: Thu May 15 22:21:48 2014 New Revision: 1595063 URL: http://svn.apache.org/r1595063 Log: HDFS-4052. Merge r1398631 from trunk to branch-2.
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1595063&r1=1595062&r2=1595063&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Thu May 15 22:21:48 2014 @@ -305,6 +305,9 @@ Release 2.4.1 - UNRELEASED HDFS-6361. TestIdUserGroup.testUserUpdateSetting failed due to out of range nfsnobody Id. (Yongjun Zhang via brandonli) + HDFS-4052. BlockManager#invalidateWork should print log outside the lock. + (Jing Zhao via suresh) + Release 2.4.0 - 2014-04-07 INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java?rev=1595063&r1=1595062&r2=1595063&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java Thu May 15 22:21:48 2014 @@ -3203,6 +3203,9 @@ public class BlockManager { * @return number of blocks scheduled for removal during this iteration. */ private int invalidateWorkForOneNode(String nodeId) { + final List<Block> toInvalidate; + final DatanodeDescriptor dn; + namesystem.writeLock(); try { // blocks should not be replicated or removed if safe mode is on @@ -3212,10 +3215,23 @@ public class BlockManager { } // get blocks to invalidate for the nodeId assert nodeId != null; - return invalidateBlocks.invalidateWork(nodeId); + dn = datanodeManager.getDatanode(nodeId); + if (dn == null) { + invalidateBlocks.remove(nodeId); + return 0; + } + toInvalidate = invalidateBlocks.invalidateWork(nodeId, dn); + if (toInvalidate == null) { + return 0; + } } finally { namesystem.writeUnlock(); } + if (NameNode.stateChangeLog.isInfoEnabled()) { + NameNode.stateChangeLog.info("BLOCK* " + getClass().getSimpleName() + + ": ask " + dn + " to delete " + toInvalidate); + } + return toInvalidate.size(); } boolean blockHasEnoughRacks(Block b) { Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java?rev=1595063&r1=1595062&r2=1595063&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/InvalidateBlocks.java Thu May 15 22:21:48 2014 @@ -170,36 +170,17 @@ class InvalidateBlocks { return pendingPeriodInMs - (Time.monotonicNow() - startupTime); } - /** Invalidate work for the storage. */ - int invalidateWork(final String storageId) { + synchronized List<Block> invalidateWork( + final String storageId, final DatanodeDescriptor dn) { final long delay = getInvalidationDelay(); if (delay > 0) { if (BlockManager.LOG.isDebugEnabled()) { BlockManager.LOG .debug("Block deletion is delayed during NameNode startup. " - + "The deletion will start after " + delay + " ms."); + + "The deletion will start after " + delay + " ms."); } - return 0; - } - final DatanodeDescriptor dn = datanodeManager.getDatanode(storageId); - if (dn == null) { - remove(storageId); - return 0; - } - final List<Block> toInvalidate = invalidateWork(storageId, dn); - if (toInvalidate == null) { - return 0; - } - - if (NameNode.stateChangeLog.isInfoEnabled()) { - NameNode.stateChangeLog.info("BLOCK* " + getClass().getSimpleName() - + ": ask " + dn + " to delete " + toInvalidate); + return null; } - return toInvalidate.size(); - } - - private synchronized List<Block> invalidateWork( - final String storageId, final DatanodeDescriptor dn) { final LightWeightHashSet<Block> set = node2blocks.get(storageId); if (set == null) { return null;