@ -20,29 +20,31 @@ import com.netflix.client.ClientException;
@@ -20,29 +20,31 @@ import com.netflix.client.ClientException;
import com.netflix.client.ClientRequest ;
import com.netflix.client.IResponse ;
import com.netflix.client.RequestSpecificRetryHandler ;
import com.netflix.client.RetryHandler ;
import com.netflix.client.config.CommonClientConfigKey ;
import com.netflix.client.config.IClientConfig ;
import com.netflix.loadbalancer.ILoadBalancer ;
import feign.Client ;
import feign.Request ;
import feign.RequestTemplate ;
import feign.Response ;
import java.io.IOException ;
import java.net.URI ;
import java.util.Collection ;
import java.util.Map ;
import feign.Client ;
import feign.Request ;
import feign.RequestTemplate ;
import feign.Response ;
import feign.RetryableException ;
class LBClient extends AbstractLoadBalancerAwareClient < LBClient . RibbonRequest , LBClient . RibbonResponse > {
private final Client delegate ;
private final int connectTimeout ;
private final int readTimeout ;
private final IClientConfig clientConfig ;
LBClient ( Client delegate , ILoadBalancer lb , IClientConfig clientConfig ) {
super ( lb , clientConfig ) ;
this . setRetryHandler ( RetryHandler . DEFAULT ) ;
this . clientConfig = clientConfig ;
this . delegate = delegate ;
connectTimeout = clientConfig . get ( CommonClientConfigKey . ConnectTimeout ) ;
readTimeout = clientConfig . get ( CommonClientConfigKey . ReadTimeout ) ;
@ -63,19 +65,15 @@ class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, L
@@ -63,19 +65,15 @@ class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, L
@Override
public RequestSpecificRetryHandler getRequestSpecificRetryHandler (
RibbonRequest request , IClientConfig requestConfig ) {
return new RequestSpecificRetryHandler ( true , false ) {
@Override
public boolean isRetriableException ( Throwable e , boolean sameServer ) {
return e instanceof RetryableException ;
}
@Override
public boolean isCircuitTrippingException ( Throwable e ) {
return e instanceof IOException ;
}
} ;
RibbonRequest request , IClientConfig requestConfig ) {
if ( clientConfig . get ( CommonClientConfigKey . OkToRetryOnAllOperations , false ) ) {
return new RequestSpecificRetryHandler ( true , true , this . getRetryHandler ( ) , requestConfig ) ;
}
if ( ! request . toRequest ( ) . method ( ) . equals ( "GET" ) ) {
return new RequestSpecificRetryHandler ( true , false , this . getRetryHandler ( ) , requestConfig ) ;
} else {
return new RequestSpecificRetryHandler ( true , true , this . getRetryHandler ( ) , requestConfig ) ;
}
}
static class RibbonRequest extends ClientRequest implements Cloneable {