dd-trace-ot 1.67.x: NoClassDefFoundError `ddtrot/dd/trace/api/llmobs/LLMObs`
Maintainer thường phản hồi trong vòng 2 ngày
@amarziali đang làm issue này rồi.
Từ ngày 14/10/2026.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
Tracer Version(s)
1.67.0+
Java Version(s)
25
JVM Vendor
Oracle JDK
Bug Report
Since 1.67.0, DDTracer.inject(...) from dd-trace-ot throws NoClassDefFoundError for ddtrot/dd/trace/api/llmobs/LLMObs. 1.66.0 is fine. dd-trace-api is on the classpath at the same version as dd-trace-ot.
java.lang.NoClassDefFoundError: ddtrot/dd/trace/api/llmobs/LLMObs
at ddtrot.dd.trace.core.propagation.DatadogHttpCodec$Injector.inject(DatadogHttpCodec.java:86)
at ddtrot.dd.trace.core.propagation.HttpCodec$CompoundInjector.inject(HttpCodec.java:194)
at ddtrot.dd.trace.core.propagation.TracingPropagator.inject(TracingPropagator.java:58)
at ddtrot.dd.context.propagation.CompositePropagator.inject(CompositePropagator.java:18)
at datadog.opentracing.DDTracer.inject(DDTracer.java:490)
Caused by: java.lang.ClassNotFoundException: ddtrot.dd.trace.api.llmobs.LLMObs
Analysis
This is a regression from #12416 (9a03e95e32), which makes DatadogHttpCodec$Injector.inject call LLMObsInternal.propagationValuesFor(...). LLMObsInternal (internal-api) extends LLMObs (dd-trace-api).
In dd-trace-ot/build.gradle.kts, the shadow jar excludes :dd-trace-api and relocates datadog. to ddtrot.dd.. The exclude %regex[datadog/trace/api/(?!Functions|Endpoint)[^/]*] only covers classes directly under datadog/trace/api/, so datadog.trace.api.llmobs.* is relocated. The resulting dd-trace-ot-1.67.1.jar contains ddtrot/dd/trace/api/llmobs/LLMObsInternal.class (superclass ddtrot.dd.trace.api.llmobs.LLMObs) but no LLMObs.class. dd-trace-api only provides the unrelocated datadog/trace/api/llmobs/LLMObs.
Possible fix (untested): add exclude("datadog.trace.api.llmobs.*") to the relocate("datadog.", "ddtrot.dd.") block.
Environment
dd-trace-otanddd-trace-api1.67.1 (also 1.67.0)- JDK 25 (Temurin), OpenTracing 0.32.0
Expected Behavior
DDTracer.inject(...) injects the Datadog headers into the carrier without error, as it does in 1.66.0:
injected headers: {x-datadog-parent-id=..., x-datadog-sampling-priority=1, tracestate=dd=s:1;..., x-datadog-tags=_dd.p.dm=-1,...}
### Reproduction Code
Only `dd-trace-ot` and `dd-trace-api` are needed. Change `dd.version` to `1.66.0` to see it work.
`pom.xml`:
```xml
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>repro</groupId>
<artifactId>dd-ot-llmobs-repro</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.release>17</maven.compiler.release>
<dd.version>1.67.1</dd.version>
</properties>
<dependencies>
<dependency>
<groupId>com.datadoghq</groupId>
<artifactId>dd-trace-ot</artifactId>
<version>${dd.version}</version>
</dependency>
<dependency>
<groupId>com.datadoghq</groupId>
<artifactId>dd-trace-api</artifactId>
<version>${dd.version}</version>
</dependency>
</dependencies>
</project>
src/main/java/repro/Main.java:
package repro;
import datadog.opentracing.DDTracer;
import io.opentracing.Span;
import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMapAdapter;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
System.setProperty("dd.writer.type", "LoggingWriter");
DDTracer tracer = DDTracer.builder().serviceName("repro").build();
Span span = tracer.buildSpan("op").start();
Map<String, String> headers = new HashMap<>();
tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new TextMapAdapter(headers));
System.out.println("injected headers: " + headers);
span.finish();
tracer.close();
}
}
Run:
mvn -q -B compile
mvn -q -B dependency:build-classpath -Dmdep.outputFile=cp.txt
java -cp target/classes:$(cat cp.txt) repro.Main
(mvn exec:java also fails, but reports LLMObsInternal as the missing class because it wraps the error.)
- Ngôn ngữ chính
- Java
- Star
- 736
- Fork
- 364
- Merge trung bình
- 3 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 219
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của DataDog/dd-trace-java
-
type: bug report
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
DataDog/dd-trace-java#12818 · 3 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Update DEFAULT_HTTP_CLIENT_ERROR_STATUSES to include 5xx status codesCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởtype: feature request
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 70/100
DataDog/dd-trace-java#10245 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
type: feature request
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
DataDog/dd-trace-java#12838 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Startup ~2x slower with AOT class linking: agent retransforms ~22k preloaded classes (JDK 25, 1.67.0)Có thể đã có người làm @mcculls đã nhận 7 ngày trước. Đang mởtype: bug report
DataDog/dd-trace-java#12795 · 6 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 2 ngày
-
gRPC server instrumentations (grpc-1.5, armeria-grpc) don't make extracted W3C baggage current in the handlerCó thể đã có người làm @mcculls đã nhận 18 ngày trước. Đang mởcomp: context propagation inst: grpc type: feature request
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 78/100
DataDog/dd-trace-java#12654 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của DataDog/dd-trace-java
Issue tương tự
-
StepExamBenchmarkTest runs a loop and prints a timing but asserts nothingCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởjules
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
open-learning-exchange/myplanet#18199 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 4 ngày
-
Authorization 'Artifacts' is shown under category Run instead of Job in Authorization matrixĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Scheme-less stream URLs throw NullPointerException instead of URISyntaxExceptionCó thể đã có người làm @blihio đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
pedroSG94/RootEncoder#2218 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
apache/rocketmq-dashboard#6872 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ADORSYS-GIS/token-status-link#168 ·
Maintainer thường phản hồi trong vòng 2 ngày