ballerina-platform / ballerina-lang

The Ballerina Programming Language
https://ballerina.io/
Apache License 2.0
3.55k stars 736 forks source link

[Bug]: `java.lang.NoSuchMethodError` with tracing enabled #42546

Open MaryamZi opened 2 months ago

MaryamZi commented 2 months ago

Description

$title.

ballerina: started Prometheus HTTP listener 0.0.0.0:9797
[2024-04-15 18:56:38,274] SEVERE {b7a.log.crash} - 'io.opentelemetry.api.metrics.LongCounterBuilder io.opentelemetry.api.metrics.Meter.longCounterBuilder(java.lang.String)' 
java.lang.NoSuchMethodError: 'io.opentelemetry.api.metrics.LongCounterBuilder io.opentelemetry.api.metrics.Meter.longCounterBuilder(java.lang.String)'
        at io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter.<init>(OtlpGrpcSpanExporter.java:64)
        at io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder.build(OtlpGrpcSpanExporterBuilder.java:188)
        at io.ballerina.observe.trace.jaeger.JaegerTracerProvider.initializeConfigurations(JaegerTracerProvider.java:73)
        at ballerinax.jaeger.0.tracer_provider.externInitializeConfigurations(tracer_provider.bal:47)
        at ballerinax.jaeger.0.tracer_provider.init(tracer_provider.bal:42)
        at ballerinax.jaeger.0.$_init.$gen$&0046&0060init&0062(jaeger:1)
        at maryam.obs_proj.0.$_init.$moduleInit(obs_proj)
        at maryam.obs_proj.0.$_init.$moduleExecute(obs_proj)
        at maryam.obs_proj.0.$_init.$lambda$$moduleExecute$(obs_proj)
        at io.ballerina.runtime.internal.scheduling.SchedulerItem.execute(SchedulerItem.java:54)
        at io.ballerina.runtime.internal.scheduling.Scheduler.run(Scheduler.java:320)
        at io.ballerina.runtime.internal.scheduling.Scheduler.runSafely(Scheduler.java:287)
        at java.base/java.lang.Thread.run(Thread.java:833)

Steps to Reproduce

import ballerina/http;
import ballerina/log;
import ballerinax/prometheus as _;
import ballerinax/jaeger as _;

service /hello on new http:Listener(9090) {

    resource function get sayHello(http:Caller caller, http:Request req) returns error? {
        log:printInfo("This is a test Info log");
        log:printError("This is a test Error log");
        http:Response res = new;
        res.setPayload("Hello, World!");
        check caller->respond(res);
    }

}
[ballerina.observe]
metricsEnabled=true
metricsReporter="prometheus"
tracingEnabled=true
tracingProvider="jaeger"

[ballerinax.prometheus]
port=9797
host="0.0.0.0"

Affected Version(s)

2201.9.0 test pack

NipunaMadhushan commented 2 months ago

This happens when tracing is enabled and it occurs due to the update of opentelemetry version in lang.

We have done the relevant changes in the jaeger module as well with the PR [1].

  1. https://github.com/ballerina-platform/module-ballerinax-jaeger/pull/164

PR has not been merged since we need to release the distribution first.

NipunaMadhushan commented 2 months ago

Tested locally with the changes in the above mentioned PR and works fine as expected.