[ 
https://issues.apache.org/jira/browse/HADOOP-18324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17635057#comment-17635057
 ] 

ASF GitHub Bot commented on HADOOP-18324:
-----------------------------------------

omalley commented on code in PR #4527:
URL: https://github.com/apache/hadoop/pull/4527#discussion_r1024653352


##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java:
##########
@@ -1153,9 +1087,51 @@ public void run() {
             + connections.size());
     }
 
+    /**
+     * A thread to write rpc requests to the socket.
+     */
+    private class RpcRequestSender implements Runnable {
+      @Override
+      public void run() {
+        while (!shouldCloseConnection.get()) {
+          ResponseBuffer buf = null;
+          try {
+            Pair<Call, ResponseBuffer> pair = rpcRequestQueue.take();
+            if (shouldCloseConnection.get()) {
+              return;
+            }
+            buf = pair.getRight();
+            synchronized (ipcStreams.out) {
+              if (LOG.isDebugEnabled()) {
+                Call call = pair.getLeft();
+                LOG.debug(getName() + " sending #" + call.id
+                    + " " + call.rpcRequest);
+              }
+              // RpcRequestHeader + RpcRequest
+              ipcStreams.sendRequest(buf.toByteArray());
+              ipcStreams.flush();
+            }
+          } catch (InterruptedException ie) {
+            // stop this thread

Review Comment:
   I don't think we should, because it will create a race condition about which 
thread marks the connection closed.
   
   The only place that thread is interrupted is just after the Connection 
thread is interrupted. The Connection thread already calls 
Connection.markedClosed(IOException). If we have this thread also try to call 
markClosed it will just add non-determinism about which IOException gets logged.
   
   The important part is that when this thread is interrupted that we stop. :)





> Interrupting RPC Client calls can lead to thread exhaustion
> -----------------------------------------------------------
>
>                 Key: HADOOP-18324
>                 URL: https://issues.apache.org/jira/browse/HADOOP-18324
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: ipc
>    Affects Versions: 3.4.0, 2.10.2, 3.3.3
>            Reporter: Owen O'Malley
>            Assignee: Owen O'Malley
>            Priority: Critical
>              Labels: pull-request-available
>          Time Spent: 2h 50m
>  Remaining Estimate: 0h
>
> Currently the IPC client creates a boundless number of threads to write the 
> rpc request to the socket. The NameNode uses timeouts on its RPC calls to the 
> Journal Node and a stuck JN will cause the NN to create an infinite set of 
> threads.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to