jenkinsci / jenkinsci/opentelemetry-api-plugin

B3/Jaeger/OtTrace propagators not recognized — opentelemetry-extension-trace-propagators missing from opentelemetry-api classpath

Open Beginner friendly
#122 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2
Forks
8
PR merge metrics
No merged PRs in 30d

Description

### Summary

When `otel.propagators=b3multi` (or `b3`, `jaeger`, `ottrace`) is configured in the Jenkins OpenTelemetry plugin, Jenkins startup fails:

```
io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException: Unrecognized value for otel.propagators: b3multi. Make sure the artifact including the propagator is on the classpath.
at PluginClassLoader for opentelemetry-api//io.opentelemetry.sdk.autoconfigure.PropagatorConfiguration.getPropagator(PropagatorConfiguration.java:70)
at PluginClassLoader for opentelemetry-api//io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder.build(...)
at PluginClassLoader for opentelemetry-api//io.jenkins.plugins.opentelemetry.api.ReconfigurableOpenTelemetry.configure(...)
at PluginClassLoader for opentelemetry//io.jenkins.plugins.opentelemetry.JenkinsOpenTelemetryPluginConfiguration.configureOpenTelemetrySdk(...)
```

### Root cause

`opentelemetry-extension-trace-propagators` is currently bundled in **`opentelemetry-plugin`** (compile scope), but the SDK autoconfigure (`AutoConfiguredOpenTelemetrySdkBuilder.build()`) which calls `ServiceLoader` runs in **`opentelemetry-api-plugin`**'s classloader.

Because Jenkins plugin classloaders are isolated and the dependency direction is `opentelemetry → opentelemetry-api` (not the reverse), the SPI lookup in `opentelemetry-api-plugin` cannot see resources in `opentelemetry-plugin/WEB-INF/lib/`.

### Verification on a running Jenkins

`$JENKINS_HOME/plugins/opentelemetry-api/WEB-INF/lib/`:
```
opentelemetry-sdk-extension-autoconfigure-1.49.0.jar <- runs SPI lookup
(no opentelemetry-extension-trace-propagators)
```

`$JENKINS_HOME/plugins/opentelemetry/WEB-INF/lib/`:
```
opentelemetry-extension-trace-propagators-1.49.0.jar <- contains B3/Jaeger/OtTrace SPI registrations
```

The JAR is on disk but on the wrong plugin's classpath, so `ServiceLoader` running in the SDK never sees the SPI provider files inside it.

### History

- 2023-06: jenkinsci/opentelemetry-plugin#668 ("Add support for more trace propagators: Jaeger, Zipkin, OpenTracing, AWS X-Ray") added `opentelemetry-extension-trace-propagators` to the (then-single) `opentelemetry-plugin` pom and resolved jenkinsci/opentelemetry-plugin#657. Released as `opentelemetry-2.14.0`.
- After the SDK was extracted into `opentelemetry-api-plugin` (mid-2025): the SDK + autoconfigure artifacts moved, but `opentelemetry-extension-trace-propagators` was left behind in `opentelemetry-plugin`. This is a silent regression — the dependency continues to exist but is no longer reachable by the SPI lookup, so all non-W3C propagators stop working.

### Proposed fix

Add the dependency to **`opentelemetry-api-plugin/pom.xml`**, alongside `opentelemetry-sdk-extension-autoconfigure`:

```xml

io.opentelemetry
opentelemetry-extension-trace-propagators

```

This places the artifact (and its `META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider` SPI file) on the same classloader as the SDK autoconfigure, restoring `b3`, `b3multi`, `jaeger`, and `ottrace` recognition.

The redundant declaration can also be removed from `opentelemetry-plugin/pom.xml` (separate PR), but adding it to `opentelemetry-api-plugin` is sufficient to fix the user-visible breakage.

### Workaround until merged

Manual JAR copy on the Jenkins controller:
```bash
cp $JENKINS_HOME/plugins/opentelemetry/WEB-INF/lib/opentelemetry-extension-trace-propagators-1.49.0.jar \
$JENKINS_HOME/plugins/opentelemetry-api/WEB-INF/lib/
# restart Jenkins
```

Replaced on every plugin upgrade.

### Environment

- Jenkins OpenTelemetry plugin: 3.1505.v69c4d7c9ee62 (also reproducible on 3.1523.v0b_3ce640987d)
- opentelemetry-api plugin: 1.49.0.x
- OpenTelemetry SDK bundled: 1.49.0
- Jenkins core: 2.504.3
- Jenkins is unable to start with `otel.propagators=b3multi` set

Contributor guide

Open the contributing guide

Research direction

Start in opentelemetry-api-plugin/pom.xml beside opentelemetry-sdk-extension-autoconfigure and confirm which dependencies are packaged in the API plugin classloader. Add the trace propagators dependency there, then verify that b3, b3multi, jaeger, and ottrace are recognized during Jenkins startup with the configured propagator setting.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
observability
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
82/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.