From 382f4a0da786bea63159fa4e9593906b729c7b88 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 25 Nov 2020 15:24:14 +0100 Subject: [PATCH] Will reuse the mutable accessor if present; fixes gh-1742 --- .../messaging/TracingChannelInterceptor.java | 8 ++++++-- .../messaging/TracingMethodMessageHandlerAdapter.java | 11 ++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java index 4e8bb6d13..3f95197b0 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java @@ -209,8 +209,7 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter 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( @@ -412,6 +411,11 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter } 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-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingMethodMessageHandlerAdapter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingMethodMessageHandlerAdapter.java index 6167050dd..ebdee8e65 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingMethodMessageHandlerAdapter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingMethodMessageHandlerAdapter.java @@ -138,10 +138,19 @@ final class MessageConsumerRequest extends ConsumerRequest { MessageConsumerRequest(Message delegate, Getter getter) { this.delegate = delegate; - this.mutableHeaders = MessageHeaderAccessor.getMutableAccessor(delegate); + this.mutableHeaders = mutableAccessor(delegate); this.getter = getter; } + private MessageHeaderAccessor mutableAccessor(Message message) { + MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, + MessageHeaderAccessor.class); + if (accessor != null && accessor.isMutable()) { + return accessor; + } + return MessageHeaderAccessor.getMutableAccessor(delegate); + } + @Override public Span.Kind spanKind() { return Span.Kind.CONSUMER;