fix:fix router parameter not checking bug.

1.8.6-2020.0.5
Haotian Zhang 3 years ago
parent b101238b40
commit 8b9968216d

@ -89,7 +89,7 @@
<properties> <properties>
<!-- Project revision --> <!-- Project revision -->
<revision>1.8.5-2020.0.5</revision> <revision>1.8.6-2020.0.5</revision>
<!-- Spring Cloud --> <!-- Spring Cloud -->
<spring.cloud.version>2020.0.5</spring.cloud.version> <spring.cloud.version>2020.0.5</spring.cloud.version>

@ -145,23 +145,26 @@ public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceI
Flux<List<ServiceInstance>> doRouter(Flux<List<ServiceInstance>> allServers, PolarisRouterContext routerContext) { Flux<List<ServiceInstance>> doRouter(Flux<List<ServiceInstance>> allServers, PolarisRouterContext routerContext) {
ServiceInstances serviceInstances = LoadBalancerUtils.transferServersToServiceInstances(allServers); ServiceInstances serviceInstances = LoadBalancerUtils.transferServersToServiceInstances(allServers);
// filter instance by routers List<ServiceInstance> filteredInstances = new ArrayList<>();
ProcessRoutersRequest processRoutersRequest = buildProcessRoutersRequest(serviceInstances, routerContext); if (serviceInstances.getInstances().size() > 0) {
// filter instance by routers
ProcessRoutersRequest processRoutersRequest = buildProcessRoutersRequest(serviceInstances, routerContext);
// process request interceptors // process request interceptors
processRouterRequestInterceptors(processRoutersRequest, routerContext); processRouterRequestInterceptors(processRoutersRequest, routerContext);
// process router chain // process router chain
ProcessRoutersResponse processRoutersResponse = routerAPI.processRouters(processRoutersRequest); ProcessRoutersResponse processRoutersResponse = routerAPI.processRouters(processRoutersRequest);
// process response interceptors // process response interceptors
processRouterResponseInterceptors(routerContext, processRoutersResponse); processRouterResponseInterceptors(routerContext, processRoutersResponse);
// transfer polaris server to ServiceInstance // transfer polaris server to ServiceInstance
List<ServiceInstance> filteredInstances = new ArrayList<>(); ServiceInstances filteredServiceInstances = processRoutersResponse.getServiceInstances();
ServiceInstances filteredServiceInstances = processRoutersResponse.getServiceInstances(); for (Instance instance : filteredServiceInstances.getInstances()) {
for (Instance instance : filteredServiceInstances.getInstances()) { filteredInstances.add(new PolarisServiceInstance(instance));
filteredInstances.add(new PolarisServiceInstance(instance)); }
return Flux.fromIterable(Collections.singletonList(filteredInstances));
} }
return Flux.fromIterable(Collections.singletonList(filteredInstances)); return Flux.fromIterable(Collections.singletonList(filteredInstances));
} }

@ -36,6 +36,7 @@ import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.Selector; import org.springframework.boot.actuate.endpoint.annotation.Selector;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
/** /**
* Router actuator endpoint. * Router actuator endpoint.
@ -53,20 +54,21 @@ public class PolarisRouterEndpoint {
@ReadOperation @ReadOperation
public Map<String, Object> router(@Selector String dstService) { public Map<String, Object> router(@Selector String dstService) {
List<RoutingProto.Route> routerRules = serviceRuleManager.getServiceRouterRule(MetadataContext.LOCAL_NAMESPACE,
MetadataContext.LOCAL_SERVICE, dstService);
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
List<Object> rules = new LinkedList<>(); if (StringUtils.hasText(dstService)) {
result.put("routerRules", rules); List<RoutingProto.Route> routerRules = serviceRuleManager.getServiceRouterRule(MetadataContext.LOCAL_NAMESPACE,
MetadataContext.LOCAL_SERVICE, dstService);
List<Object> rules = new LinkedList<>();
result.put("routerRules", rules);
if (CollectionUtils.isEmpty(routerRules)) { if (CollectionUtils.isEmpty(routerRules)) {
return result; return result;
} }
for (RoutingProto.Route route : routerRules) { for (RoutingProto.Route route : routerRules) {
rules.add(parseRouterRule(route)); rules.add(parseRouterRule(route));
}
} }
return result; return result;

@ -70,10 +70,10 @@
</developers> </developers>
<properties> <properties>
<revision>1.8.5-2020.0.5</revision> <revision>1.8.6-2020.0.5</revision>
<!-- Dependencies --> <!-- Dependencies -->
<polaris.version>1.9.3</polaris.version> <polaris.version>1.9.4</polaris.version>
<logback.version>1.2.11</logback.version> <logback.version>1.2.11</logback.version>
<mocktio.version>4.5.1</mocktio.version> <mocktio.version>4.5.1</mocktio.version>
<byte-buddy.version>1.12.10</byte-buddy.version> <byte-buddy.version>1.12.10</byte-buddy.version>

@ -34,6 +34,8 @@ import com.tencent.polaris.client.flow.FlowControlParam;
import com.tencent.polaris.client.flow.ResourcesResponse; import com.tencent.polaris.client.flow.ResourcesResponse;
import com.tencent.polaris.client.pb.RateLimitProto; import com.tencent.polaris.client.pb.RateLimitProto;
import com.tencent.polaris.client.pb.RoutingProto; import com.tencent.polaris.client.pb.RoutingProto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* the manager of service governance rules. for example: rate limit rule, router rules. * the manager of service governance rules. for example: rate limit rule, router rules.
@ -42,8 +44,8 @@ import com.tencent.polaris.client.pb.RoutingProto;
*/ */
public class ServiceRuleManager { public class ServiceRuleManager {
private static final Logger LOG = LoggerFactory.getLogger(ServiceRuleManager.class);
private final SDKContext sdkContext; private final SDKContext sdkContext;
private final FlowControlParam controlParam; private final FlowControlParam controlParam;
public ServiceRuleManager(SDKContext sdkContext) { public ServiceRuleManager(SDKContext sdkContext) {
@ -55,6 +57,7 @@ public class ServiceRuleManager {
} }
public RateLimitProto.RateLimit getServiceRateLimitRule(String namespace, String service) { public RateLimitProto.RateLimit getServiceRateLimitRule(String namespace, String service) {
LOG.debug("Get service rate limit rules with namespace:{} and service:{}.", namespace, service);
ServiceEventKey serviceEventKey = new ServiceEventKey(new ServiceKey(namespace, service), ServiceEventKey serviceEventKey = new ServiceEventKey(new ServiceKey(namespace, service),
ServiceEventKey.EventType.RATE_LIMITING); ServiceEventKey.EventType.RATE_LIMITING);
@ -76,6 +79,8 @@ public class ServiceRuleManager {
} }
public List<RoutingProto.Route> getServiceRouterRule(String namespace, String sourceService, String dstService) { public List<RoutingProto.Route> getServiceRouterRule(String namespace, String sourceService, String dstService) {
LOG.debug("Get service router rules with namespace:{} and sourceService:{} and dstService:{}.",
namespace, sourceService, dstService);
Set<ServiceEventKey> routerKeys = new HashSet<>(); Set<ServiceEventKey> routerKeys = new HashSet<>();
ServiceEventKey dstSvcEventKey = new ServiceEventKey(new ServiceKey(namespace, dstService), ServiceEventKey dstSvcEventKey = new ServiceEventKey(new ServiceKey(namespace, dstService),

Loading…
Cancel
Save