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

Chris Nauroth commented on MAPREDUCE-5616:
------------------------------------------

The existing config override is sufficient for "connection refused" errors.  It 
doesn't cover "connection timeout" errors, which is configured separately in 
the base RPC client code.

After the AM exits, we would expect connection attempts to cause an immediate 
connection refused error, not a longer connection timeout error.  After all, 
the packets can get to their destination.  There's just no server listening 
anymore.  The reason I saw connection timeouts was a side effect of a feature 
of Windows Firewall called Stealth Mode.  This feature is on by default, and it 
intentionally drops outbound TCP RST packets for connections initiated against 
a port with no server listening.

http://technet.microsoft.com/en-us/library/dd448557%28WS.10%29

Without getting the RST, the client doesn't know that a connection has been 
refused, and so it just has to wait for the longer timeout condition.  It's 
possible to disable stealth mode by setting a registry key and restarting the 
firewall:

http://msdn.microsoft.com/en-us/library/ff720058.aspx

That article might be out of date though, because I found that this registry 
key was really at 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\PublicProfile
 in my environments.

My only known repro right now is on Windows.  I'm leaving this information here 
for anyone who might notice similar problems on other RPC interactions.  I'd 
still like to get a configuration patch into the client for this.

> MR Client-AppMaster RPC max retries on socket timeout is too high.
> ------------------------------------------------------------------
>
>                 Key: MAPREDUCE-5616
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-5616
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 3.0.0, 2.2.0
>            Reporter: Chris Nauroth
>            Assignee: Chris Nauroth
>
> MAPREDUCE-3811 introduced a separate config key for overriding the max 
> retries applied to RPC connections from the MapReduce Client to the MapReduce 
> Application Master.  This was done to make failover from the AM to the 
> MapReduce History Server faster in the event that the AM completes while the 
> client thinks it's still running.  However, the RPC client uses a separate 
> setting for socket timeouts, and this one is not overridden.  The default for 
> this is 45 retries with a 20-second timeout on each retry.  This means that 
> in environments subject to connection timeout instead of connection refused, 
> the client waits 15 minutes for failover.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to