Merge pull request #225 from ryanjbaxter/static-retry-template
Create a new RetryTemplate for each request
This commit is contained in:
@@ -126,8 +126,8 @@ public class LoadBalancerAutoConfiguration {
|
||||
public RetryLoadBalancerInterceptor ribbonInterceptor(
|
||||
LoadBalancerClient loadBalancerClient, LoadBalancerRetryProperties properties,
|
||||
LoadBalancedRetryPolicyFactory lbRetryPolicyFactory,
|
||||
LoadBalancerRequestFactory requestFactory, RetryTemplate retryTemplate) {
|
||||
return new RetryLoadBalancerInterceptor(loadBalancerClient, retryTemplate, properties,
|
||||
LoadBalancerRequestFactory requestFactory) {
|
||||
return new RetryLoadBalancerInterceptor(loadBalancerClient, properties,
|
||||
lbRetryPolicyFactory, requestFactory);
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
|
||||
private LoadBalancerRetryProperties lbProperties;
|
||||
private LoadBalancerRequestFactory requestFactory;
|
||||
|
||||
|
||||
@Deprecated
|
||||
public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, RetryTemplate retryTemplate,
|
||||
LoadBalancerRetryProperties lbProperties,
|
||||
LoadBalancedRetryPolicyFactory lbRetryPolicyFactory,
|
||||
@@ -53,7 +53,18 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
|
||||
this.lbProperties = lbProperties;
|
||||
this.requestFactory = requestFactory;
|
||||
}
|
||||
|
||||
|
||||
public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer,
|
||||
LoadBalancerRetryProperties lbProperties,
|
||||
LoadBalancedRetryPolicyFactory lbRetryPolicyFactory,
|
||||
LoadBalancerRequestFactory requestFactory) {
|
||||
this.loadBalancer = loadBalancer;
|
||||
this.lbRetryPolicyFactory = lbRetryPolicyFactory;
|
||||
this.lbProperties = lbProperties;
|
||||
this.requestFactory = requestFactory;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, RetryTemplate retryTemplate,
|
||||
LoadBalancerRetryProperties lbProperties,
|
||||
LoadBalancedRetryPolicyFactory lbRetryPolicyFactory) {
|
||||
@@ -70,11 +81,13 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
|
||||
Assert.state(serviceName != null, "Request URI does not contain a valid hostname: " + originalUri);
|
||||
final LoadBalancedRetryPolicy retryPolicy = lbRetryPolicyFactory.create(serviceName,
|
||||
loadBalancer);
|
||||
retryTemplate.setRetryPolicy(
|
||||
RetryTemplate template = this.retryTemplate == null ? new RetryTemplate() : this.retryTemplate;
|
||||
template.setThrowLastExceptionOnExhausted(true);
|
||||
template.setRetryPolicy(
|
||||
!lbProperties.isEnabled() || retryPolicy == null ? new NeverRetryPolicy()
|
||||
: new InterceptorRetryPolicy(request, retryPolicy, loadBalancer,
|
||||
serviceName));
|
||||
return retryTemplate
|
||||
return template
|
||||
.execute(new RetryCallback<ClientHttpResponse, IOException>() {
|
||||
@Override
|
||||
public ClientHttpResponse doWithRetry(RetryContext context)
|
||||
|
||||
@@ -33,14 +33,12 @@ import static org.mockito.Mockito.when;
|
||||
public class RetryLoadBalancerInterceptorTest {
|
||||
|
||||
private LoadBalancerClient client;
|
||||
private RetryTemplate retryTemplate;
|
||||
private LoadBalancerRetryProperties lbProperties;
|
||||
private LoadBalancerRequestFactory lbRequestFactory;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
client = mock(LoadBalancerClient.class);
|
||||
retryTemplate = spy(new RetryTemplate());
|
||||
lbProperties = new LoadBalancerRetryProperties();
|
||||
lbRequestFactory = mock(LoadBalancerRequestFactory.class);
|
||||
|
||||
@@ -49,7 +47,6 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
client = null;
|
||||
retryTemplate = null;
|
||||
lbProperties = null;
|
||||
}
|
||||
|
||||
@@ -64,11 +61,10 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException());
|
||||
lbProperties.setEnabled(false);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
interceptor.intercept(request, body, execution);
|
||||
verify(retryTemplate, times(1)).setRetryPolicy(any(NeverRetryPolicy.class));
|
||||
verify(lbRequestFactory).createRequest(request, body, execution);
|
||||
}
|
||||
|
||||
@@ -85,7 +81,7 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo_underscore"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo_underscore"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenReturn(clientHttpResponse);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
ClientHttpResponse rsp = interceptor.intercept(request, body, execution);
|
||||
@@ -102,11 +98,10 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenReturn(clientHttpResponse);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
interceptor.intercept(request, body, execution);
|
||||
verify(retryTemplate, times(1)).setRetryPolicy(any(NeverRetryPolicy.class));
|
||||
verify(lbRequestFactory).createRequest(request, body, execution);
|
||||
}
|
||||
|
||||
@@ -123,12 +118,11 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenReturn(clientHttpResponse);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
ClientHttpResponse rsp = interceptor.intercept(request, body, execution);
|
||||
assertThat(rsp, is(clientHttpResponse));
|
||||
verify(retryTemplate, times(1)).setRetryPolicy(eq(interceptorRetryPolicy));
|
||||
verify(lbRequestFactory).createRequest(request, body, execution);
|
||||
}
|
||||
|
||||
@@ -149,13 +143,12 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).
|
||||
thenReturn(clientHttpResponseNotFound).thenReturn(clientHttpResponseOk);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
ClientHttpResponse rsp = interceptor.intercept(request, body, execution);
|
||||
verify(client, times(2)).execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class));
|
||||
assertThat(rsp, is(clientHttpResponseOk));
|
||||
verify(retryTemplate, times(1)).setRetryPolicy(eq(interceptorRetryPolicy));
|
||||
verify(lbRequestFactory, times(2)).createRequest(request, body, execution);
|
||||
}
|
||||
|
||||
@@ -172,13 +165,12 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException()).thenReturn(clientHttpResponse);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
ClientHttpResponse rsp = interceptor.intercept(request, body, execution);
|
||||
verify(client, times(2)).execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class));
|
||||
assertThat(rsp, is(clientHttpResponse));
|
||||
verify(retryTemplate, times(1)).setRetryPolicy(any(InterceptorRetryPolicy.class));
|
||||
verify(lbRequestFactory, times(2)).createRequest(request, body, execution);
|
||||
}
|
||||
|
||||
@@ -196,7 +188,7 @@ public class RetryLoadBalancerInterceptorTest {
|
||||
when(client.choose(eq("foo"))).thenReturn(serviceInstance);
|
||||
when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException()).thenReturn(clientHttpResponse);
|
||||
lbProperties.setEnabled(true);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, lbProperties, lbRetryPolicyFactory, lbRequestFactory);
|
||||
byte[] body = new byte[]{};
|
||||
ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class);
|
||||
ClientHttpResponse rsp = interceptor.intercept(request, body, execution);
|
||||
|
||||
Reference in New Issue
Block a user