From 37917020ff6e8485b05e70648ae8a4915ba61477 Mon Sep 17 00:00:00 2001 From: Amit Joshi Date: Thu, 14 Aug 2014 16:09:59 -0700 Subject: [PATCH 1/4] cherry pick from master for ribbon 2 compatibility issue --- build.gradle | 26 +++++++- .../src/main/java/feign/ribbon/LBClient.java | 61 +++++++++---------- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/build.gradle b/build.gradle index 93f1afc65e..f0ee4bedef 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,11 @@ buildscript { } allprojects { + if (JavaVersion.current().isJava8Compatible()) { + tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') // Doclint is onerous in Java 8. + } + } repositories { mavenLocal() mavenCentral() @@ -19,7 +24,9 @@ allprojects { apply from: file('gradle/convention.gradle') apply from: file('gradle/maven.gradle') -apply from: file('gradle/check.gradle') +if (!JavaVersion.current().isJava8Compatible()) { + apply from: file('gradle/check.gradle') // FindBugs is incompatible with Java 8. +} apply from: file('gradle/license.gradle') apply from: file('gradle/release.gradle') apply plugin: 'idea' @@ -113,8 +120,23 @@ project(':feign-ribbon') { dependencies { compile project(':feign-core') - compile 'com.netflix.ribbon:ribbon-core:0.3.1' + compile 'com.netflix.ribbon:ribbon-loadbalancer:2.0-RC5' testCompile 'org.testng:testng:6.8.5' testCompile 'com.google.mockwebserver:mockwebserver:20130706' } } + +project(':feign-slf4j') { + apply plugin: 'java' + + test { + useTestNG() + } + + dependencies { + compile project(':feign-core') + compile 'org.slf4j:slf4j-api:1.7.5' + testCompile 'org.testng:testng:6.8.5' + testCompile 'org.slf4j:slf4j-simple:1.7.5' + } +} diff --git a/ribbon/src/main/java/feign/ribbon/LBClient.java b/ribbon/src/main/java/feign/ribbon/LBClient.java index dcd800ad60..078b8083fc 100644 --- a/ribbon/src/main/java/feign/ribbon/LBClient.java +++ b/ribbon/src/main/java/feign/ribbon/LBClient.java @@ -19,10 +19,10 @@ import com.netflix.client.ClientException; import com.netflix.client.ClientRequest; import com.netflix.client.IResponse; +import com.netflix.client.RequestSpecificRetryHandler; import com.netflix.client.config.CommonClientConfigKey; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.ILoadBalancer; -import com.netflix.util.Pair; import java.io.IOException; import java.net.URI; @@ -35,9 +35,6 @@ import feign.Response; import feign.RetryableException; -import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout; -import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout; - class LBClient extends AbstractLoadBalancerAwareClient { private final Client delegate; @@ -45,34 +42,40 @@ class LBClient extends AbstractLoadBalancerAwareClient deriveSchemeAndPortFromPartialUri(RibbonRequest task) { - return new Pair(URI.create(task.request.url()).getScheme(), task.getUri().getPort()); + 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; + } + }; } static class RibbonRequest extends ClientRequest implements Cloneable { @@ -134,15 +137,11 @@ Response toResponse() { @Override public void close() throws IOException { - if (response.body() != null) { - response.body().close(); - } + if (response != null && response.body() != null) { + response.body().close(); + } } - } - static int config(RibbonRequest request, CommonClientConfigKey key, int defaultValue) { - if (request.getOverrideConfig() != null && request.getOverrideConfig().containsProperty(key)) - return Integer.valueOf(request.getOverrideConfig().getProperty(key).toString()); - return defaultValue; } + } From 544971194a42281093d520afa5ed96690d01c542 Mon Sep 17 00:00:00 2001 From: Allen Wang Date: Mon, 18 Aug 2014 10:11:36 -0700 Subject: [PATCH 2/4] cherry picking from master for ribbon 2 changes --- .../src/main/java/feign/ribbon/LBClient.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/ribbon/src/main/java/feign/ribbon/LBClient.java b/ribbon/src/main/java/feign/ribbon/LBClient.java index 078b8083fc..83fd602ed6 100644 --- a/ribbon/src/main/java/feign/ribbon/LBClient.java +++ b/ribbon/src/main/java/feign/ribbon/LBClient.java @@ -20,29 +20,31 @@ 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 { 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 @@ public RibbonResponse execute(RibbonRequest request, IClientConfig configOverrid @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 { From 4999d695cd190556c8b04f212f4f8eefe592c670 Mon Sep 17 00:00:00 2001 From: Allen Wang Date: Tue, 19 Aug 2014 09:56:36 -0700 Subject: [PATCH 3/4] remove the feign-slf4j sub project from the previous cherry pick --- build.gradle | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/build.gradle b/build.gradle index f0ee4bedef..3583c47a92 100644 --- a/build.gradle +++ b/build.gradle @@ -125,18 +125,3 @@ project(':feign-ribbon') { testCompile 'com.google.mockwebserver:mockwebserver:20130706' } } - -project(':feign-slf4j') { - apply plugin: 'java' - - test { - useTestNG() - } - - dependencies { - compile project(':feign-core') - compile 'org.slf4j:slf4j-api:1.7.5' - testCompile 'org.testng:testng:6.8.5' - testCompile 'org.slf4j:slf4j-simple:1.7.5' - } -} From 4064d5120c329f544adf4419599bcce41b5cd508 Mon Sep 17 00:00:00 2001 From: Allen Wang Date: Tue, 19 Aug 2014 10:11:20 -0700 Subject: [PATCH 4/4] change dependency to feign projects instead of artifacts. --- example-github/build.gradle | 4 ++-- example-wikipedia/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example-github/build.gradle b/example-github/build.gradle index bea8f74e83..5203be2b17 100644 --- a/example-github/build.gradle +++ b/example-github/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'java' dependencies { - compile 'com.netflix.feign:feign-core:6.1.1' - compile 'com.netflix.feign:feign-gson:6.1.1' + compile project(':feign-core') + compile project(':feign-gson') provided 'com.squareup.dagger:dagger-compiler:1.1.0' } diff --git a/example-wikipedia/build.gradle b/example-wikipedia/build.gradle index 3dd63f8ef0..2aa0efd9b3 100644 --- a/example-wikipedia/build.gradle +++ b/example-wikipedia/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'java' dependencies { - compile 'com.netflix.feign:feign-core:6.1.1' - compile 'com.netflix.feign:feign-gson:6.1.1' + compile project(':feign-core') + compile project(':feign-gson') provided 'com.squareup.dagger:dagger-compiler:1.1.0' }