Commit 7b6f1480 by Spencer Gibb

return null for choose() rather than throw an illegal argument exception.

fixes gh-236
parent ab714bd9
......@@ -53,7 +53,11 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient {
@Override
public ServiceInstance choose(String serviceId) {
return new RibbonServer(serviceId, getServer(serviceId));
Server server = getServer(serviceId);
if (server == null) {
return null;
}
return new RibbonServer(serviceId, server);
}
@Override
......@@ -61,7 +65,7 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient {
ILoadBalancer loadBalancer = getLoadBalancer(serviceId);
RibbonLoadBalancerContext context = this.clientFactory
.getLoadBalancerContext(serviceId);
Server server = getServer(serviceId, loadBalancer);
Server server = getServer(loadBalancer);
RibbonServer ribbonServer = new RibbonServer(serviceId, server);
ServerStats serverStats = context.getServerStats(server);
......@@ -88,16 +92,14 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient {
}
protected Server getServer(String serviceId) {
return getServer(serviceId, getLoadBalancer(serviceId));
return getServer(getLoadBalancer(serviceId));
}
protected Server getServer(String serviceId, ILoadBalancer loadBalancer) {
Server server = loadBalancer.chooseServer("default");
if (server == null) {
throw new IllegalStateException(
"Unable to locate ILoadBalancer for service: " + serviceId);
protected Server getServer(ILoadBalancer loadBalancer) {
if (loadBalancer == null) {
return null;
}
return server;
return loadBalancer.chooseServer("default"); //TODO: better handling of key
}
protected ILoadBalancer getLoadBalancer(String serviceId) {
......
......@@ -35,6 +35,7 @@ import com.netflix.loadbalancer.ServerStats;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import static org.junit.Assert.assertNull;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.anyDouble;
import static org.mockito.Matchers.anyString;
......@@ -84,6 +85,16 @@ public class RibbonLoadBalancerClientTests {
}
@Test
public void testChooseMissing() {
given(this.clientFactory.getLoadBalancer(this.loadBalancer.getName()))
.willReturn(null);
given(this.loadBalancer.getName()).willReturn("missingservice");
RibbonLoadBalancerClient client = new RibbonLoadBalancerClient(this.clientFactory);
ServiceInstance instance = client.choose("missingservice");
assertNull("instance wasn't null", instance);
}
@Test
public void testExecute() {
final RibbonServer server = getRibbonServer();
RibbonLoadBalancerClient client = getRibbonLoadBalancerClient(server);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment