Phil Zampino created KNOX-1439:
----------------------------------

             Summary: HA Dispatch implementations should differentiate 
IOExceptions
                 Key: KNOX-1439
                 URL: https://issues.apache.org/jira/browse/KNOX-1439
             Project: Apache Knox
          Issue Type: Improvement
          Components: Server
    Affects Versions: 1.1.0
            Reporter: Phil Zampino


The HA Dispatch implementations catch IOException, and initiate failover logic 
regardless of the type of error the exception represents. For instance, some 
IOExceptions indicate interrupted data transfer while others represent 
connection errors.

This distinction is especially important for PUT and POST requests, for which 
InputStreamEntity is used for the content. InputStreamEntity is a 
non-repeatable entity type, making the results of subsequent attempts 
unreliable.

We should probably only failover / retry on connection-related IOException 
types:
 * java.net.SocketException
 * java.net.UnknownHostException

And return an error response to the client for other IOException types. Maybe 
it makes sense to consider the HTTP method to make this decision (e.g., retry 
GET requests, but not PUT or POST).

The affected dispatch implementations includes at least:
 * org.apache.knox.gateway.ha.dispatch.DefaultHaDispatch
 * org.apache.knox.gateway.ha.dispatch.AtlasApiHaDispatch
 * org.apache.knox.gateway.ha.dispatch.AtlasHaDispatch
 * org.apache.knox.gateway.dispatch.NiFiHaDispatch
 * org.apache.knox.gateway.hdfs.dispatch.AbstractHdfsHaDispatch

 

If retry is configured, but we won't retry, then perhaps 
java.net.HttpRetryException should be thrown.

 



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

Reply via email to