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

Gera Shegalov commented on HADOOP-11295:
----------------------------------------

Thanks for updating the patch, [~mingma]!

A couple more comments, we are close. To reproduce the problem in your setup, 
we need 3 concurrent clients. Thus we don't need to have wait loops after each 
individual {{clientX.start()}}. So just after last {{client3.start}} we can 
wait until all threads are active using the {{TestRPC#countThreads}} methods:
{code}
      while (countThreads("TestRPC$SleepRPCClient") != 3) {
        Thread.sleep(100);
      }
{code}
After that we need to have another single sleep to be sure that the server-side 
problem is reproduced instead of {{while (!client3.isAlive())}} loop.

{{if (proxy != null)}} is unnecessary because proxy is known to be non-null in 
the finally. 

In {{SleepRPCClient#run}}, we should catch Throwable and LOG it instead of 
completely ignoring the exception for better debugability.


> RPC Server Reader thread can't shutdown if RPCCallQueue is full
> ---------------------------------------------------------------
>
>                 Key: HADOOP-11295
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11295
>             Project: Hadoop Common
>          Issue Type: Bug
>            Reporter: Ming Ma
>            Assignee: Ming Ma
>         Attachments: HADOOP-11295-2.patch, HADOOP-11295-3.patch, 
> HADOOP-11295.patch
>
>
> If RPC server is asked to stop when RPCCallQueue is full, {{reader.join()}} 
> will just wait there. That is because
> 1. The reader thread is blocked on {{callQueue.put(call);}}.
> 2. When RPC server is asked to stop, it will interrupt all handler threads 
> and thus no threads will drain the callQueue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to