jenkinsci / jenkinsci/opentelemetry-api-plugin
B3/Jaeger/OtTrace propagators not recognized — opentelemetry-extension-trace-propagators missing from opentelemetry-api classpath
- 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
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