Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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'
Expand Down Expand Up @@ -113,7 +120,7 @@ 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'
}
Expand Down
4 changes: 2 additions & 2 deletions example-github/build.gradle
Original file line number Diff line number Diff line change
@@ -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'
}

Expand Down
4 changes: 2 additions & 2 deletions example-wikipedia/build.gradle
Original file line number Diff line number Diff line change
@@ -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'
}

Expand Down
71 changes: 34 additions & 37 deletions ribbon/src/main/java/feign/ribbon/LBClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,60 +19,61 @@
import com.netflix.client.ClientException;
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 com.netflix.util.Pair;

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;

import static com.netflix.client.config.CommonClientConfigKey.ConnectTimeout;
import static com.netflix.client.config.CommonClientConfigKey.ReadTimeout;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
import java.util.Map;

class LBClient extends AbstractLoadBalancerAwareClient<LBClient.RibbonRequest, LBClient.RibbonResponse> {

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;
this.connectTimeout = Integer.valueOf(clientConfig.getProperty(ConnectTimeout).toString());
this.readTimeout = Integer.valueOf(clientConfig.getProperty(ReadTimeout).toString());
setLoadBalancer(lb);
initWithNiwsConfig(clientConfig);
connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
}

@Override
public RibbonResponse execute(RibbonRequest request) throws IOException {
int connectTimeout = config(request, ConnectTimeout, this.connectTimeout);
int readTimeout = config(request, ReadTimeout, this.readTimeout);

Request.Options options = new Request.Options(connectTimeout, readTimeout);
public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride) throws IOException {
Request.Options options;
if (configOverride != null) {
options = new Request.Options(configOverride.get(CommonClientConfigKey.ConnectTimeout, connectTimeout),
(configOverride.get(CommonClientConfigKey.ReadTimeout, readTimeout)));
} else {
options = new Request.Options(connectTimeout, readTimeout);
}
Response response = delegate.execute(request.toRequest(), options);
return new RibbonResponse(request.getUri(), response);
}

@Override protected boolean isCircuitBreakerException(Throwable e) {
return e instanceof IOException;
}

@Override protected boolean isRetriableException(Throwable e) {
return e instanceof RetryableException;
}

@Override
protected Pair<String, Integer> deriveSchemeAndPortFromPartialUri(RibbonRequest task) {
return new Pair<String, Integer>(URI.create(task.request.url()).getScheme(), task.getUri().getPort());
public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
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 {
Expand Down Expand Up @@ -134,15 +135,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;
}

}