From adeb718f2baf8df03f6692f4ed0bd17a4292a89d Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Mon, 7 May 2012 21:34:38 +0000 Subject: [PATCH] HDFS-3375. Put client name in DataXceiver thread name for readBlock and keepalive. Contributed by Todd Lipcon. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1335271 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hdfs/server/datanode/DataXceiver.java | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 9fe0328a507..435481c99e8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -286,6 +286,9 @@ Release 2.0.0 - UNRELEASED HDFS-3365. Enable users to disable socket caching in DFS client configuration (todd) + HDFS-3375. Put client name in DataXceiver thread name for readBlock + and keepalive (todd) + OPTIMIZATIONS HDFS-2477. Optimize computing the diff between a block report and the diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java index 4114d7f9cc7..6c280d8767d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java @@ -85,6 +85,12 @@ class DataXceiver extends Receiver implements Runnable { private long opStartTime; //the start time of receiving an Op private final SocketInputWrapper socketInputWrapper; + + /** + * Client Name used in previous operation. Not available on first request + * on the socket. + */ + private String previousOpClientName; public static DataXceiver create(Socket s, DataNode dn, DataXceiverServer dataXceiverServer) throws IOException { @@ -122,7 +128,11 @@ class DataXceiver extends Receiver implements Runnable { */ private void updateCurrentThreadName(String status) { StringBuilder sb = new StringBuilder(); - sb.append("DataXceiver for client ").append(remoteAddress); + sb.append("DataXceiver for client "); + if (previousOpClientName != null) { + sb.append(previousOpClientName).append(" at "); + } + sb.append(remoteAddress); if (status != null) { sb.append(" [").append(status).append("]"); } @@ -202,6 +212,8 @@ class DataXceiver extends Receiver implements Runnable { final String clientName, final long blockOffset, final long length) throws IOException { + previousOpClientName = clientName; + OutputStream baseStream = NetUtils.getOutputStream(s, dnConf.socketWriteTimeout); DataOutputStream out = new DataOutputStream(new BufferedOutputStream( @@ -295,7 +307,8 @@ class DataXceiver extends Receiver implements Runnable { final long maxBytesRcvd, final long latestGenerationStamp, DataChecksum requestedChecksum) throws IOException { - updateCurrentThreadName("Receiving block " + block + " client=" + clientname); + previousOpClientName = clientname; + updateCurrentThreadName("Receiving block " + block); final boolean isDatanode = clientname.length() == 0; final boolean isClient = !isDatanode; final boolean isTransfer = stage == BlockConstructionStage.TRANSFER_RBW @@ -502,7 +515,7 @@ class DataXceiver extends Receiver implements Runnable { final DatanodeInfo[] targets) throws IOException { checkAccess(null, true, blk, blockToken, Op.TRANSFER_BLOCK, BlockTokenSecretManager.AccessMode.COPY); - + previousOpClientName = clientName; updateCurrentThreadName(Op.TRANSFER_BLOCK + " " + blk); final DataOutputStream out = new DataOutputStream(