From b9a6876d0030fcd9864cb5328162dfda30518d88 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 16 Mar 2016 14:36:52 -0600 Subject: [PATCH] Upgrade ribbon to 2.1.3 fixes gh-908 --- .../feign/ribbon/LoadBalancerFeignClient.java | 15 ++++++- .../ribbon/FeignRibbonClientRetryTests.java | 40 ++++++++----------- spring-cloud-netflix-dependencies/pom.xml | 2 +- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/LoadBalancerFeignClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/LoadBalancerFeignClient.java index a86646d7..4060fc04 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/LoadBalancerFeignClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/LoadBalancerFeignClient.java @@ -54,13 +54,24 @@ public class LoadBalancerFeignClient implements Client { new FeignOptionsClientConfig(options)).toResponse(); } catch (ClientException e) { - if (e.getCause() instanceof IOException) { - throw IOException.class.cast(e.getCause()); + IOException io = findIOException(e); + if (io != null) { + throw io; } throw new RuntimeException(e); } } + protected IOException findIOException(Throwable t) { + if (t == null) { + return null; + } + if (t instanceof IOException) { + return (IOException) t; + } + return findIOException(t.getCause()); + } + public Client getDelegate() { return this.delegate; } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java index 12911ba1..2404b25a 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientRetryTests.java @@ -16,26 +16,18 @@ package org.springframework.cloud.netflix.feign.ribbon; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.util.concurrent.atomic.AtomicInteger; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.WebIntegrationTest; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; @@ -44,7 +36,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -52,15 +43,23 @@ import org.springframework.web.bind.annotation.RestController; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.ServerList; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + /** + * Tests the Feign Retryer, not ribbon retry. * @author Spencer Gibb */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = FeignRibbonClientRetryTests.Application.class) -@WebAppConfiguration -@IntegrationTest({ "server.port=0", "spring.application.name=feignclienttest", - "localapp.ribbon.MaxAutoRetries=5", "localapp.ribbon.MaxAutoRetriesNextServer=5", - "localapp.ribbon.OkToRetryOnAllOperations=true", }) +@WebIntegrationTest(randomPort = true, value = { "spring.application.name=feignclientretrytest", + "feign.okhttp.enabled=false", "feign.httpclient.enabled=false", + "feign.hystrix.enabled=false", }) @DirtiesContext public class FeignRibbonClientRetryTests { @@ -70,14 +69,13 @@ public class FeignRibbonClientRetryTests { @Autowired private TestClient testClient; - // @FeignClient(value = "http://localhost:9876", loadbalance = false) @FeignClient("localapp") - protected static interface TestClient { + protected interface TestClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") - public Hello getHello(); + Hello getHello(); @RequestMapping(method = RequestMethod.GET, value = "/retryme") - public int retryMe(); + int retryMe(); } @Configuration @@ -101,12 +99,8 @@ public class FeignRibbonClientRetryTests { public static void main(String[] args) throws InterruptedException { new SpringApplicationBuilder(Application.class).properties( - "spring.application.name=feignclienttest", - "localapp.ribbon.MaxAutoRetries=5", - "localapp.ribbon.MaxAutoRetriesNextServer=5", - "localapp.ribbon.OkToRetryOnAllOperations=true", + "spring.application.name=feignclientretrytest", "management.contextPath=/admin" - // ,"local.server.port=9999" ).run(args); } } diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index 0e5c6ea3..366db407 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -21,7 +21,7 @@ 1.4.4 8.15.1 1.5.1 - 2.1.1 + 2.1.3 0.10.1 1.1.0 1.1.1