Skip to content

Commit 451c5c7

Browse files
authored
Merge pull request #1661 from hanbingleixue/2.1.x
Fixed an issue where DubboProviderInterceptor remove tag on the consumer side. As a result, the traffic tag is removed and cannot be obtained from thread local
2 parents f04c5e0 + 7b78854 commit 451c5c7

File tree

6 files changed

+97
-0
lines changed

6 files changed

+97
-0
lines changed

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/main/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboProviderInterceptor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ protected ExecuteContext doBefore(ExecuteContext context) {
8484

8585
@Override
8686
protected ExecuteContext doAfter(ExecuteContext context) {
87+
if (isConsumer(context)) {
88+
return context;
89+
}
90+
8791
TrafficUtils.removeTrafficTag();
8892
return context;
8993
}
@@ -123,6 +127,9 @@ protected Map<String, List<String>> extractTrafficTagFromCarrier(RpcInvocation i
123127

124128
@Override
125129
public ExecuteContext onThrow(ExecuteContext context) {
130+
if (isConsumer(context)) {
131+
return context;
132+
}
126133
TrafficUtils.removeTrafficTag();
127134
return context;
128135
}

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/test/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboProviderInterceptorTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,32 @@ public void testAlibabaDubboProvider() {
9393
interceptor.after(returnContext);
9494
}
9595

96+
@Test
97+
public void testConsumerSideRemoveTrafficTag() {
98+
// If interceptor is invoked in consumer side, it should not remove traffic tag in after method.
99+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
100+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
101+
102+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "consumer");
103+
interceptor.before(context);
104+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
105+
interceptor.after(context);
106+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
107+
}
108+
109+
@Test
110+
public void testProviderSideRemoveTrafficTag() {
111+
// If interceptor is invoked in provider side, it should remove traffic tag in after method.
112+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
113+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
114+
115+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "provider");
116+
interceptor.before(context);
117+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
118+
interceptor.after(context);
119+
Assert.assertNull(TrafficUtils.getTrafficTag());
120+
}
121+
96122
private ExecuteContext buildContext(RpcInvocation rpcInvocation, Map<String, String> headers, String side) {
97123
URL url = new URL("http", "127.0.0.1", 8080);
98124
url = url.addParameter("side", side);

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/main/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboProviderInterceptor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,18 @@ protected ExecuteContext doBefore(ExecuteContext context) {
8383

8484
@Override
8585
protected ExecuteContext doAfter(ExecuteContext context) {
86+
if (isConsumer(context)) {
87+
return context;
88+
}
8689
TrafficUtils.removeTrafficTag();
8790
return context;
8891
}
8992

9093
@Override
9194
public ExecuteContext onThrow(ExecuteContext context) {
95+
if (isConsumer(context)) {
96+
return context;
97+
}
9298
TrafficUtils.removeTrafficTag();
9399
return context;
94100
}

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/test/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboProviderInterceptorTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,32 @@ public void testApacheDubboProvider() {
9292
interceptor.after(returnContext);
9393
}
9494

95+
@Test
96+
public void testConsumerSideRemoveTrafficTag() {
97+
// If interceptor is invoked in consumer side, it should not remove traffic tag in after method.
98+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
99+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
100+
101+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "consumer");
102+
interceptor.before(context);
103+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
104+
interceptor.after(context);
105+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
106+
}
107+
108+
@Test
109+
public void testProviderSideRemoveTrafficTag() {
110+
// If interceptor is invoked in provider side, it should remove traffic tag in after method.
111+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
112+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
113+
114+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "provider");
115+
interceptor.before(context);
116+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
117+
interceptor.after(context);
118+
Assert.assertNull(TrafficUtils.getTrafficTag());
119+
}
120+
95121
private ExecuteContext buildContext(RpcInvocation rpcInvocation, Map<String, String> headers, String side) {
96122
URL url = new URL("http", "127.0.0.1", 8080);
97123
url = url.addParameter("side", side);

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/main/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboProviderInterceptor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,18 @@ protected ExecuteContext doBefore(ExecuteContext context) {
8383

8484
@Override
8585
protected ExecuteContext doAfter(ExecuteContext context) {
86+
if (isConsumer(context)) {
87+
return context;
88+
}
8689
TrafficUtils.removeTrafficTag();
8790
return context;
8891
}
8992

9093
@Override
9194
public ExecuteContext onThrow(ExecuteContext context) {
95+
if (isConsumer(context)) {
96+
return context;
97+
}
9298
TrafficUtils.removeTrafficTag();
9399
return context;
94100
}

sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/test/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboProviderInterceptorTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,32 @@ public void testApacheDubboProvider() {
9292
interceptor.after(returnContext);
9393
}
9494

95+
@Test
96+
public void testConsumerSideRemoveTrafficTag() {
97+
// If interceptor is invoked in consumer side, it should not remove traffic tag in after method.
98+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
99+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
100+
101+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "consumer");
102+
interceptor.before(context);
103+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
104+
interceptor.after(context);
105+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
106+
}
107+
108+
@Test
109+
public void testProviderSideRemoveTrafficTag() {
110+
// If interceptor is invoked in provider side, it should remove traffic tag in after method.
111+
Map<String, List<String>> expectTag = buildExpectTrafficTag("id", "name");
112+
TrafficUtils.setTrafficTag(new TrafficTag(expectTag));
113+
114+
ExecuteContext context = buildContext(new RpcInvocation(), new HashMap<>(), "provider");
115+
interceptor.before(context);
116+
Assert.assertEquals(TrafficUtils.getTrafficTag().getTag(), expectTag);
117+
interceptor.after(context);
118+
Assert.assertNull(TrafficUtils.getTrafficTag());
119+
}
120+
95121
private ExecuteContext buildContext(RpcInvocation rpcInvocation, Map<String, String> headers, String side) {
96122
URL url = new URL("http", "127.0.0.1", 8080);
97123
url = url.addParameter("side", side);

0 commit comments

Comments
 (0)