From d630f93820de51c6ad8cac143b6ef9d1613b9cf8 Mon Sep 17 00:00:00 2001 From: lilai Date: Tue, 19 Nov 2024 19:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91ignore=20tag=20injection?= =?UTF-8?q?=20when=20the=20key=20exists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lilai --- .../AlibabaDubboConsumerInterceptor.java | 8 ++++++++ .../ApacheDubboConsumerInterceptor.java | 8 ++++++++ .../ApacheDubboConsumerInterceptor.java | 7 +++++++ .../interceptors/ClientCallImplInterceptor.java | 8 ++++++++ .../interceptors/HttpClient3xInterceptor.java | 8 ++++++++ .../interceptors/HttpClient4xInterceptor.java | 8 ++++++++ .../interceptors/JdkHttpClientInterceptor.java | 7 +++++++ .../interceptors/KafkaProducerInterceptor.java | 8 ++++++++ .../okhttpv2/interceptors/OkHttp2xInterceptor.java | 14 ++++++++++++++ .../RocketmqProducerSendInterceptor.java | 10 ++++++++-- .../RocketmqProducerSendInterceptor.java | 10 ++++++++-- .../ServiceCombRpcConsumerInterceptor.java | 8 ++++++++ .../interceptors/SofaRpcClientInterceptor.java | 7 +++++++ 13 files changed, 107 insertions(+), 4 deletions(-) diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/main/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboConsumerInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/main/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboConsumerInterceptor.java index baa586b659..8abbbdd4d0 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/main/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboConsumerInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.6.x-plugin/src/main/java/io/sermant/tag/transmission/alibabadubbo/interceptors/AlibabaDubboConsumerInterceptor.java @@ -21,6 +21,7 @@ import io.sermant.core.common.LoggerFactory; import io.sermant.core.plugin.agent.entity.ExecuteContext; import io.sermant.core.utils.CollectionUtils; +import io.sermant.core.utils.StringUtils; import io.sermant.core.utils.tag.TrafficUtils; import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; @@ -71,6 +72,13 @@ protected void injectTrafficTag2Carrier(RpcInvocation invocation) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original attachment contains the specific key, then ignore + String originalAttachment = invocation.getAttachment(key); + if (!StringUtils.isEmpty(originalAttachment)) { + continue; + } + List values = entry.getValue(); // If the tag value is not null on the provider side, it will be converted to list storage. If it is null, diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/main/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboConsumerInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/main/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboConsumerInterceptor.java index a1783882b0..232ad6be78 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/main/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboConsumerInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo2.7.x-plugin/src/main/java/io/sermant/tag/transmission/apachedubbov2/interceptors/ApacheDubboConsumerInterceptor.java @@ -19,6 +19,7 @@ import io.sermant.core.common.LoggerFactory; import io.sermant.core.plugin.agent.entity.ExecuteContext; import io.sermant.core.utils.CollectionUtils; +import io.sermant.core.utils.StringUtils; import io.sermant.core.utils.tag.TrafficUtils; import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; @@ -66,6 +67,13 @@ protected void injectTrafficTag2Carrier(RpcInvocation invocation) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original attachment contains the specific key, then ignore + String originalAttachment = invocation.getAttachment(key); + if (!StringUtils.isEmpty(originalAttachment)) { + continue; + } + List values = entry.getValue(); // If the tag value is not null on the provider side, it will be converted to list storage. If it is null, diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/main/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboConsumerInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/main/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboConsumerInterceptor.java index eb693401fa..649df8552e 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/main/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboConsumerInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-dubbo3.x-plugin/src/main/java/io/sermant/tag/transmission/dubbov3/interceptors/ApacheDubboConsumerInterceptor.java @@ -66,6 +66,13 @@ protected void injectTrafficTag2Carrier(RpcInvocation invocation) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original attachment contains the specific key, then ignore + Object originalAttachment = invocation.getObjectAttachment(key); + if (originalAttachment != null) { + continue; + } + List values = entry.getValue(); // If the tag value is not null on the provider side, it will be converted to list storage. If it is null, diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-grpc-plugin/src/main/java/io/sermant/tag/transmission/grpc/interceptors/ClientCallImplInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-grpc-plugin/src/main/java/io/sermant/tag/transmission/grpc/interceptors/ClientCallImplInterceptor.java index ac41dbc919..6210ce0bc0 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-grpc-plugin/src/main/java/io/sermant/tag/transmission/grpc/interceptors/ClientCallImplInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-grpc-plugin/src/main/java/io/sermant/tag/transmission/grpc/interceptors/ClientCallImplInterceptor.java @@ -20,6 +20,7 @@ import io.sermant.core.common.LoggerFactory; import io.sermant.core.plugin.agent.entity.ExecuteContext; import io.sermant.core.utils.CollectionUtils; +import io.sermant.core.utils.StringUtils; import io.sermant.core.utils.tag.TrafficUtils; import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; @@ -65,6 +66,13 @@ protected void injectTrafficTag2Carrier(Metadata header) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original metadata contains the specific key, then ignore + String originalHeaderValue = header.get(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER)); + if (!StringUtils.isEmpty(originalHeaderValue)) { + continue; + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient3.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv3/interceptors/HttpClient3xInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient3.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv3/interceptors/HttpClient3xInterceptor.java index c822cadc82..5831e93a99 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient3.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv3/interceptors/HttpClient3xInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient3.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv3/interceptors/HttpClient3xInterceptor.java @@ -23,6 +23,7 @@ import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; +import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpMethod; import java.util.List; @@ -66,6 +67,13 @@ protected void injectTrafficTag2Carrier(HttpMethod httpMethod) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Header originalRequestHeader = httpMethod.getRequestHeader(key); + if (originalRequestHeader != null) { + continue; + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient4.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv4/interceptors/HttpClient4xInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient4.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv4/interceptors/HttpClient4xInterceptor.java index 55037e98b1..b3770037c0 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient4.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv4/interceptors/HttpClient4xInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-httpclient4.x-plugin/src/main/java/io/sermant/tag/transmission/httpclientv4/interceptors/HttpClient4xInterceptor.java @@ -23,6 +23,7 @@ import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; +import org.apache.http.Header; import org.apache.http.HttpRequest; import java.util.List; @@ -66,6 +67,13 @@ protected void injectTrafficTag2Carrier(HttpRequest httpRequest) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Header[] originalHeaders = httpRequest.getHeaders(key); + if (originalHeaders != null && originalHeaders.length != 0) { + continue; + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-jdkhttp-plugin/src/main/java/io/sermant/tag/transmission/jdkhttp/interceptors/JdkHttpClientInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-jdkhttp-plugin/src/main/java/io/sermant/tag/transmission/jdkhttp/interceptors/JdkHttpClientInterceptor.java index 13a44f3257..49135d6130 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-jdkhttp-plugin/src/main/java/io/sermant/tag/transmission/jdkhttp/interceptors/JdkHttpClientInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-jdkhttp-plugin/src/main/java/io/sermant/tag/transmission/jdkhttp/interceptors/JdkHttpClientInterceptor.java @@ -83,6 +83,13 @@ protected void injectTrafficTag2Carrier(MessageHeader messageHeader) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Map> originalHeaders = messageHeader.getHeaders(); + if (originalHeaders.get(key) != null && originalHeaders.size() != 0) { + continue; + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-kafka-plugin/src/main/java/io/sermant/tag/transmission/kafka/interceptors/KafkaProducerInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-kafka-plugin/src/main/java/io/sermant/tag/transmission/kafka/interceptors/KafkaProducerInterceptor.java index 4c07214144..ac71e23f2c 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-kafka-plugin/src/main/java/io/sermant/tag/transmission/kafka/interceptors/KafkaProducerInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-kafka-plugin/src/main/java/io/sermant/tag/transmission/kafka/interceptors/KafkaProducerInterceptor.java @@ -24,6 +24,7 @@ import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.header.Header; import org.apache.kafka.common.header.Headers; import java.nio.charset.StandardCharsets; @@ -69,6 +70,13 @@ protected void injectTrafficTag2Carrier(ProducerRecord producerRecord) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Header originalHeader = headers.lastHeader(key); + if (originalHeader != null) { + continue; + } + List values = entry.getValue(); // On the producer side, if the tag value is not null, it is converted to list storage. If it is null, it diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-okhttp2.x-plugin/src/main/java/io/sermant/tag/transmission/okhttpv2/interceptors/OkHttp2xInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-okhttp2.x-plugin/src/main/java/io/sermant/tag/transmission/okhttpv2/interceptors/OkHttp2xInterceptor.java index 9c7c2b3abf..de1116138b 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-okhttp2.x-plugin/src/main/java/io/sermant/tag/transmission/okhttpv2/interceptors/OkHttp2xInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-okhttp2.x-plugin/src/main/java/io/sermant/tag/transmission/okhttpv2/interceptors/OkHttp2xInterceptor.java @@ -16,17 +16,20 @@ package io.sermant.tag.transmission.okhttpv2.interceptors; +import com.squareup.okhttp.Headers; import com.squareup.okhttp.Request.Builder; import io.sermant.core.common.LoggerFactory; import io.sermant.core.plugin.agent.entity.ExecuteContext; import io.sermant.core.utils.CollectionUtils; +import io.sermant.core.utils.ReflectUtils; import io.sermant.core.utils.tag.TrafficUtils; import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -75,6 +78,17 @@ protected void injectTrafficTag2Carrier(Builder builder) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Optional headersBuilderObject = ReflectUtils.getFieldValue(builder, "headers"); + if (headersBuilderObject.isPresent()) { + Headers.Builder headersBuilder = (Headers.Builder) headersBuilderObject.get(); + String value = headersBuilder.get(key); + if (value != null) { + continue; + } + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq4.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv4/interceptors/RocketmqProducerSendInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq4.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv4/interceptors/RocketmqProducerSendInterceptor.java index 3550a64777..b52c583ba0 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq4.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv4/interceptors/RocketmqProducerSendInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq4.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv4/interceptors/RocketmqProducerSendInterceptor.java @@ -75,8 +75,8 @@ protected void injectTrafficTag2Carrier(SendMessageRequestHeader header) { } /** - * Insert the traffic tag into the properties string. The format of the original properties is as - * follows: key1[SOH]value1[STX]key2[SOH]value2, [SOH] is the symbol of ASCII=1, [STX] is the symbol of ASCII=2 + * Insert the traffic tag into the properties string. The format of the original properties is as follows: + * key1[SOH]value1[STX]key2[SOH]value2, [SOH] is the symbol of ASCII=1, [STX] is the symbol of ASCII=2 * * @param oldProperties original properties * @return String @@ -88,6 +88,12 @@ private String insertTags2Properties(String oldProperties) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original properties contains the specific key, then ignore + if (oldProperties.contains(key)) { + continue; + } + List values = entry.getValue(); newProperties.append(key); newProperties.append(LINK_MARK); diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq5.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv5/interceptor/RocketmqProducerSendInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq5.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv5/interceptor/RocketmqProducerSendInterceptor.java index 43af1bf86b..76e0542b63 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq5.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv5/interceptor/RocketmqProducerSendInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-rocketmq5.x-plugin/src/main/java/io/sermant/tag/transmission/rocketmqv5/interceptor/RocketmqProducerSendInterceptor.java @@ -75,8 +75,8 @@ protected void injectTrafficTag2Carrier(SendMessageRequestHeader header) { } /** - * Insert the traffic tag into the properties string. The format of the original properties is as - * follows: key1[SOH]value1[STX]key2[SOH]value2, [SOH] is the symbol of ASCII=1, [STX] is the symbol of ASCII=2 + * Insert the traffic tag into the properties string. The format of the original properties is as follows: + * key1[SOH]value1[STX]key2[SOH]value2, [SOH] is the symbol of ASCII=1, [STX] is the symbol of ASCII=2 * * @param oldProperties original properties * @return String @@ -88,6 +88,12 @@ private String insertTags2Properties(String oldProperties) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original properties contains the specific key, then ignore + if (oldProperties.contains(key)) { + continue; + } + List values = entry.getValue(); newProperties.append(key); newProperties.append(LINK_MARK); diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-servicecomb-plugin/src/main/java/io/sermant/tag/transmission/servicecomb/interceptors/ServiceCombRpcConsumerInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-servicecomb-plugin/src/main/java/io/sermant/tag/transmission/servicecomb/interceptors/ServiceCombRpcConsumerInterceptor.java index a050c9f011..bb397edb93 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-servicecomb-plugin/src/main/java/io/sermant/tag/transmission/servicecomb/interceptors/ServiceCombRpcConsumerInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-servicecomb-plugin/src/main/java/io/sermant/tag/transmission/servicecomb/interceptors/ServiceCombRpcConsumerInterceptor.java @@ -19,6 +19,7 @@ import io.sermant.core.common.LoggerFactory; import io.sermant.core.plugin.agent.entity.ExecuteContext; import io.sermant.core.utils.CollectionUtils; +import io.sermant.core.utils.StringUtils; import io.sermant.core.utils.tag.TrafficUtils; import io.sermant.tag.transmission.config.strategy.TagKeyMatcher; import io.sermant.tag.transmission.interceptors.AbstractClientInterceptor; @@ -69,6 +70,13 @@ protected void injectTrafficTag2Carrier(Invocation invocation) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + String originalHeader = invocation.getContext().get(key); + if (!StringUtils.isEmpty(originalHeader)) { + continue; + } + List values = entry.getValue(); // If the tag value is not null on the provider side, it will be converted to list storage. If it is null, diff --git a/sermant-plugins/sermant-tag-transmission/tag-transmission-sofarpc-plugin/src/main/java/io/sermant/tag/transmission/sofarpc/interceptors/SofaRpcClientInterceptor.java b/sermant-plugins/sermant-tag-transmission/tag-transmission-sofarpc-plugin/src/main/java/io/sermant/tag/transmission/sofarpc/interceptors/SofaRpcClientInterceptor.java index 84e2b60779..b3aa2b96c0 100644 --- a/sermant-plugins/sermant-tag-transmission/tag-transmission-sofarpc-plugin/src/main/java/io/sermant/tag/transmission/sofarpc/interceptors/SofaRpcClientInterceptor.java +++ b/sermant-plugins/sermant-tag-transmission/tag-transmission-sofarpc-plugin/src/main/java/io/sermant/tag/transmission/sofarpc/interceptors/SofaRpcClientInterceptor.java @@ -69,6 +69,13 @@ protected void injectTrafficTag2Carrier(SofaRequest sofaRequest) { if (!TagKeyMatcher.isMatch(key)) { continue; } + + // if original headers contains the specific key, then ignore + Object originalHeader = sofaRequest.getRequestProp(key); + if (originalHeader != null) { + continue; + } + List values = entry.getValue(); // The server side converts the label value to list storage when it is not null. If it is null, it directly