Skip to content

Commit 7b78854

Browse files
rztaohanbingleixue
authored andcommitted
Fix remove tag issue for DubboProviderInterceptor in consumer side, it will cause previously traffic tag removed and the follow up invocation can not get traffic tag from thread local
Signed-off-by: rztao <trz_1985@126.com>
1 parent f04c5e0 commit 7b78854

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)