From 354549035b559fa691814c02eb81362eb06bcf11 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 25 Nov 2020 15:24:30 +0100 Subject: [PATCH] Will reuse the mutable accessor if present; fixes gh-1742 --- .../sleuth/instrument/messaging/TraceMessageHandler.java | 6 +++++- .../instrument/messaging/TracingChannelInterceptor.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceMessageHandler.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceMessageHandler.java index d7afc387d..2e7f7d3ee 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceMessageHandler.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceMessageHandler.java @@ -264,7 +264,7 @@ class TraceMessageHandler { private Message outputMessage(Message originalMessage, Message retrievedMessage, MessageHeaderAccessor additionalHeaders) { - MessageHeaderAccessor headers = MessageHeaderAccessor.getMutableAccessor(originalMessage); + MessageHeaderAccessor headers = mutableHeaderAccessor(originalMessage); clearTechnicalTracingHeaders(headers); if (originalMessage instanceof ErrorMessage) { ErrorMessage errorMessage = (ErrorMessage) originalMessage; @@ -294,6 +294,10 @@ class TraceMessageHandler { } private MessageHeaderAccessor mutableHeaderAccessor(Message message) { + MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class); + if (accessor != null && accessor.isMutable()) { + return accessor; + } MessageHeaderAccessor headers = MessageHeaderAccessor.getMutableAccessor(message); headers.setLeaveMutable(true); return headers; diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java index 98aa57cf7..d01ac42ef 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java @@ -194,7 +194,7 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter i private Message outputMessage(Message originalMessage, Message retrievedMessage, MessageHeaderAccessor additionalHeaders) { - MessageHeaderAccessor headers = MessageHeaderAccessor.getMutableAccessor(originalMessage); + MessageHeaderAccessor headers = mutableHeaderAccessor(originalMessage); if (originalMessage instanceof ErrorMessage) { ErrorMessage errorMessage = (ErrorMessage) originalMessage; headers.copyHeaders(MessageHeaderPropagation.propagationHeaders(additionalHeaders.getMessageHeaders(), @@ -433,6 +433,10 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter i } private MessageHeaderAccessor mutableHeaderAccessor(Message message) { + MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class); + if (accessor != null && accessor.isMutable()) { + return accessor; + } MessageHeaderAccessor headers = MessageHeaderAccessor.getMutableAccessor(message); headers.setLeaveMutable(true); return headers;