From c98e92d3c0054276dd43d3ea22d539eb8cceafd4 Mon Sep 17 00:00:00 2001 From: liaochuntao Date: Thu, 17 Nov 2022 17:57:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8DProcessRoutersRequest?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1RouteArgument=E7=9A=84=E9=97=AE=E9=A2=98=20(#?= =?UTF-8?q?248)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../polaris/api/pojo/SourceService.java | 7 +-- .../router/api/rpc/ProcessRoutersRequest.java | 33 ++++++------ .../api/rpc/ProcessRoutersRequestTests.java | 50 ++++++++++++++++++- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/SourceService.java b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/SourceService.java index 3d83d93c7..b9f047a63 100644 --- a/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/SourceService.java +++ b/polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/SourceService.java @@ -42,11 +42,8 @@ public void appendArguments(RouteArgument argument) { } public void setArguments(Set arguments) { - if (CollectionUtils.isEmpty(arguments)) { - this.arguments = Collections.emptySet(); - } - else { - this.arguments = arguments; + if (!CollectionUtils.isEmpty(arguments)) { + this.arguments.addAll(arguments); } } diff --git a/polaris-router/polaris-router-api/src/main/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequest.java b/polaris-router/polaris-router-api/src/main/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequest.java index 2166b13e3..2ca354784 100644 --- a/polaris-router/polaris-router-api/src/main/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequest.java +++ b/polaris-router/polaris-router-api/src/main/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequest.java @@ -65,11 +65,7 @@ public void setSourceService(ServiceInfo serviceInfo) { Optional.ofNullable(serviceInfo.getMetadata()).orElse(new HashMap<>()) .forEach((key, value) -> sourceService.appendArguments(RouteArgument.fromLabel(key, value))); - if (Objects.isNull(routerArgument)) { - this.routerArgument = new HashMap<>(); - } - Set arguments = routerArgument.computeIfAbsent("ruleRouter", k -> new HashSet<>()); - arguments.addAll(sourceService.getArguments()); + buildRouterArgumentsBySourceService(); } public String getMethod() { @@ -108,9 +104,7 @@ public void putRouterArgument(String routerType, Set arguments) { } public Set getRouterArguments(String routerType) { - if (routerArgument == null) { - return Collections.emptySet(); - } + buildRouterArgumentsBySourceService(); Set arguments = routerArgument.get(routerType); if (CollectionUtils.isEmpty(arguments)) { return Collections.emptySet(); @@ -120,9 +114,7 @@ public Set getRouterArguments(String routerType) { } public Map> getRouterArguments() { - if (routerArgument == null) { - return Collections.emptyMap(); - } + buildRouterArgumentsBySourceService(); Map> routerArgument = new HashMap<>(this.routerArgument); return Collections.unmodifiableMap(routerArgument); } @@ -135,6 +127,17 @@ public void setMetadataFailoverType(MetadataFailoverType metadataFailoverType) { this.metadataFailoverType = metadataFailoverType; } + private void buildRouterArgumentsBySourceService() { + if (CollectionUtils.isEmpty(routerArgument)) { + routerArgument = new HashMap<>(); + } + if (Objects.isNull(sourceService)) { + return; + } + Set arguments = routerArgument.computeIfAbsent("ruleRouter", k -> new HashSet<>()); + arguments.addAll(sourceService.getArguments()); + } + @Deprecated public void putRouterMetadata(String routerType, Map metadata) { if (MapUtils.isEmpty(metadata)) { @@ -166,9 +169,7 @@ public void addRouterMetadata(String routerType, Map metadata) { @Deprecated public Map getRouterMetadata(String routerType) { - if (routerArgument == null) { - return Collections.emptyMap(); - } + buildRouterArgumentsBySourceService(); Set arguments = routerArgument.get(routerType); if (CollectionUtils.isEmpty(arguments)) { return Collections.emptyMap(); @@ -182,9 +183,7 @@ public Map getRouterMetadata(String routerType) { @Deprecated public Map> getRouterMetadata() { - if (Objects.isNull(routerArgument)) { - return Collections.emptyMap(); - } + buildRouterArgumentsBySourceService(); Map> ret = new HashMap<>(); diff --git a/polaris-router/polaris-router-api/src/test/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequestTests.java b/polaris-router/polaris-router-api/src/test/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequestTests.java index 89abaf9ab..71d224327 100644 --- a/polaris-router/polaris-router-api/src/test/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequestTests.java +++ b/polaris-router/polaris-router-api/src/test/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequestTests.java @@ -17,9 +17,12 @@ package com.tencent.polaris.router.api.rpc; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import com.tencent.polaris.api.pojo.RouteArgument; import com.tencent.polaris.api.pojo.ServiceInfo; import com.tencent.polaris.api.pojo.SourceService; import org.junit.Assert; @@ -31,8 +34,9 @@ public class ProcessRoutersRequestTests { public void testGetRouterArguments() { ProcessRoutersRequest request = new ProcessRoutersRequest(); request.getRouterArguments(); - request.getRouterArguments("ruleRouter"); + request.getRouterMetadata(); + request.getRouterMetadata("ruleRouter"); } @Test @@ -49,5 +53,49 @@ public void testSetSourceService() { SourceService sourceService = (SourceService) request.getSourceService(); Assert.assertEquals(2, sourceService.getArguments().size()); Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size()); + Assert.assertEquals(1, request.getRouterMetadata().size()); + Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size()); + } + + @Test + public void testSetSourceService2() { + ProcessRoutersRequest request = new ProcessRoutersRequest(); + SourceService serviceInfo = new SourceService(); + serviceInfo.appendArguments(RouteArgument.fromLabel("$header.uid", "123")); + serviceInfo.setArguments(new HashSet<>(Arrays.asList( + RouteArgument.fromLabel("uid", "123") + ))); + + request.setSourceService(serviceInfo); + + SourceService sourceService = (SourceService) request.getSourceService(); + Assert.assertEquals(2, sourceService.getArguments().size()); + Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size()); + Assert.assertEquals(1, request.getRouterMetadata().size()); + Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size()); + } + + @Test + public void testSetSourceService3() { + ProcessRoutersRequest request = new ProcessRoutersRequest(); + SourceService serviceInfo = new SourceService(); + serviceInfo.appendArguments(RouteArgument.fromLabel("$header.uid", "123")); + serviceInfo.setArguments(new HashSet<>(Arrays.asList( + RouteArgument.fromLabel("uid", "123") + ))); + + request.setSourceService(serviceInfo); + + SourceService sourceService = (SourceService) request.getSourceService(); + Assert.assertEquals(2, sourceService.getArguments().size()); + Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size()); + Assert.assertEquals(1, request.getRouterMetadata().size()); + Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size()); + + ((SourceService) request.getSourceService()).appendArguments(RouteArgument.fromLabel("$header.env", "prod")); + Assert.assertEquals(3, sourceService.getArguments().size()); + Assert.assertEquals(3, request.getRouterArguments("ruleRouter").size()); + Assert.assertEquals(1, request.getRouterMetadata().size()); + Assert.assertEquals(3, request.getRouterMetadata("ruleRouter").size()); } } \ No newline at end of file