From 29eddf19b1b64af9cf88d4be272187c002ccd16d Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 16 Dec 2022 17:17:23 +0100 Subject: [PATCH] Chaning the DefaultSpanNamer logic back to original one this has caused issues in async spans and runnables where the toString didn't come from Object but was a default from classes such as e.g. FutureTask related issue #2234 --- .../cloud/sleuth/internal/DefaultSpanNamer.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java index 40c8454b1..cc8082c2e 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java @@ -41,13 +41,11 @@ import org.springframework.core.annotation.AnnotationUtils; */ public class DefaultSpanNamer implements SpanNamer { - private static boolean isDefaultToString(Object delegate) { - try { - return delegate.getClass().getMethod("toString").getDeclaringClass() == Object.class; - } - catch (NoSuchMethodException e) { - throw new RuntimeException(e); + private static boolean isDefaultToString(Object delegate, String spanName) { + if (delegate instanceof Method) { + return delegate.toString().equals(spanName); } + return (delegate.getClass().getName() + "@" + Integer.toHexString(delegate.hashCode())).equals(spanName); } @Override @@ -55,7 +53,7 @@ public class DefaultSpanNamer implements SpanNamer { SpanName annotation = annotation(object); String spanName = annotation != null ? annotation.value() : object.toString(); // If there is no overridden toString method we'll put a constant value - if (annotation == null && isDefaultToString(object)) { + if (isDefaultToString(object, spanName)) { return defaultValue; } return spanName;