From ec249892406205faf77b393a193c0253b94efaf6 Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Tue, 28 Feb 2012 18:03:09 +0000 Subject: [PATCH] HDFS-3024. Improve performance of stringification in addStoredBlock. Contributed by Todd Lipcon. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1294753 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 + .../apache/hadoop/hdfs/protocol/Block.java | 8 ++++ .../BlockInfoUnderConstruction.java | 46 ++++++++++++++----- .../server/blockmanagement/BlockManager.java | 18 ++++++-- 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 3e73b855ece..913f99d3740 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -160,6 +160,8 @@ Release 0.23.2 - UNRELEASED OPTIMIZATIONS + HDFS-3024. Improve performance of stringification in addStoredBlock (todd) + BUG FIXES HDFS-2923. Namenode IPC handler count uses the wrong configuration key (todd) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/Block.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/Block.java index f6bf6b0b715..33c86f96d89 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/Block.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/Block.java @@ -150,6 +150,14 @@ public String toString() { return getBlockName() + "_" + getGenerationStamp(); } + public void appendStringTo(StringBuilder sb) { + sb.append(BLOCK_FILE_PREFIX) + .append(blockId) + .append("_") + .append(getGenerationStamp()); + } + + ///////////////////////////////////// // Writable ///////////////////////////////////// diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java index beeb2c8fa21..6509f3d7fa9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.apache.hadoop.hdfs.protocol.Block; @@ -114,14 +115,19 @@ public boolean equals(Object obj) { @Override public String toString() { - final StringBuilder b = new StringBuilder(getClass().getSimpleName()); - b.append("[") - .append(expectedLocation) - .append("|") - .append(state) - .append("]"); + final StringBuilder b = new StringBuilder(50); + appendStringTo(b); return b.toString(); } + + @Override + public void appendStringTo(StringBuilder sb) { + sb.append("ReplicaUnderConstruction[") + .append(expectedLocation) + .append("|") + .append(state) + .append("]"); + } } /** @@ -269,11 +275,29 @@ public boolean equals(Object obj) { @Override public String toString() { - final StringBuilder b = new StringBuilder(super.toString()); - b.append("{blockUCState=").append(blockUCState) - .append(", primaryNodeIndex=").append(primaryNodeIndex) - .append(", replicas=").append(replicas) - .append("}"); + final StringBuilder b = new StringBuilder(100); + appendStringTo(b); return b.toString(); } + + @Override + public void appendStringTo(StringBuilder sb) { + super.appendStringTo(sb); + appendUCParts(sb); + } + + private void appendUCParts(StringBuilder sb) { + sb.append("{blockUCState=").append(blockUCState) + .append(", primaryNodeIndex=").append(primaryNodeIndex) + .append(", replicas=["); + Iterator iter = replicas.iterator(); + if (iter.hasNext()) { + iter.next().appendStringTo(sb); + while (iter.hasNext()) { + sb.append(", "); + iter.next().appendStringTo(sb); + } + } + sb.append("]}"); + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java index 282210a93da..2c777b71fc5 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java @@ -1756,9 +1756,7 @@ private Block addStoredBlock(final BlockInfo block, if (added) { curReplicaDelta = 1; if (logEveryBlock) { - NameNode.stateChangeLog.info("BLOCK* addStoredBlock: " - + "blockMap updated: " + node.getName() + " is added to " + - storedBlock + " size " + storedBlock.getNumBytes()); + logAddStoredBlock(storedBlock, node); } } else { curReplicaDelta = 0; @@ -1818,6 +1816,20 @@ private Block addStoredBlock(final BlockInfo block, return storedBlock; } + private void logAddStoredBlock(BlockInfo storedBlock, DatanodeDescriptor node) { + if (!NameNode.stateChangeLog.isInfoEnabled()) { + return; + } + + StringBuilder sb = new StringBuilder(500); + sb.append("BLOCK* addStoredBlock: blockMap updated: ") + .append(node.getName()) + .append(" is added to "); + storedBlock.appendStringTo(sb); + sb.append(" size " ) + .append(storedBlock.getNumBytes()); + NameNode.stateChangeLog.info(sb); + } /** * Invalidate corrupt replicas. *