You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Arpit Agarwal (JIRA)" <ji...@apache.org> on 2016/10/18 17:17:58 UTC
[jira] [Comment Edited] (HDFS-10752) Several log
refactoring/improvement suggestion in HDFS
[ https://issues.apache.org/jira/browse/HDFS-10752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15586025#comment-15586025 ]
Arpit Agarwal edited comment on HDFS-10752 at 10/18/16 5:16 PM:
----------------------------------------------------------------
Thanks for the contribution [~hanishakoneru].
I think we should skip the change in {{addToCorruptReplicasMap}}. Some of the overrides of {{Block#toString()}} are expensive. Or at least we should surround the Log call with logging guards like so the overhead of {{Block#toString()}} is avoided when debug logging is off.
{code}
if (NameNode.blockStateChangeLog.isDebugEnabled) {
NameNode.blockStateChangeLog.debug(...
}
{code}
+1 for the rest of the changes.
was (Author: arpitagarwal):
Thanks for the contribution [~hanishakoneru].
I think we should skip the change in {{addToCorruptReplicasMap}}. Some of the overrides of {{Block#toString()}} are expensive. Or at least we should surround the Log call with logging guards like so the overhead of {{Block#toString()}} is avoided when debug logging is off.
if (NameNode.blockStateChangeLog.isDebugEnabled) {
NameNode.blockStateChangeLog.debug(...
}
+1 for the rest of the changes.
> Several log refactoring/improvement suggestion in HDFS
> ------------------------------------------------------
>
> Key: HDFS-10752
> URL: https://issues.apache.org/jira/browse/HDFS-10752
> Project: Hadoop HDFS
> Issue Type: Bug
> Affects Versions: 2.7.2
> Reporter: Nemo Chen
> Assignee: Hanisha Koneru
> Labels: easyfix, easytest
> Attachments: HDFS-10752.000.patch
>
>
> As per conversation with [~vrushalic], we merged HDFS-10749, HDFS-10750, HDFS-10751, HDFS-10753, under this issue.
> ----
> HDFS-10749
> *Method invocation in logs can be replaced by variable*
> Similar to the fix for HDFS-409. In file:
> hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
> In code block:
> {code:borderStyle=solid}
> lastQueuedSeqno = currentPacket.getSeqno();
> if (DFSClient.LOG.isDebugEnabled()) {
> DFSClient.LOG.debug("Queued packet " + currentPacket.getSeqno());
> }
> {code}
> currentPacket.getSeqno() is better to be replaced by variable lastQueuedSeqno.
> ----
> HDFS-10750
> Similar to the fix for AVRO-115. In file:
> hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
> in line 695, the logging code:
> {code:borderStyle=solid}
> LOG.info(getRole() + " RPC up at: " + rpcServer.getRpcAddress());
> {code}
> In the same class, there is a method in line 907:
> {code:borderStyle=solid}
> /**
> * @return NameNode RPC address
> */
> public InetSocketAddress getNameNodeAddress() {
> return rpcServer.getRpcAddress();
> }
> {code}
> We can tell that rpcServer.getRpcAddress() could be replaced by method getNameNodeAddress() for the case of readability and simplicity
> ----
> HDFS-10751
> Similar to the fix for AVRO-115. In file:
> hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtxCache.java
> in line 72, the logging code:
> {code:borderStyle=solid}
> LOG.trace("openFileMap size:" + openFileMap.size());
> {code}
> In the same class, there is a method in line 189:
> {code:borderStyle=solid}
> int size() {
> return openFileMap.size();
> }
> {code}
> We can tell that openFileMap.size() could be replaced by method size() for the case of readability and simplicity
> ----
> *Print variable in byte*
> Similar to the fix for HBASE-623, in file:
> hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/BackupImage.java
> In the following method, the log printed variable data (in byte[]). A possible fix is add Bytes.toString(data).
> {code}
> /**
> * Write the batch of edits to the local copy of the edit logs.
> */
> private void logEditsLocally(long firstTxId, int numTxns, byte[] data) {
> long expectedTxId = editLog.getLastWrittenTxId() + 1;
> Preconditions.checkState(firstTxId == expectedTxId,
> "received txid batch starting at %s but expected txn %s",
> firstTxId, expectedTxId);
> editLog.setNextTxId(firstTxId + numTxns - 1);
> editLog.logEdit(data.length, data);
> editLog.logSync();
> }
> {code}
> ----
> ----
> HDFS-10753
> *MethodInvocation replaced by variable due to toString method*
> Similar to the fix in HADOOP-6419, in file:
> hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/CorruptReplicasMap.java
> in line 76, the blk.getBlockName() method invocation is invoked on variable blk. "blk" is the class instance of Block.
> {code}
> void addToCorruptReplicasMap(Block blk, DatanodeDescriptor dn,
> String reason, Reason reasonCode) {
> ...
> NameNode.blockStateChangeLog.info(
> "BLOCK NameSystem.addToCorruptReplicasMap: {} added as corrupt on "
> + "{} by {} {}", blk.getBlockName(), dn, Server.getRemoteIp(),
> reasonText);
> {code}
> In file: hadoop-rel-release-2.7.2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/Block.java
> {code}
> @Override
> public String toString() {
> return getBlockName() + "_" + getGenerationStamp();
> }
> {code}
> The toString() method contain not only getBlockName() but also getGenerationStamp which may be helpful for debugging purpose. Therefore blk.getBlockName() can be replaced by blk
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org