Skip to content

Commit c98e92d

Browse files
authored
fix:修复ProcessRoutersRequest丢失RouteArgument的问题 (#248)
1 parent bd8e932 commit c98e92d

File tree

3 files changed

+67
-23
lines changed

3 files changed

+67
-23
lines changed

polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/SourceService.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,8 @@ public void appendArguments(RouteArgument argument) {
4242
}
4343

4444
public void setArguments(Set<RouteArgument> arguments) {
45-
if (CollectionUtils.isEmpty(arguments)) {
46-
this.arguments = Collections.emptySet();
47-
}
48-
else {
49-
this.arguments = arguments;
45+
if (!CollectionUtils.isEmpty(arguments)) {
46+
this.arguments.addAll(arguments);
5047
}
5148
}
5249

polaris-router/polaris-router-api/src/main/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequest.java

+16-17
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,7 @@ public void setSourceService(ServiceInfo serviceInfo) {
6565
Optional.ofNullable(serviceInfo.getMetadata()).orElse(new HashMap<>())
6666
.forEach((key, value) -> sourceService.appendArguments(RouteArgument.fromLabel(key, value)));
6767

68-
if (Objects.isNull(routerArgument)) {
69-
this.routerArgument = new HashMap<>();
70-
}
71-
Set<RouteArgument> arguments = routerArgument.computeIfAbsent("ruleRouter", k -> new HashSet<>());
72-
arguments.addAll(sourceService.getArguments());
68+
buildRouterArgumentsBySourceService();
7369
}
7470

7571
public String getMethod() {
@@ -108,9 +104,7 @@ public void putRouterArgument(String routerType, Set<RouteArgument> arguments) {
108104
}
109105

110106
public Set<RouteArgument> getRouterArguments(String routerType) {
111-
if (routerArgument == null) {
112-
return Collections.emptySet();
113-
}
107+
buildRouterArgumentsBySourceService();
114108
Set<RouteArgument> arguments = routerArgument.get(routerType);
115109
if (CollectionUtils.isEmpty(arguments)) {
116110
return Collections.emptySet();
@@ -120,9 +114,7 @@ public Set<RouteArgument> getRouterArguments(String routerType) {
120114
}
121115

122116
public Map<String, Set<RouteArgument>> getRouterArguments() {
123-
if (routerArgument == null) {
124-
return Collections.emptyMap();
125-
}
117+
buildRouterArgumentsBySourceService();
126118
Map<String, Set<RouteArgument>> routerArgument = new HashMap<>(this.routerArgument);
127119
return Collections.unmodifiableMap(routerArgument);
128120
}
@@ -135,6 +127,17 @@ public void setMetadataFailoverType(MetadataFailoverType metadataFailoverType) {
135127
this.metadataFailoverType = metadataFailoverType;
136128
}
137129

130+
private void buildRouterArgumentsBySourceService() {
131+
if (CollectionUtils.isEmpty(routerArgument)) {
132+
routerArgument = new HashMap<>();
133+
}
134+
if (Objects.isNull(sourceService)) {
135+
return;
136+
}
137+
Set<RouteArgument> arguments = routerArgument.computeIfAbsent("ruleRouter", k -> new HashSet<>());
138+
arguments.addAll(sourceService.getArguments());
139+
}
140+
138141
@Deprecated
139142
public void putRouterMetadata(String routerType, Map<String, String> metadata) {
140143
if (MapUtils.isEmpty(metadata)) {
@@ -166,9 +169,7 @@ public void addRouterMetadata(String routerType, Map<String, String> metadata) {
166169

167170
@Deprecated
168171
public Map<String, String> getRouterMetadata(String routerType) {
169-
if (routerArgument == null) {
170-
return Collections.emptyMap();
171-
}
172+
buildRouterArgumentsBySourceService();
172173
Set<RouteArgument> arguments = routerArgument.get(routerType);
173174
if (CollectionUtils.isEmpty(arguments)) {
174175
return Collections.emptyMap();
@@ -182,9 +183,7 @@ public Map<String, String> getRouterMetadata(String routerType) {
182183

183184
@Deprecated
184185
public Map<String, Map<String, String>> getRouterMetadata() {
185-
if (Objects.isNull(routerArgument)) {
186-
return Collections.emptyMap();
187-
}
186+
buildRouterArgumentsBySourceService();
188187

189188
Map<String, Map<String, String>> ret = new HashMap<>();
190189

polaris-router/polaris-router-api/src/test/java/com/tencent/polaris/router/api/rpc/ProcessRoutersRequestTests.java

+49-1
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717

1818
package com.tencent.polaris.router.api.rpc;
1919

20+
import java.util.Arrays;
2021
import java.util.HashMap;
22+
import java.util.HashSet;
2123
import java.util.Map;
2224

25+
import com.tencent.polaris.api.pojo.RouteArgument;
2326
import com.tencent.polaris.api.pojo.ServiceInfo;
2427
import com.tencent.polaris.api.pojo.SourceService;
2528
import org.junit.Assert;
@@ -31,8 +34,9 @@ public class ProcessRoutersRequestTests {
3134
public void testGetRouterArguments() {
3235
ProcessRoutersRequest request = new ProcessRoutersRequest();
3336
request.getRouterArguments();
34-
3537
request.getRouterArguments("ruleRouter");
38+
request.getRouterMetadata();
39+
request.getRouterMetadata("ruleRouter");
3640
}
3741

3842
@Test
@@ -49,5 +53,49 @@ public void testSetSourceService() {
4953
SourceService sourceService = (SourceService) request.getSourceService();
5054
Assert.assertEquals(2, sourceService.getArguments().size());
5155
Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size());
56+
Assert.assertEquals(1, request.getRouterMetadata().size());
57+
Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size());
58+
}
59+
60+
@Test
61+
public void testSetSourceService2() {
62+
ProcessRoutersRequest request = new ProcessRoutersRequest();
63+
SourceService serviceInfo = new SourceService();
64+
serviceInfo.appendArguments(RouteArgument.fromLabel("$header.uid", "123"));
65+
serviceInfo.setArguments(new HashSet<>(Arrays.asList(
66+
RouteArgument.fromLabel("uid", "123")
67+
)));
68+
69+
request.setSourceService(serviceInfo);
70+
71+
SourceService sourceService = (SourceService) request.getSourceService();
72+
Assert.assertEquals(2, sourceService.getArguments().size());
73+
Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size());
74+
Assert.assertEquals(1, request.getRouterMetadata().size());
75+
Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size());
76+
}
77+
78+
@Test
79+
public void testSetSourceService3() {
80+
ProcessRoutersRequest request = new ProcessRoutersRequest();
81+
SourceService serviceInfo = new SourceService();
82+
serviceInfo.appendArguments(RouteArgument.fromLabel("$header.uid", "123"));
83+
serviceInfo.setArguments(new HashSet<>(Arrays.asList(
84+
RouteArgument.fromLabel("uid", "123")
85+
)));
86+
87+
request.setSourceService(serviceInfo);
88+
89+
SourceService sourceService = (SourceService) request.getSourceService();
90+
Assert.assertEquals(2, sourceService.getArguments().size());
91+
Assert.assertEquals(2, request.getRouterArguments("ruleRouter").size());
92+
Assert.assertEquals(1, request.getRouterMetadata().size());
93+
Assert.assertEquals(2, request.getRouterMetadata("ruleRouter").size());
94+
95+
((SourceService) request.getSourceService()).appendArguments(RouteArgument.fromLabel("$header.env", "prod"));
96+
Assert.assertEquals(3, sourceService.getArguments().size());
97+
Assert.assertEquals(3, request.getRouterArguments("ruleRouter").size());
98+
Assert.assertEquals(1, request.getRouterMetadata().size());
99+
Assert.assertEquals(3, request.getRouterMetadata("ruleRouter").size());
52100
}
53101
}

0 commit comments

Comments
 (0)