浏览代码

HDFS-17337. RPC RESPONSE time seems not exactly accurate when using FSEditLogAsync. (#6439). Contributed by farmmamba.

Reviewed-by: Tao Li <tomscut@apache.org>
Signed-off-by:  Shuyan Zhang <zhangshuyan@apache.org>
hfutatzhanghb 1 年之前
父节点
当前提交
ba6ada73ac
共有 1 个文件被更改,包括 3 次插入4 次删除
  1. 3 4
      hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java

+ 3 - 4
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java

@@ -1089,7 +1089,10 @@ public abstract class Server {
       int count = responseWaitCount.decrementAndGet();
       assert count >= 0 : "response has already been sent";
       if (count == 0) {
+        long startNanos = Time.monotonicNowNanos();
         doResponse(null);
+        getProcessingDetails().set(Timing.RESPONSE,
+            Time.monotonicNowNanos() - startNanos, TimeUnit.NANOSECONDS);
       }
     }
 
@@ -1257,14 +1260,10 @@ public abstract class Server {
         deltaNanos -= details.get(Timing.LOCKSHARED, TimeUnit.NANOSECONDS);
         deltaNanos -= details.get(Timing.LOCKEXCLUSIVE, TimeUnit.NANOSECONDS);
         details.set(Timing.LOCKFREE, deltaNanos, TimeUnit.NANOSECONDS);
-        startNanos = Time.monotonicNowNanos();
 
         setResponseFields(value, responseParams);
         sendResponse();
-
         details.setReturnStatus(responseParams.returnStatus);
-        deltaNanos = Time.monotonicNowNanos() - startNanos;
-        details.set(Timing.RESPONSE, deltaNanos, TimeUnit.NANOSECONDS);
       } else {
         LOG.debug("Deferring response for callId: {}", this.callId);
       }