This is an automated email from the ASF dual-hosted git repository.

cliang pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/hadoop.git

commit ac0cdb0a8d320e3f3e66ab0332a673f4019abb4d
Author: Plamen Jeliazkov <[email protected]>
AuthorDate: Wed Jul 11 16:07:05 2018 -0700

    HDFS-13665. [SBN read] Move RPC response serialization into 
Server.doResponse(). Contributed by Plamen Jeliazkov.
---
 .../main/java/org/apache/hadoop/ipc/Server.java    | 43 +++++++++-------------
 1 file changed, 17 insertions(+), 26 deletions(-)

diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java
index 1a774b1..f1dc26b 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java
@@ -836,15 +836,15 @@ public abstract class Server {
     final Writable rpcRequest;    // Serialized Rpc request from client
     ByteBuffer rpcResponse;       // the response for this call
 
-    private RpcResponseHeaderProto bufferedHeader; // the response header
-    private Writable bufferedRv;                   // the byte response
+    private ResponseParams responseParams; // the response params
+    private Writable rv;                   // the byte response
 
     RpcCall(RpcCall call) {
       super(call);
       this.connection = call.connection;
       this.rpcRequest = call.rpcRequest;
-      this.bufferedRv = call.bufferedRv;
-      this.bufferedHeader = call.bufferedHeader;
+      this.rv = call.rv;
+      this.responseParams = call.responseParams;
     }
 
     RpcCall(Connection connection, int id) {
@@ -865,12 +865,10 @@ public abstract class Server {
       this.rpcRequest = param;
     }
 
-    public void setBufferedHeader(RpcResponseHeaderProto header) {
-      this.bufferedHeader = header;
-    }
-
-    public void setBufferedRv(Writable rv) {
-      this.bufferedRv = rv;
+    void setResponseFields(Writable returnValue,
+                           ResponseParams responseParams) {
+      this.rv = returnValue;
+      this.responseParams = responseParams;
     }
 
     @Override
@@ -904,9 +902,7 @@ public abstract class Server {
         populateResponseParamsOnError(e, responseParams);
       }
       if (!isResponseDeferred()) {
-        setupResponse(this, responseParams.returnStatus,
-            responseParams.detailedErr,
-            value, responseParams.errorClass, responseParams.error);
+        setResponseFields(value, responseParams);
         sendResponse();
       } else {
         if (LOG.isDebugEnabled()) {
@@ -961,13 +957,11 @@ public abstract class Server {
         setupResponse(call,
             RpcStatusProto.FATAL, RpcErrorCodeProto.ERROR_RPC_SERVER,
             null, t.getClass().getName(), StringUtils.stringifyException(t));
-      } else if (alignmentContext != null) {
-        // rebuild response with state context in header
-        RpcResponseHeaderProto.Builder responseHeader =
-            call.bufferedHeader.toBuilder();
-        alignmentContext.updateResponseState(responseHeader);
-        RpcResponseHeaderProto builtHeader = responseHeader.build();
-        setupResponse(call, builtHeader, call.bufferedRv);
+      } else {
+        setupResponse(call, call.responseParams.returnStatus,
+            call.responseParams.detailedErr, call.rv,
+            call.responseParams.errorClass,
+            call.responseParams.error);
       }
       connection.sendResponse(call);
     }
@@ -2951,6 +2945,9 @@ public abstract class Server {
     headerBuilder.setRetryCount(call.retryCount);
     headerBuilder.setStatus(status);
     headerBuilder.setServerIpcVersionNum(CURRENT_VERSION);
+    if (alignmentContext != null) {
+      alignmentContext.updateResponseState(headerBuilder);
+    }
 
     if (status == RpcStatusProto.SUCCESS) {
       RpcResponseHeaderProto header = headerBuilder.build();
@@ -2977,12 +2974,6 @@ public abstract class Server {
 
   private void setupResponse(RpcCall call,
       RpcResponseHeaderProto header, Writable rv) throws IOException {
-    if (alignmentContext != null && call.bufferedHeader == null
-        && call.bufferedRv == null) {
-      call.setBufferedHeader(header);
-      call.setBufferedRv(rv);
-    }
-
     final byte[] response;
     if (rv == null || (rv instanceof RpcWritable.ProtobufWrapper)) {
       response = setupResponseForProtobuf(header, rv);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to