diff --git a/spring-cloud-sleuth-reactor/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java b/spring-cloud-sleuth-reactor/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java index d8c6b244a..50efedea5 100644 --- a/spring-cloud-sleuth-reactor/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java +++ b/spring-cloud-sleuth-reactor/src/main/java/org/springframework/cloud/sleuth/instrument/reactor/ReactorSleuth.java @@ -45,7 +45,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-reactor/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java b/spring-cloud-sleuth-reactor/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java index d1ff48b5c..9cb7ff326 100644 --- a/spring-cloud-sleuth-reactor/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java +++ b/spring-cloud-sleuth-reactor/src/test/java/org/springframework/cloud/sleuth/instrument/reactor/SpanSubscriberTests.java @@ -179,6 +179,27 @@ public class SpanSubscriberTests { tracer.close(foo2); } + // #646 + @Test + public void should_work_for_mono_just_with_flat_map() { + + Span span = this.tracer.createSpan("foo"); + log.info("Hello"); + + Mono.just("value1") + .flatMap(request -> + Mono.just("value2") + .then(Mono.just("foo")) + ) + .map(a -> "qwe") + .block(); + + Awaitility.await().untilAsserted(() -> { + then(ExceptionUtils.getLastException()).isNull(); + }); + then(this.tracer.getCurrentSpan()).isNull(); + } + @AfterClass public static void cleanup() { Hooks.resetOnLastOperator();