Browse Source

Disable loadbalancer clients retry when clients retry is disabled (fixed) (#773)

pull/775/head
정원식 2 years ago committed by GitHub
parent
commit
561acf6276
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java
  2. 16
      spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java

7
spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java

@ -65,6 +65,7 @@ import static org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils @@ -65,6 +65,7 @@ import static org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils
* load-balanced with Spring Cloud LoadBalancer.
*
* @author Olga Maciaszek-Sharma
* @author Wonsik Cheung
* @since 2.2.6
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@ -201,8 +202,10 @@ public class RetryableFeignBlockingLoadBalancerClient implements Client { @@ -201,8 +202,10 @@ public class RetryableFeignBlockingLoadBalancerClient implements Client {
retryTemplate.setListeners(retryListeners);
}
retryTemplate.setRetryPolicy(retryPolicy == null ? new NeverRetryPolicy()
: new InterceptorRetryPolicy(toHttpRequest(request), retryPolicy, loadBalancerClient, serviceId));
retryTemplate.setRetryPolicy(
!loadBalancerClientFactory.getProperties(serviceId).getRetry().isEnabled() || retryPolicy == null
? new NeverRetryPolicy() : new InterceptorRetryPolicy(toHttpRequest(request), retryPolicy,
loadBalancerClient, serviceId));
return retryTemplate;
}

16
spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java

@ -55,6 +55,7 @@ import org.springframework.http.HttpStatus; @@ -55,6 +55,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
@ -72,6 +73,7 @@ import static org.mockito.Mockito.when; @@ -72,6 +73,7 @@ import static org.mockito.Mockito.when;
* @see <a href=
* "https://github.com/spring-cloud/spring-cloud-commons/blob/main/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/blocking/client/BlockingLoadBalancerClientTests.java">BlockingLoadBalancerClientTests</a>
* @author Olga Maciaszek-Sharma
* @author Wonsik Cheung
*/
@ExtendWith(MockitoExtension.class)
class RetryableFeignBlockingLoadBalancerClientTests {
@ -160,6 +162,20 @@ class RetryableFeignBlockingLoadBalancerClientTests { @@ -160,6 +162,20 @@ class RetryableFeignBlockingLoadBalancerClientTests {
verify(delegate, times(2)).execute(any(), any());
}
@Test
void shouldNotRetryOnDisabled() throws IOException {
properties.getRetry().setEnabled(false);
Request request = testRequest();
when(delegate.execute(any(), any())).thenThrow(new IOException());
when(retryFactory.createRetryPolicy(any(), eq(loadBalancerClient)))
.thenReturn(new BlockingLoadBalancedRetryPolicy(properties));
assertThatThrownBy(() -> feignBlockingLoadBalancerClient.execute(request, new Request.Options()))
.isInstanceOf(IOException.class);
verify(delegate, times(1)).execute(any(), any());
}
@Test
void shouldExposeResponseBodyOnRetry() throws IOException {
properties.getRetry().getRetryableStatusCodes().add(503);

Loading…
Cancel
Save