[
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)