From e4a288b056c5a0c0a57a1f821de34461aa15bf1b Mon Sep 17 00:00:00 2001 From: lepdou Date: Tue, 29 Nov 2022 10:45:43 +0800 Subject: [PATCH] Adapt polaris-java 1.10.1 version (#747) --- CHANGELOG.md | 1 + .../discovery/PolarisDiscoveryHandler.java | 1 + .../MetadataRouterRequestInterceptor.java | 12 ++++- .../NearbyRouterRequestInterceptor.java | 11 +++-- .../RuleBasedRouterRequestInterceptor.java | 19 ++++++-- .../PolarisLoadBalancerCompositeRuleTest.java | 46 +++++++++++-------- spring-cloud-tencent-dependencies/pom.xml | 2 +- .../FeatureEnvRouterRequestInterceptor.java | 12 +++-- 8 files changed, 69 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9a4932f..83c5a184 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,3 +12,4 @@ - [Code optimization & correct comment](https://github.com/Tencent/spring-cloud-tencent/pull/724) - [fix:fix javadoc.](https://github.com/Tencent/spring-cloud-tencent/pull/727) - [fix:fix discovery junit.](https://github.com/Tencent/spring-cloud-tencent/pull/729) +- [adapt polaris-java 1.10.1 version](https://github.com/Tencent/spring-cloud-tencent/pull/747) diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java index 51e16e34..688562d7 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java @@ -61,6 +61,7 @@ public class PolarisDiscoveryHandler { GetHealthyInstancesRequest getHealthyInstancesRequest = new GetHealthyInstancesRequest(); getHealthyInstancesRequest.setNamespace(namespace); getHealthyInstancesRequest.setService(service); + getHealthyInstancesRequest.setIncludeCircuitBreakInstances(false); return polarisConsumer.getHealthyInstances(getHealthyInstancesRequest); } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/MetadataRouterRequestInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/MetadataRouterRequestInterceptor.java index ee2e1e99..632cfc95 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/MetadataRouterRequestInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/MetadataRouterRequestInterceptor.java @@ -18,6 +18,7 @@ package com.tencent.cloud.polaris.router.interceptor; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -25,9 +26,12 @@ import com.tencent.cloud.common.constant.RouterConstant; import com.tencent.cloud.polaris.router.PolarisRouterContext; import com.tencent.cloud.polaris.router.config.properties.PolarisMetadataRouterProperties; import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.plugins.router.metadata.MetadataRouter; import com.tencent.polaris.router.api.rpc.ProcessRoutersRequest; +import org.springframework.util.CollectionUtils; + /** * Router request interceptor for metadata router. * @author lepdou 2022-07-06 @@ -53,6 +57,12 @@ public class MetadataRouterRequestInterceptor implements RouterRequestIntercepto Map metadataRouterLabels = routerContext.getLabels(RouterConstant.ROUTER_LABELS, metadataRouterKeys); // 3. set metadata router labels to request - request.addRouterMetadata(MetadataRouter.ROUTER_TYPE_METADATA, metadataRouterLabels); + Set routeArguments = new HashSet<>(); + if (!CollectionUtils.isEmpty(metadataRouterKeys)) { + for (Map.Entry entry : metadataRouterLabels.entrySet()) { + routeArguments.add(RouteArgument.buildCustom(entry.getKey(), entry.getValue())); + } + } + request.putRouterArgument(MetadataRouter.ROUTER_TYPE_METADATA, routeArguments); } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/NearbyRouterRequestInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/NearbyRouterRequestInterceptor.java index 86efcd62..ca59f778 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/NearbyRouterRequestInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/NearbyRouterRequestInterceptor.java @@ -18,12 +18,13 @@ package com.tencent.cloud.polaris.router.interceptor; -import java.util.HashMap; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import com.tencent.cloud.polaris.router.PolarisRouterContext; import com.tencent.cloud.polaris.router.config.properties.PolarisNearByRouterProperties; import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.plugins.router.nearby.NearbyRouter; import com.tencent.polaris.router.api.rpc.ProcessRoutersRequest; @@ -45,9 +46,9 @@ public class NearbyRouterRequestInterceptor implements RouterRequestInterceptor return; } - Map nearbyRouterMetadata = new HashMap<>(); - nearbyRouterMetadata.put(NearbyRouter.ROUTER_ENABLED, "true"); + Set routeArguments = new HashSet<>(1); + routeArguments.add(RouteArgument.buildCustom(NearbyRouter.ROUTER_ENABLED, "true")); - request.addRouterMetadata(NearbyRouter.ROUTER_TYPE_NEAR_BY, nearbyRouterMetadata); + request.putRouterArgument(NearbyRouter.ROUTER_TYPE_NEAR_BY, routeArguments); } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/RuleBasedRouterRequestInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/RuleBasedRouterRequestInterceptor.java index 89512787..5887c39e 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/RuleBasedRouterRequestInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/interceptor/RuleBasedRouterRequestInterceptor.java @@ -18,16 +18,20 @@ package com.tencent.cloud.polaris.router.interceptor; -import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import com.tencent.cloud.common.constant.RouterConstant; import com.tencent.cloud.polaris.router.PolarisRouterContext; import com.tencent.cloud.polaris.router.config.properties.PolarisRuleBasedRouterProperties; import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.plugins.router.rule.RuleBasedRouter; import com.tencent.polaris.router.api.rpc.ProcessRoutersRequest; +import org.springframework.util.CollectionUtils; + /** * Router request interceptor for rule based router. * @author lepdou 2022-07-06 @@ -45,16 +49,21 @@ public class RuleBasedRouterRequestInterceptor implements RouterRequestIntercept boolean ruleBasedRouterEnabled = polarisRuleBasedRouterProperties.isEnabled(); // set dynamic switch for rule based router - Map metadata = new HashMap<>(); - metadata.put(RuleBasedRouter.ROUTER_ENABLED, String.valueOf(ruleBasedRouterEnabled)); - request.addRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED, metadata); + Set routeArguments = new HashSet<>(); + routeArguments.add(RouteArgument.buildCustom(RuleBasedRouter.ROUTER_ENABLED, String.valueOf(ruleBasedRouterEnabled))); // The label information that the rule based routing depends on // is placed in the metadata of the source service for transmission. // Later, can consider putting it in routerMetadata like other routers. if (ruleBasedRouterEnabled) { Map ruleRouterLabels = routerContext.getLabels(RouterConstant.ROUTER_LABELS); - request.getSourceService().setMetadata(ruleRouterLabels); + if (!CollectionUtils.isEmpty(ruleRouterLabels)) { + for (Map.Entry label : ruleRouterLabels.entrySet()) { + routeArguments.add(RouteArgument.buildCustom(label.getKey(), label.getValue())); + } + } } + + request.putRouterArgument(RuleBasedRouter.ROUTER_TYPE_RULE_BASED, routeArguments); } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRuleTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRuleTest.java index cde2df78..a8294541 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRuleTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRuleTest.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import com.netflix.client.config.DefaultClientConfigImpl; @@ -52,6 +53,7 @@ import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; import com.tencent.polaris.api.pojo.DefaultInstance; import com.tencent.polaris.api.pojo.DefaultServiceInstances; import com.tencent.polaris.api.pojo.Instance; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.api.pojo.ServiceInstances; import com.tencent.polaris.api.pojo.ServiceKey; import com.tencent.polaris.plugins.router.metadata.MetadataRouter; @@ -220,13 +222,16 @@ public class PolarisLoadBalancerCompositeRuleTest { ProcessRoutersRequest request = compositeRule.buildProcessRoutersBaseRequest(serviceInstances); compositeRule.processRouterRequestInterceptors(request, routerContext); - Map routerMetadata = request.getRouterMetadata(MetadataRouter.ROUTER_TYPE_METADATA); + Set routerMetadata = request.getRouterArguments(MetadataRouter.ROUTER_TYPE_METADATA); Assert.assertEquals(1, routerMetadata.size()); - Assert.assertEquals(0, request.getRouterMetadata(NearbyRouter.ROUTER_TYPE_NEAR_BY).size()); - Assert.assertEquals(1, request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED).size()); - Assert.assertEquals("false", request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED) - .get(RuleBasedRouter.ROUTER_ENABLED)); + Assert.assertEquals(0, request.getRouterArguments(NearbyRouter.ROUTER_TYPE_NEAR_BY).size()); + Assert.assertEquals(1, request.getRouterArguments(RuleBasedRouter.ROUTER_TYPE_RULE_BASED).size()); + + for (RouteArgument routeArgument : request.getRouterArguments(RuleBasedRouter.ROUTER_TYPE_RULE_BASED)) { + Assert.assertEquals(RuleBasedRouter.ROUTER_ENABLED, routeArgument.getKey()); + Assert.assertEquals("false", routeArgument.getValue()); + } } } @@ -250,14 +255,22 @@ public class PolarisLoadBalancerCompositeRuleTest { ProcessRoutersRequest request = compositeRule.buildProcessRoutersBaseRequest(serviceInstances); compositeRule.processRouterRequestInterceptors(request, routerContext); - Map routerMetadata = request.getRouterMetadata(NearbyRouter.ROUTER_TYPE_NEAR_BY); + Set routerMetadata = request.getRouterArguments(NearbyRouter.ROUTER_TYPE_NEAR_BY); - Assert.assertEquals(0, request.getRouterMetadata(MetadataRouter.ROUTER_TYPE_METADATA).size()); + Assert.assertEquals(0, request.getRouterArguments(MetadataRouter.ROUTER_TYPE_METADATA).size()); Assert.assertEquals(1, routerMetadata.size()); - Assert.assertEquals("true", routerMetadata.get(NearbyRouter.ROUTER_ENABLED)); - Assert.assertEquals(1, request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED).size()); - Assert.assertEquals("false", request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED) - .get(RuleBasedRouter.ROUTER_ENABLED)); + + for (RouteArgument routeArgument : routerMetadata) { + Assert.assertEquals(NearbyRouter.ROUTER_ENABLED, routeArgument.getKey()); + Assert.assertEquals("true", routeArgument.getValue()); + } + + Assert.assertEquals(1, request.getRouterArguments(RuleBasedRouter.ROUTER_TYPE_RULE_BASED).size()); + + for (RouteArgument routeArgument : request.getRouterArguments(RuleBasedRouter.ROUTER_TYPE_RULE_BASED)) { + Assert.assertEquals(RuleBasedRouter.ROUTER_ENABLED, routeArgument.getKey()); + Assert.assertEquals("false", routeArgument.getValue()); + } } } @@ -281,14 +294,11 @@ public class PolarisLoadBalancerCompositeRuleTest { ProcessRoutersRequest request = compositeRule.buildProcessRoutersBaseRequest(serviceInstances); compositeRule.processRouterRequestInterceptors(request, routerContext); - Map routerMetadata = request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED); + Set routerMetadata = request.getRouterArguments(RuleBasedRouter.ROUTER_TYPE_RULE_BASED); - Assert.assertEquals(1, routerMetadata.size()); - Assert.assertEquals(0, request.getRouterMetadata(MetadataRouter.ROUTER_TYPE_METADATA).size()); - Assert.assertEquals(0, request.getRouterMetadata(NearbyRouter.ROUTER_TYPE_NEAR_BY).size()); - Assert.assertEquals(1, request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED).size()); - Assert.assertEquals("true", request.getRouterMetadata(RuleBasedRouter.ROUTER_TYPE_RULE_BASED) - .get(RuleBasedRouter.ROUTER_ENABLED)); + Assert.assertEquals(3, routerMetadata.size()); + Assert.assertEquals(0, request.getRouterArguments(MetadataRouter.ROUTER_TYPE_METADATA).size()); + Assert.assertEquals(0, request.getRouterArguments(NearbyRouter.ROUTER_TYPE_NEAR_BY).size()); } } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 012d5d54..18e17cf6 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -71,7 +71,7 @@ 1.9.0-Hoxton.SR12-SNAPSHOT - 1.10.0-SNAPSHOT + 1.10.1-SNAPSHOT 1.2.11 4.5.1 1.12.10 diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-featureenv-plugin/src/main/java/com/tencent/cloud/plugin/featureenv/FeatureEnvRouterRequestInterceptor.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-featureenv-plugin/src/main/java/com/tencent/cloud/plugin/featureenv/FeatureEnvRouterRequestInterceptor.java index 05bbdaf4..2a135f3a 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-featureenv-plugin/src/main/java/com/tencent/cloud/plugin/featureenv/FeatureEnvRouterRequestInterceptor.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-featureenv-plugin/src/main/java/com/tencent/cloud/plugin/featureenv/FeatureEnvRouterRequestInterceptor.java @@ -18,11 +18,12 @@ package com.tencent.cloud.plugin.featureenv; -import java.util.HashMap; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import com.tencent.cloud.polaris.router.PolarisRouterContext; import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.api.rpc.MetadataFailoverType; import com.tencent.polaris.plugins.router.metadata.MetadataRouter; import com.tencent.polaris.router.api.rpc.ProcessRoutersRequest; @@ -54,10 +55,11 @@ public class FeatureEnvRouterRequestInterceptor implements RouterRequestIntercep } //3. set env metadata to router request - Map envMetadata = new HashMap<>(); - envMetadata.put(envLabelKey, envLabelValue); + Set routeArguments = new HashSet<>(1); + routeArguments.add(RouteArgument.buildCustom(envLabelKey, envLabelValue)); + + request.putRouterArgument(MetadataRouter.ROUTER_TYPE_METADATA, routeArguments); - request.addRouterMetadata(MetadataRouter.ROUTER_TYPE_METADATA, envMetadata); //4. set failover type to others request.setMetadataFailoverType(MetadataFailoverType.METADATAFAILOVERNOTKEY);