diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java index 0bd1792f8..47ba879fd 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java @@ -102,7 +102,7 @@ public abstract class ReactorSleuth { } private static final Predicate POINTCUT_FILTER = - s -> !(s instanceof Fuseable.ScalarCallable); + s -> !(s instanceof Fuseable.ScalarCallable) && s.isScanAvailable(); private ReactorSleuth() { } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java index 9c78dc1f5..8cf19b972 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java @@ -225,6 +225,18 @@ public class SpanSubscriberTests { then(spanInOperation).hasValue(initSpan.context().traceId()); // Expecting to have value: <1L> but did not. } + // #646 + @Test + public void should_work_for_mono_just_with_flat_map() { + Span initSpan = this.tracer.nextSpan().name("foo").start(); + log.info("Hello"); + + try (Tracer.SpanInScope ws = this.tracer.withSpanInScope(initSpan)) { + Mono.just("value1").flatMap(request -> Mono.just("value2").then(Mono.just("foo"))) + .map(a -> "qwe").block(); + } + } + @AfterClass public static void cleanup() { Hooks.resetOnLastOperator();