[ 
https://issues.apache.org/jira/browse/HADOOP-15946?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jinglun updated HADOOP-15946:
-----------------------------
    Attachment: HADOOP-15946.patch

> the Connection thread should notify all calls in finally clause before quit.
> ----------------------------------------------------------------------------
>
>                 Key: HADOOP-15946
>                 URL: https://issues.apache.org/jira/browse/HADOOP-15946
>             Project: Hadoop Common
>          Issue Type: Improvement
>            Reporter: Jinglun
>            Priority: Major
>         Attachments: HADOOP-15946.patch, issue-replay.patch
>
>
> Threads that call Client.call() would wait forever unless the connection 
> thread notifies them, so the connection thread should try it's best to notify 
> when it's going to quit.
> In Connection.close(), if any Throwable occurs before cleanupCalls(), the 
> connection thread will quit directly and leave all the waiting threads 
> waiting forever. So i think doing cleanupCalls() in finally clause might be a 
> good idea.
> I met this problem when i started a hadoop2.6 DataNode with 8 block pools. 
> The DN successfully reported to 7 Namespaces and failed at the last Namespace 
> because the connection thread of the heartbeat rpc got a "OOME:Direct buffer 
> memory" and quit without calling cleanupCalls().
> I think we can move cleanupCalls() to finally clause as a protection, because 
> i notice in HADOOP-10940 the close of stream is changed to 
> IOUtils.closeStream(ipcStreams) which catches all Throwable, so the problem i 
> met was fixed. 
> issue-replay.patch simulates the case i described above.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to