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

Hudson commented on MAPREDUCE-6156:
-----------------------------------

FAILURE: Integrated in Hadoop-trunk-Commit #6533 (See 
[https://builds.apache.org/job/Hadoop-trunk-Commit/6533/])
MAPREDUCE-6156. Fetcher - connect() doesn't handle connection refused 
correctly. Contributed by Junping Du (jlowe: rev 
177e8090f5809beb3ebcb656cd0affbb3f487de8)
* 
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/Fetcher.java
* hadoop-mapreduce-project/CHANGES.txt


> Fetcher - connect() doesn't handle connection refused correctly 
> ----------------------------------------------------------------
>
>                 Key: MAPREDUCE-6156
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-6156
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>            Reporter: Sidharta Seethana
>            Assignee: Junping Du
>            Priority: Blocker
>         Attachments: MAPREDUCE-6156-v2.patch, MAPREDUCE-6156-v3.patch, 
> MAPREDUCE-6156.patch
>
>
> The connect() function in the fetcher assumes that whenever an IOException is 
> thrown, the amount of time passed equals "connectionTimeout" ( see code 
> snippet below ). This is incorrect. For example, in case the NM is down, an 
> ConnectException is thrown immediately - and the catch block assumes a minute 
> has passed when it is not the case.
> {code}
>   if (connectionTimeout < 0) {
>       throw new IOException("Invalid timeout "
>                             + "[timeout = " + connectionTimeout + " ms]");
>     } else if (connectionTimeout > 0) {
>       unit = Math.min(UNIT_CONNECT_TIMEOUT, connectionTimeout);
>     }
>     // set the connect timeout to the unit-connect-timeout
>     connection.setConnectTimeout(unit);
>     while (true) {
>       try {
>         connection.connect();
>         break;
>       } catch (IOException ioe) {
>         // update the total remaining connect-timeout
>         connectionTimeout -= unit;
>         // throw an exception if we have waited for timeout amount of time
>         // note that the updated value if timeout is used here
>         if (connectionTimeout == 0) {
>           throw ioe;
>         }
>         // reset the connect timeout for the last try
>         if (connectionTimeout < unit) {
>           unit = connectionTimeout;
>           // reset the connect time out for the final connect
>           connection.setConnectTimeout(unit);
>         }
>       }
>     }
> {code}



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

Reply via email to