HDFS-4030. BlockManager excessBlocksCount and postponedMisreplicatedBlocksCount should be AtomicLongs. Contributed by Eli Collins

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1430462 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Eli Collins 2013-01-08 19:41:04 +00:00
parent 54221aa26a
commit 43295b9f7b
2 changed files with 14 additions and 10 deletions

View File

@ -454,6 +454,9 @@ Release 2.0.3-alpha - Unreleased
HADOOP-9173. Add security token protobuf definition to common and HADOOP-9173. Add security token protobuf definition to common and
use it in hdfs. (suresh) use it in hdfs. (suresh)
HDFS-4030. BlockManager excessBlocksCount and
postponedMisreplicatedBlocksCount should be AtomicLongs. (eli)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -33,6 +33,7 @@ import java.util.Map;
import java.util.Queue; import java.util.Queue;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -107,8 +108,8 @@ public class BlockManager {
private volatile long corruptReplicaBlocksCount = 0L; private volatile long corruptReplicaBlocksCount = 0L;
private volatile long underReplicatedBlocksCount = 0L; private volatile long underReplicatedBlocksCount = 0L;
private volatile long scheduledReplicationBlocksCount = 0L; private volatile long scheduledReplicationBlocksCount = 0L;
private volatile long excessBlocksCount = 0L; private AtomicLong excessBlocksCount = new AtomicLong(0L);
private volatile long postponedMisreplicatedBlocksCount = 0L; private AtomicLong postponedMisreplicatedBlocksCount = new AtomicLong(0L);
/** Used by metrics */ /** Used by metrics */
public long getPendingReplicationBlocksCount() { public long getPendingReplicationBlocksCount() {
@ -132,11 +133,11 @@ public class BlockManager {
} }
/** Used by metrics */ /** Used by metrics */
public long getExcessBlocksCount() { public long getExcessBlocksCount() {
return excessBlocksCount; return excessBlocksCount.get();
} }
/** Used by metrics */ /** Used by metrics */
public long getPostponedMisreplicatedBlocksCount() { public long getPostponedMisreplicatedBlocksCount() {
return postponedMisreplicatedBlocksCount; return postponedMisreplicatedBlocksCount.get();
} }
/** Used by metrics */ /** Used by metrics */
public int getPendingDataNodeMessageCount() { public int getPendingDataNodeMessageCount() {
@ -1066,7 +1067,7 @@ public class BlockManager {
private void postponeBlock(Block blk) { private void postponeBlock(Block blk) {
if (postponedMisreplicatedBlocks.add(blk)) { if (postponedMisreplicatedBlocks.add(blk)) {
postponedMisreplicatedBlocksCount++; postponedMisreplicatedBlocksCount.incrementAndGet();
} }
} }
@ -1598,7 +1599,7 @@ public class BlockManager {
"in block map."); "in block map.");
} }
it.remove(); it.remove();
postponedMisreplicatedBlocksCount--; postponedMisreplicatedBlocksCount.decrementAndGet();
continue; continue;
} }
MisReplicationResult res = processMisReplicatedBlock(bi); MisReplicationResult res = processMisReplicatedBlock(bi);
@ -1608,7 +1609,7 @@ public class BlockManager {
} }
if (res != MisReplicationResult.POSTPONE) { if (res != MisReplicationResult.POSTPONE) {
it.remove(); it.remove();
postponedMisreplicatedBlocksCount--; postponedMisreplicatedBlocksCount.decrementAndGet();
} }
} }
} }
@ -2445,7 +2446,7 @@ assert storedBlock.findDatanode(dn) < 0 : "Block " + block
excessReplicateMap.put(dn.getStorageID(), excessBlocks); excessReplicateMap.put(dn.getStorageID(), excessBlocks);
} }
if (excessBlocks.add(block)) { if (excessBlocks.add(block)) {
excessBlocksCount++; excessBlocksCount.incrementAndGet();
if(blockLog.isDebugEnabled()) { if(blockLog.isDebugEnabled()) {
blockLog.debug("BLOCK* addToExcessReplicate:" blockLog.debug("BLOCK* addToExcessReplicate:"
+ " (" + dn + ", " + block + " (" + dn + ", " + block
@ -2493,7 +2494,7 @@ assert storedBlock.findDatanode(dn) < 0 : "Block " + block
.getStorageID()); .getStorageID());
if (excessBlocks != null) { if (excessBlocks != null) {
if (excessBlocks.remove(block)) { if (excessBlocks.remove(block)) {
excessBlocksCount--; excessBlocksCount.decrementAndGet();
if(blockLog.isDebugEnabled()) { if(blockLog.isDebugEnabled()) {
blockLog.debug("BLOCK* removeStoredBlock: " blockLog.debug("BLOCK* removeStoredBlock: "
+ block + " is removed from excessBlocks"); + block + " is removed from excessBlocks");
@ -2838,7 +2839,7 @@ assert storedBlock.findDatanode(dn) < 0 : "Block " + block
// Remove the block from pendingReplications // Remove the block from pendingReplications
pendingReplications.remove(block); pendingReplications.remove(block);
if (postponedMisreplicatedBlocks.remove(block)) { if (postponedMisreplicatedBlocks.remove(block)) {
postponedMisreplicatedBlocksCount--; postponedMisreplicatedBlocksCount.decrementAndGet();
} }
} }