Skip to content

Commit 1e00669

Browse files
author
Allen Wang
committed
Merge pull request OpenFeign#118 from allenxwang/master
Refine retry handler logic for LBClient
2 parents 7528220 + fc43eed commit 1e00669

1 file changed

Lines changed: 17 additions & 19 deletions

File tree

ribbon/src/main/java/feign/ribbon/LBClient.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,31 @@
2020
import com.netflix.client.ClientRequest;
2121
import com.netflix.client.IResponse;
2222
import com.netflix.client.RequestSpecificRetryHandler;
23+
import com.netflix.client.RetryHandler;
2324
import com.netflix.client.config.CommonClientConfigKey;
2425
import com.netflix.client.config.IClientConfig;
2526
import com.netflix.loadbalancer.ILoadBalancer;
27+
import feign.Client;
28+
import feign.Request;
29+
import feign.RequestTemplate;
30+
import feign.Response;
2631

2732
import java.io.IOException;
2833
import java.net.URI;
2934
import java.util.Collection;
3035
import java.util.Map;
3136

32-
import feign.Client;
33-
import feign.Request;
34-
import feign.RequestTemplate;
35-
import feign.Response;
36-
import feign.RetryableException;
37-
3837
class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, LBClient.RibbonResponse> {
3938

4039
private final Client delegate;
4140
private final int connectTimeout;
4241
private final int readTimeout;
42+
private final IClientConfig clientConfig;
4343

4444
LBClient(Client delegate, ILoadBalancer lb, IClientConfig clientConfig) {
4545
super(lb, clientConfig);
46+
this.setRetryHandler(RetryHandler.DEFAULT);
47+
this.clientConfig = clientConfig;
4648
this.delegate = delegate;
4749
connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
4850
readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
@@ -63,19 +65,15 @@ public RibbonResponse execute(RibbonRequest request, IClientConfig configOverrid
6365

6466
@Override
6567
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
66-
RibbonRequest request, IClientConfig requestConfig) {
67-
68-
return new RequestSpecificRetryHandler(true, false) {
69-
@Override
70-
public boolean isRetriableException(Throwable e, boolean sameServer) {
71-
return e instanceof RetryableException;
72-
}
73-
74-
@Override
75-
public boolean isCircuitTrippingException(Throwable e) {
76-
return e instanceof IOException;
77-
}
78-
};
68+
RibbonRequest request, IClientConfig requestConfig) {
69+
if (clientConfig.get(CommonClientConfigKey.OkToRetryOnAllOperations, false)) {
70+
return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
71+
}
72+
if (!request.toRequest().method().equals("GET")) {
73+
return new RequestSpecificRetryHandler(true, false, this.getRetryHandler(), requestConfig);
74+
} else {
75+
return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
76+
}
7977
}
8078

8179
static class RibbonRequest extends ClientRequest implements Cloneable {

0 commit comments

Comments
 (0)