From 1df75378a163e497de3942049e36ea7c99a7c248 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 13 May 2022 10:22:47 -0700 Subject: [PATCH] Mitigate against another kafka leak (#6021) --- .../instrumentation/kafkaclients/TracingIterator.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/TracingIterator.java b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/TracingIterator.java index b5cd07c8ff..da8c944d03 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/TracingIterator.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/TracingIterator.java @@ -53,10 +53,13 @@ public class TracingIterator implements Iterator> { // in case they didn't call hasNext()... closeScopeAndEndSpan(); + // it's important not to suppress consumer span creation here using Instrumenter.shouldStart() + // because this instrumentation can leak the context and so there may be a leaked consumer span + // in the context, in which case it's important to overwrite the leaked span instead of + // suppressing the correct span + // (https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/1947) ConsumerRecord next = delegateIterator.next(); - if (next != null - && consumerProcessInstrumenter().shouldStart(parentContext, next) - && KafkaClientsConsumerProcessTracing.wrappingEnabled()) { + if (next != null && KafkaClientsConsumerProcessTracing.wrappingEnabled()) { currentRequest = next; currentContext = consumerProcessInstrumenter().start(parentContext, currentRequest); currentScope = currentContext.makeCurrent();