open-telemetry / opentelemetry-java

OpenTelemetry Java SDK
https://opentelemetry.io
Apache License 2.0
1.97k stars 812 forks source link

Breaking change between 1.30 and 1.31 #6479

Closed trixpan closed 3 months ago

trixpan commented 3 months ago

Describe the bug Running opentelemetry-sdk together with opentelemetry-sdk 1.31 leads to

java.lang.NoClassDefFoundError: io/opentelemetry/sdk/common/export/MemoryMode
    at io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader.<init>(InMemoryMetricReader.java:96)
    at io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader.create(InMemoryMetricReader.java:73)
    at io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension.create(OpenTelemetryExtension.java:71)

From code:

    @RegisterExtension
    static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();

Steps to reproduce Followed what is displayed here:

https://github.com/open-telemetry/opentelemetry-java/blob/7da7037717a1bfcb730a77792e8059d11cf8e7af/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtension.java#L42-L45

What did you expect to see? Test to pass (as it did up to 1.30.0)

What did you see instead? NoClassDefFoundError

What version and what artifacts are you using?

<opentel.version>1.31.0</opentel.version>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-sdk</artifactId>
                <version>${opentel.version}</version>
            </dependency>
           <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-sdk-testing</artifactId>
                <version>${opentel.version}</version>
                <scope>test</scope>
            </dependency>

Environment Multiple environments. Same error.

Additional context Add any other context about the problem here.

jkwatson commented 3 months ago

Can you provide a sample project that demonstrates this? I was unable to reproduce the issue with these entries in a build.gradle:

    implementation("io.opentelemetry:opentelemetry-sdk:1.31.0")
    testImplementation("io.opentelemetry:opentelemetry-sdk-testing:1.31.0")

I suspect you might have some older versions of things in your dependency tree, which could cause new classes not to be visible.

breedx-splk commented 3 months ago

1.31.0 is also nearly 8 months old. Please try with the latest version.

trixpan commented 3 months ago

@breedx-splk not sure why you would assume I haven't?

I am flagging were the breaking change was introduced (because I tested every version backwards)

jack-berg commented 3 months ago

@trixpan can you print the whole dependency tree via mvn dependency:tree? Like @jkwatson said, I suspect there's some version conflict and the resolved versions aren't what you might expect. There should be no issue when the dependency versions are aligned.

breedx-splk commented 3 months ago

Cannot repo: https://github.com/breedx-splk/opentelemetry-java-6479-repro

trixpan commented 3 months ago

@jack-berg @jkwatson apologies for the delay. Summarised for brevity

[INFO] +- io.quarkus:quarkus-opentelemetry:jar:3.2.9.Final:provided
...
[INFO] |  +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:jar:1.25.0-alpha:provided
[INFO] |  +- io.opentelemetry:opentelemetry-extension-annotations:jar:1.18.0:provided
[INFO] |  +- io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:jar:1.25.0:provided
[INFO] |  +- io.opentelemetry:opentelemetry-semconv:jar:1.25.0-alpha:runtime
[INFO] |  +- io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:jar:1.25.0:provided
[INFO] |  +- io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:jar:1.25.0:provided
[INFO] |  +- io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations-support:jar:1.25.0-alpha:provided
[INFO] |  +- io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:jar:1.25.0-alpha:provided
[INFO] |  +- io.opentelemetry:opentelemetry-exporter-otlp-common:jar:1.25.0:provided
[INFO] |  |  +- io.opentelemetry:opentelemetry-exporter-common:jar:1.25.0:provided
[INFO] |  |  \- com.squareup.okhttp3:okhttp:jar:3.14.9:provided
[INFO] |  |     \- com.squareup.okio:okio:jar:1.17.2:provided
[INFO] |  \- io.opentelemetry:opentelemetry-exporter-otlp:jar:1.25.0:provided
[INFO] +- io.opentelemetry:opentelemetry-sdk:jar:1.31.0:compile
[INFO] |  +- io.opentelemetry:opentelemetry-api:jar:1.25.0:compile
[INFO] |  |  \- io.opentelemetry:opentelemetry-context:jar:1.25.0:compile
[INFO] |  +- io.opentelemetry:opentelemetry-sdk-common:jar:1.25.0:compile
[INFO] |  +- io.opentelemetry:opentelemetry-sdk-trace:jar:1.25.0:compile
[INFO] |  +- io.opentelemetry:opentelemetry-sdk-metrics:jar:1.25.0:compile
[INFO] |  \- io.opentelemetry:opentelemetry-sdk-logs:jar:1.25.0-alpha:compile
[INFO] |     +- io.opentelemetry:opentelemetry-api-logs:jar:1.25.0-alpha:compile
[INFO] |     \- io.opentelemetry:opentelemetry-api-events:jar:1.25.0-alpha:compile

Seems like the combination between 1.25 and 1.30 works but the combination between 1.25 and 1.31 doesn't?

My basic guess is that these cross versions combinations are not formally supported, correct?

jkwatson commented 3 months ago

Correct. You have to align the versions or you'll get issues like this. We recommend using the published BOMs for this.

github-actions[bot] commented 3 months ago

This has been automatically marked as stale because it has been marked as needing author feedback and has not had any activity for 7 days. It will be closed if no further activity occurs within 7 days of this comment.