Skip to content

Commit c005dfe

Browse files
authored
Fix agentextension publishing and LocalRootSpan bug in agentextension (#218)
1 parent d70ec67 commit c005dfe

File tree

4 files changed

+40
-22
lines changed

4 files changed

+40
-22
lines changed

agentextension/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ dependencies {
1414
shadowDependencies(project(":custom"))
1515
}
1616

17+
publishingConventions {
18+
artifactTasks.add(tasks.shadowJar)
19+
artifactTasks.add(tasks.javadocJar)
20+
artifactTasks.add(tasks.sourcesJar)
21+
}
1722

1823
tasks {
1924

common/src/main/java/co/elastic/otel/common/LocalRootSpan.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@ public static void onSpanStart(ReadableSpan startedSpan, Context parentContext)
7979
}
8080
}
8181

82+
/** See {@link LocalRootSpan#getFor(Span)}. */
83+
@Nullable
84+
public static ReadableSpan getFor(ReadableSpan span) {
85+
Object rootSpanVal = localRoot.get(span);
86+
if (rootSpanVal == LOCAL_ROOT_MARKER) {
87+
return span;
88+
}
89+
if (rootSpanVal == INFERRED_SPAN_UNKNOWN_ROOT_MARKER) {
90+
return null;
91+
}
92+
return (ReadableSpan) rootSpanVal;
93+
}
94+
8295
/**
8396
* If the provided span is a local root span, itself is returned. Otherwise, returns the
8497
* (transitive) parent which is a local root.
@@ -93,31 +106,14 @@ public static void onSpanStart(ReadableSpan startedSpan, Context parentContext)
93106
* </ul>
94107
*/
95108
@Nullable
96-
public static Span getFor(Span span) {
97-
return resolveRoot(span, localRoot.get(span));
109+
public static ReadableSpan getFor(Span span) {
110+
return getFor((ReadableSpan) span);
98111
}
99112

100113
/** See {@link LocalRootSpan#getFor(Span)}. */
101114
@Nullable
102-
public static Span getFor(ReadableSpan span) {
103-
return resolveRoot(span, localRoot.get(span));
104-
}
105-
106-
/** See {@link LocalRootSpan#getFor(Span)}. */
107-
@Nullable
108-
public static Span getFor(ReadWriteSpan span) {
109-
return resolveRoot(span, localRoot.get(span));
110-
}
111-
112-
@Nullable
113-
private static Span resolveRoot(Object span, Object rootSpanVal) {
114-
if (rootSpanVal == LOCAL_ROOT_MARKER) {
115-
return (Span) span;
116-
}
117-
if (rootSpanVal == INFERRED_SPAN_UNKNOWN_ROOT_MARKER) {
118-
return null;
119-
}
120-
return (Span) rootSpanVal;
115+
public static ReadableSpan getFor(ReadWriteSpan span) {
116+
return getFor((ReadableSpan) span);
121117
}
122118

123119
private LocalRootSpan() {}

common/src/main/java/co/elastic/otel/common/SpanValueStorageProvider.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,27 @@
2121
import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap;
2222
import io.opentelemetry.api.trace.Span;
2323
import io.opentelemetry.sdk.trace.FieldBackedSpanValueStorageProvider;
24+
import java.util.logging.Level;
25+
import java.util.logging.Logger;
2426
import javax.annotation.Nullable;
2527

2628
public interface SpanValueStorageProvider {
2729

30+
Logger logger = Logger.getLogger(SpanValueStorageProvider.class.getName());
31+
2832
static SpanValueStorageProvider get() {
33+
try {
34+
Class<?> sdkSpan = Class.forName("io.opentelemetry.sdk.trace.SdkSpan");
35+
if (sdkSpan.getClassLoader() != SpanValueStorage.class.getClassLoader()) {
36+
// If we are running in a different classloader, this means we aren't running in our distro
37+
logger.log(
38+
Level.FINE,
39+
"Using map-backed storage for SpanValues because SdkSpan lives in a different classloader and therefore is inaccessible");
40+
return MapBacked.getInstance();
41+
}
42+
} catch (ClassNotFoundException e) {
43+
throw new IllegalStateException("Expected SdkSpan class to exist", e);
44+
}
2945
return FieldBackedSpanValueStorageProvider.INSTANCE != null
3046
? FieldBackedSpanValueStorageProvider.INSTANCE
3147
: MapBacked.getInstance();

universal-profiling-integration/src/main/java/co/elastic/otel/ProfilerSharedMemoryWriter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.opentelemetry.api.trace.Span;
2424
import io.opentelemetry.api.trace.SpanContext;
2525
import io.opentelemetry.sdk.resources.Resource;
26+
import io.opentelemetry.sdk.trace.ReadableSpan;
2627
import io.opentelemetry.semconv.ResourceAttributes;
2728
import java.nio.ByteBuffer;
2829
import java.nio.ByteOrder;
@@ -99,7 +100,7 @@ static void updateThreadCorrelationStorage(Span newSpan) {
99100

100101
SpanContext spanCtx = newSpan.getSpanContext();
101102
if (spanCtx.isValid() && !spanCtx.isRemote()) {
102-
Span localRoot = LocalRootSpan.getFor(newSpan);
103+
ReadableSpan localRoot = LocalRootSpan.getFor(newSpan);
103104
if (localRoot != null) {
104105
String localRootSpanId = localRoot.getSpanContext().getSpanId();
105106
tls.put(TLS_TRACE_PRESENT_OFFSET, (byte) 1);

0 commit comments

Comments
 (0)