From 81c2592996e544aca94951495e425b07bb1ca2d2 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 20 May 2015 15:10:39 -0600 Subject: [PATCH] update to only verify check of service, not node --- .../filters/ServiceCheckServerListFilter.java | 52 ++++++------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/filters/ServiceCheckServerListFilter.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/filters/ServiceCheckServerListFilter.java index f15626f2..7e8a77e1 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/filters/ServiceCheckServerListFilter.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/filters/ServiceCheckServerListFilter.java @@ -17,11 +17,7 @@ package org.springframework.cloud.consul.discovery.filters; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; - -import org.springframework.cloud.consul.discovery.ConsulServer; import com.ecwid.consul.v1.ConsulClient; import com.ecwid.consul.v1.QueryParams; @@ -42,44 +38,28 @@ public class ServiceCheckServerListFilter implements ServerListFilter { @Override public List getFilteredListOfServers(List servers) { - Set passingServiceIds = getPassingServiceIds(servers); List okServers = new ArrayList<>(servers.size()); + for (Server server : servers) { - String serviceId = server.getMetaInfo().getInstanceId(); - if (passingServiceIds.contains(serviceId)) { - ConsulServer consulServer = ConsulServer.class.cast(server); - List nodeChecks = client.getHealthChecksForNode( - consulServer.getNode(), QueryParams.DEFAULT).getValue(); - boolean passingNodeChecks = true; - for (Check check : nodeChecks) { - if (check.getStatus() != Check.CheckStatus.PASSING) { - passingNodeChecks = false; - break; - } - } - if (passingNodeChecks) { - okServers.add(server); + String appName = server.getMetaInfo().getAppName(); + String instanceId = server.getMetaInfo().getInstanceId(); + //TODO: cache getHealthChecks? this is hit often + List serviceChecks = client.getHealthChecksForService(appName, + QueryParams.DEFAULT).getValue(); + boolean serviceOk = true; + for (Check check : serviceChecks) { + if (check.getServiceId().equals(instanceId) + && check.getStatus() != Check.CheckStatus.PASSING) { + serviceOk = false; + break; // just need one to fail } } + if (serviceOk) { + okServers.add(server); + } } + return okServers; } - private Set getPassingServiceIds(List servers) { - Set serviceIds = new HashSet<>(1); - for (Server server : servers) { - serviceIds.add(server.getMetaInfo().getInstanceId()); - } - for (String serviceId : serviceIds) { - List serviceChecks = client.getHealthChecksForService(serviceId, - QueryParams.DEFAULT).getValue(); - for (Check check : serviceChecks) { - if (check.getStatus() != Check.CheckStatus.PASSING) { - serviceIds.remove(check.getServiceId()); - } - } - } - return serviceIds; - } - }