Skip to content

OSGi support and tests for OTLP exporters#8401

Open
jack-berg wants to merge 3 commits into
open-telemetry:mainfrom
jack-berg:more-osgi
Open

OSGi support and tests for OTLP exporters#8401
jack-berg wants to merge 3 commits into
open-telemetry:mainfrom
jack-berg:more-osgi

Conversation

@jack-berg
Copy link
Copy Markdown
Member

Related to #768, followup to #7964.

Extend OSGi support to OTLP exporters by including appropriate metadata to resolve sender SPI.

Rework :integration-tests:osgi to add a helper to create OSGi test suite bundles consisting of different combinations of dependencies. With this PR, there are test suites for:

  • Just the SDK
  • SDK + OTLP HTTP exporters + OkHttp sender
  • SDK + OTLP gRPC exporters + OkHttp sender
  • SDK + OTLP HTTP exporters + Jdk sender

I did a before an after of each impacted artifact's MODULE.MF to make it easier to review:

opentelemetry-common

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.common
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-common
Bundle-SymbolicName: opentelemetry-common
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.common;version="1.62.0",io.openteleme
 try.common.impl;version="1.62.0"
Implementation-Title: common
Implementation-Version: 1.62.0
Import-Package: java.lang,java.lang.invoke,java.util,java.util.concurr
 ent.atomic,java.util.function,java.util.logging
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.common
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-common
Bundle-SymbolicName: opentelemetry-common
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.common;version="1.62.0",io.openteleme
 try.common.impl;version="1.62.0"
Implementation-Title: common
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: java.lang,java.lang.invoke,java.util,java.util.concurr
 ent.atomic,java.util.function,java.util.logging
Require-Capability: osgi.extender;filter:="(osgi.extender=osgi.service
 loader.processor)",osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-exporter-common

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.internal
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-common
Bundle-SymbolicName: opentelemetry-exporter-common
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.internal;version="1.62.0";us
 es:="io.opentelemetry.api.incubator.config,io.opentelemetry.common,io
 .opentelemetry.context,io.opentelemetry.sdk.autoconfigure.spi,io.open
 telemetry.sdk.common.export,io.opentelemetry.sdk.metrics.export,javax
 .annotation,javax.net.ssl",io.opentelemetry.exporter.internal.compres
 sion;version="1.62.0";uses:="io.opentelemetry.common,io.opentelemetry
 .sdk.common.export,javax.annotation",io.opentelemetry.exporter.intern
 al.grpc;version="1.62.0";uses:="io.grpc,io.opentelemetry.api.metrics,
 io.opentelemetry.common,io.opentelemetry.exporter.internal.marshal,io
 .opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,io.opent
 elemetry.sdk.common.internal,javax.annotation,javax.net.ssl",io.opent
 elemetry.exporter.internal.http;version="1.62.0";uses:="io.openteleme
 try.api.metrics,io.opentelemetry.common,io.opentelemetry.exporter.int
 ernal.marshal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common
 .export,io.opentelemetry.sdk.common.internal,javax.annotation,javax.n
 et.ssl",io.opentelemetry.exporter.internal.marshal;version="1.62.0";u
 ses:="com.fasterxml.jackson.core,io.opentelemetry.api.common,io.opent
 elemetry.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemet
 ry.sdk.common.internal,io.opentelemetry.sdk.resources,javax.annotatio
 n",io.opentelemetry.exporter.internal.metrics;version="1.62.0";uses:=
 "io.opentelemetry.api.common,io.opentelemetry.api.metrics,io.opentele
 metry.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemetry.
 sdk.common.internal,javax.annotation"
Implementation-Title: common
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 com.fasterxml.jackson.core;version="[2.21,3)",com.google.common.io;ve
 rsion="[33.6,34)",io.grpc,io.opentelemetry.api;version="[1.62,2)",io.
 opentelemetry.api.common;version="[1.62,2)",io.opentelemetry.api.incu
 bator.config;version="[1.62,2)",io.opentelemetry.api.internal;version
 ="[1.62,2)",io.opentelemetry.api.metrics;version="[1.62,2)",io.opente
 lemetry.api.trace;version="[1.62,2)",io.opentelemetry.common;version=
 "[1.62,2)",io.opentelemetry.context;version="[1.62,2)",io.opentelemet
 ry.sdk.autoconfigure.spi;version="[1.62,2)",io.opentelemetry.sdk.comm
 on;version="[1.62,2)",io.opentelemetry.sdk.common.export;version="[1.
 62,2)",io.opentelemetry.sdk.common.internal;version="[1.62,2)",io.ope
 ntelemetry.sdk.metrics;version="[1.62,2)",io.opentelemetry.sdk.metric
 s.export;version="[1.62,2)",io.opentelemetry.sdk.metrics.internal.agg
 regator;version="[1.62,2)",io.opentelemetry.sdk.resources;version="[1
 .62,2)",java.io,java.lang,java.lang.invoke,java.lang.reflect,java.net
 ,java.nio,java.nio.charset,java.security,java.security.cert,java.secu
 rity.spec,java.time,java.util,java.util.concurrent,java.util.concurre
 nt.atomic,java.util.function,java.util.logging,java.util.stream,java.
 util.zip,javax.net.ssl,org.jspecify.annotations;version="[1.0,2)",sun
 .misc
Multi-Release: true
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.internal
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-common
Bundle-SymbolicName: opentelemetry-exporter-common
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.internal;version="1.62.0";us
 es:="io.opentelemetry.api.incubator.config,io.opentelemetry.common,io
 .opentelemetry.context,io.opentelemetry.sdk.autoconfigure.spi,io.open
 telemetry.sdk.common.export,io.opentelemetry.sdk.metrics.export,javax
 .annotation,javax.net.ssl",io.opentelemetry.exporter.internal.compres
 sion;version="1.62.0";uses:="io.opentelemetry.common,io.opentelemetry
 .sdk.common.export,javax.annotation",io.opentelemetry.exporter.intern
 al.grpc;version="1.62.0";uses:="io.grpc,io.opentelemetry.api.metrics,
 io.opentelemetry.common,io.opentelemetry.exporter.internal.marshal,io
 .opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,io.opent
 elemetry.sdk.common.internal,javax.annotation,javax.net.ssl",io.opent
 elemetry.exporter.internal.http;version="1.62.0";uses:="io.openteleme
 try.api.metrics,io.opentelemetry.common,io.opentelemetry.exporter.int
 ernal.marshal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common
 .export,io.opentelemetry.sdk.common.internal,javax.annotation,javax.n
 et.ssl",io.opentelemetry.exporter.internal.marshal;version="1.62.0";u
 ses:="com.fasterxml.jackson.core,io.opentelemetry.api.common,io.opent
 elemetry.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemet
 ry.sdk.common.internal,io.opentelemetry.sdk.resources,javax.annotatio
 n",io.opentelemetry.exporter.internal.metrics;version="1.62.0";uses:=
 "io.opentelemetry.api.common,io.opentelemetry.api.metrics,io.opentele
 metry.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemetry.
 sdk.common.internal,javax.annotation"
Implementation-Title: common
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: io.grpc;resolution:=optional,org.jspecify.annotations;
 version="[1.0,2)";resolution:=optional,javax.annotation;version="3.0.
 2";resolution:=optional,com.fasterxml.jackson.core;version="2.21.3";r
 esolution:=optional,com.google.common.io;version="33.6.0";resolution:
 =optional,io.opentelemetry.api.incubator.config;version="1.62.0";reso
 lution:=optional,io.opentelemetry.api;version="[1.62,2)",io.opentelem
 etry.api.common;version="[1.62,2)",io.opentelemetry.api.internal;vers
 ion="[1.62,2)",io.opentelemetry.api.metrics;version="[1.62,2)",io.ope
 ntelemetry.api.trace;version="[1.62,2)",io.opentelemetry.common;versi
 on="[1.62,2)",io.opentelemetry.context;version="[1.62,2)",io.opentele
 metry.sdk.autoconfigure.spi;version="[1.62,2)",io.opentelemetry.sdk.c
 ommon;version="[1.62,2)",io.opentelemetry.sdk.common.export;version="
 [1.62,2)",io.opentelemetry.sdk.common.internal;version="[1.62,2)",io.
 opentelemetry.sdk.metrics;version="[1.62,2)",io.opentelemetry.sdk.met
 rics.export;version="[1.62,2)",io.opentelemetry.sdk.metrics.internal.
 aggregator;version="[1.62,2)",io.opentelemetry.sdk.resources;version=
 "[1.62,2)",java.io,java.lang,java.lang.invoke,java.lang.reflect,java.
 net,java.nio,java.nio.charset,java.security,java.security.cert,java.s
 ecurity.spec,java.time,java.util,java.util.concurrent,java.util.concu
 rrent.atomic,java.util.function,java.util.logging,java.util.stream,ja
 va.util.zip,javax.net.ssl,sun.misc
Multi-Release: true
Require-Capability: osgi.serviceloader;cardinality:=multiple;filter:="
 (osgi.serviceloader=io.opentelemetry.sdk.common.export.GrpcSenderProv
 ider)";resolution:=optional,osgi.serviceloader;cardinality:=multiple;
 filter:="(osgi.serviceloader=io.opentelemetry.sdk.common.export.HttpS
 enderProvider)";resolution:=optional,osgi.ee;filter:="(&(osgi.ee=Java
 SE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-exporter-otlp

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.otlp
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-otlp
Bundle-SymbolicName: opentelemetry-exporter-otlp
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.otlp;version="1.62.0",io.ope
 ntelemetry.exporter.otlp.all.internal;version="1.62.0",io.opentelemet
 ry.exporter.otlp.http.logs;version="1.62.0";uses:="io.opentelemetry.a
 pi.metrics,io.opentelemetry.common,io.opentelemetry.sdk.common,io.ope
 ntelemetry.sdk.common.export,io.opentelemetry.sdk.logs.data,io.opente
 lemetry.sdk.logs.export,javax.annotation,javax.net.ssl",io.openteleme
 try.exporter.otlp.http.metrics;version="1.62.0";uses:="io.opentelemet
 ry.api.metrics,io.opentelemetry.common,io.opentelemetry.sdk.common,io
 .opentelemetry.sdk.common.export,io.opentelemetry.sdk.metrics,io.open
 telemetry.sdk.metrics.data,io.opentelemetry.sdk.metrics.export,javax.
 annotation,javax.net.ssl",io.opentelemetry.exporter.otlp.http.trace;v
 ersion="1.62.0";uses:="io.opentelemetry.api.metrics,io.opentelemetry.
 common,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export
 ,io.opentelemetry.sdk.trace.data,io.opentelemetry.sdk.trace.export,ja
 vax.annotation,javax.net.ssl",io.opentelemetry.exporter.otlp.internal
 ;version="1.62.0";uses:="io.opentelemetry.api.incubator.config,io.ope
 ntelemetry.common,io.opentelemetry.sdk,io.opentelemetry.sdk.autoconfi
 gure.spi,io.opentelemetry.sdk.autoconfigure.spi.internal,io.opentelem
 etry.sdk.autoconfigure.spi.logs,io.opentelemetry.sdk.autoconfigure.sp
 i.metrics,io.opentelemetry.sdk.autoconfigure.spi.traces,io.openteleme
 try.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemetry.sd
 k.logs.export,io.opentelemetry.sdk.metrics.export,io.opentelemetry.sd
 k.trace.export",io.opentelemetry.exporter.otlp.logs;version="1.62.0";
 uses:="io.grpc,io.opentelemetry.api.metrics,io.opentelemetry.common,i
 o.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,io.open
 telemetry.sdk.logs.data,io.opentelemetry.sdk.logs.export,javax.annota
 tion,javax.net.ssl",io.opentelemetry.exporter.otlp.metrics;version="1
 .62.0";uses:="io.grpc,io.opentelemetry.api.metrics,io.opentelemetry.c
 ommon,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,
 io.opentelemetry.sdk.metrics,io.opentelemetry.sdk.metrics.data,io.ope
 ntelemetry.sdk.metrics.export,javax.annotation,javax.net.ssl",io.open
 telemetry.exporter.otlp.trace;version="1.62.0";uses:="io.grpc,io.open
 telemetry.api.metrics,io.opentelemetry.common,io.opentelemetry.sdk.co
 mmon,io.opentelemetry.sdk.common.export,io.opentelemetry.sdk.trace.da
 ta,io.opentelemetry.sdk.trace.export,javax.annotation,javax.net.ssl"
Implementation-Title: all
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.grpc,io.opentelemetry.api.incubator.config;version="[1.62,2)",io.o
 pentelemetry.api.internal;version="[1.62,2)",io.opentelemetry.api.met
 rics;version="[1.62,2)",io.opentelemetry.common;version="[1.62,2)",io
 .opentelemetry.exporter.internal;version="[1.62,2)",io.opentelemetry.
 exporter.internal.grpc;version="[1.62,2)",io.opentelemetry.exporter.i
 nternal.http;version="[1.62,2)",io.opentelemetry.exporter.internal.ma
 rshal;version="[1.62,2)",io.opentelemetry.exporter.internal.otlp.logs
 ;version="[1.62,2)",io.opentelemetry.exporter.internal.otlp.metrics;v
 ersion="[1.62,2)",io.opentelemetry.exporter.internal.otlp.traces;vers
 ion="[1.62,2)",io.opentelemetry.sdk;version="[1.62,2)",io.opentelemet
 ry.sdk.autoconfigure.spi;version="[1.62,2)",io.opentelemetry.sdk.auto
 configure.spi.internal;version="[1.62,2)",io.opentelemetry.sdk.autoco
 nfigure.spi.logs;version="[1.62,2)",io.opentelemetry.sdk.autoconfigur
 e.spi.metrics;version="[1.62,2)",io.opentelemetry.sdk.autoconfigure.s
 pi.traces;version="[1.62,2)",io.opentelemetry.sdk.common;version="[1.
 62,2)",io.opentelemetry.sdk.common.export;version="[1.62,2)",io.opent
 elemetry.sdk.common.internal;version="[1.62,2)",io.opentelemetry.sdk.
 logs.data;version="[1.62,2)",io.opentelemetry.sdk.logs.export;version
 ="[1.62,2)",io.opentelemetry.sdk.metrics;version="[1.62,2)",io.opente
 lemetry.sdk.metrics.data;version="[1.62,2)",io.opentelemetry.sdk.metr
 ics.export;version="[1.62,2)",io.opentelemetry.sdk.trace.data;version
 ="[1.62,2)",io.opentelemetry.sdk.trace.export;version="[1.62,2)",java
 .io,java.lang,java.lang.invoke,java.net,java.nio.charset,java.time,ja
 va.util,java.util.concurrent,java.util.concurrent.atomic,java.util.fu
 nction,java.util.logging,javax.net.ssl
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.otlp
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-otlp
Bundle-SymbolicName: opentelemetry-exporter-otlp
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.otlp;version="1.62.0",io.ope
 ntelemetry.exporter.otlp.all.internal;version="1.62.0",io.opentelemet
 ry.exporter.otlp.http.logs;version="1.62.0";uses:="io.opentelemetry.a
 pi.metrics,io.opentelemetry.common,io.opentelemetry.sdk.common,io.ope
 ntelemetry.sdk.common.export,io.opentelemetry.sdk.logs.data,io.opente
 lemetry.sdk.logs.export,javax.annotation,javax.net.ssl",io.openteleme
 try.exporter.otlp.http.metrics;version="1.62.0";uses:="io.opentelemet
 ry.api.metrics,io.opentelemetry.common,io.opentelemetry.sdk.common,io
 .opentelemetry.sdk.common.export,io.opentelemetry.sdk.metrics,io.open
 telemetry.sdk.metrics.data,io.opentelemetry.sdk.metrics.export,javax.
 annotation,javax.net.ssl",io.opentelemetry.exporter.otlp.http.trace;v
 ersion="1.62.0";uses:="io.opentelemetry.api.metrics,io.opentelemetry.
 common,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export
 ,io.opentelemetry.sdk.trace.data,io.opentelemetry.sdk.trace.export,ja
 vax.annotation,javax.net.ssl",io.opentelemetry.exporter.otlp.internal
 ;version="1.62.0";uses:="io.opentelemetry.api.incubator.config,io.ope
 ntelemetry.common,io.opentelemetry.sdk,io.opentelemetry.sdk.autoconfi
 gure.spi,io.opentelemetry.sdk.autoconfigure.spi.internal,io.opentelem
 etry.sdk.autoconfigure.spi.logs,io.opentelemetry.sdk.autoconfigure.sp
 i.metrics,io.opentelemetry.sdk.autoconfigure.spi.traces,io.openteleme
 try.sdk.common,io.opentelemetry.sdk.common.export,io.opentelemetry.sd
 k.logs.export,io.opentelemetry.sdk.metrics.export,io.opentelemetry.sd
 k.trace.export",io.opentelemetry.exporter.otlp.logs;version="1.62.0";
 uses:="io.grpc,io.opentelemetry.api.metrics,io.opentelemetry.common,i
 o.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,io.open
 telemetry.sdk.logs.data,io.opentelemetry.sdk.logs.export,javax.annota
 tion,javax.net.ssl",io.opentelemetry.exporter.otlp.metrics;version="1
 .62.0";uses:="io.grpc,io.opentelemetry.api.metrics,io.opentelemetry.c
 ommon,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,
 io.opentelemetry.sdk.metrics,io.opentelemetry.sdk.metrics.data,io.ope
 ntelemetry.sdk.metrics.export,javax.annotation,javax.net.ssl",io.open
 telemetry.exporter.otlp.trace;version="1.62.0";uses:="io.grpc,io.open
 telemetry.api.metrics,io.opentelemetry.common,io.opentelemetry.sdk.co
 mmon,io.opentelemetry.sdk.common.export,io.opentelemetry.sdk.trace.da
 ta,io.opentelemetry.sdk.trace.export,javax.annotation,javax.net.ssl"
Implementation-Title: all
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: io.grpc;resolution:=optional,javax.annotation;version=
 "3.0.2";resolution:=optional,io.opentelemetry.api.incubator.config;ve
 rsion="1.62.0";resolution:=optional,io.opentelemetry.api.internal;ver
 sion="[1.62,2)",io.opentelemetry.api.metrics;version="[1.62,2)",io.op
 entelemetry.common;version="[1.62,2)",io.opentelemetry.exporter.inter
 nal;version="[1.62,2)",io.opentelemetry.exporter.internal.grpc;versio
 n="[1.62,2)",io.opentelemetry.exporter.internal.http;version="[1.62,2
 )",io.opentelemetry.exporter.internal.marshal;version="[1.62,2)",io.o
 pentelemetry.exporter.internal.otlp.logs;version="[1.62,2)",io.opente
 lemetry.exporter.internal.otlp.metrics;version="[1.62,2)",io.opentele
 metry.exporter.internal.otlp.traces;version="[1.62,2)",io.opentelemet
 ry.sdk;version="[1.62,2)",io.opentelemetry.sdk.autoconfigure.spi;vers
 ion="[1.62,2)",io.opentelemetry.sdk.autoconfigure.spi.internal;versio
 n="[1.62,2)",io.opentelemetry.sdk.autoconfigure.spi.logs;version="[1.
 62,2)",io.opentelemetry.sdk.autoconfigure.spi.metrics;version="[1.62,
 2)",io.opentelemetry.sdk.autoconfigure.spi.traces;version="[1.62,2)",
 io.opentelemetry.sdk.common;version="[1.62,2)",io.opentelemetry.sdk.c
 ommon.export;version="[1.62,2)",io.opentelemetry.sdk.common.internal;
 version="[1.62,2)",io.opentelemetry.sdk.logs.data;version="[1.62,2)",
 io.opentelemetry.sdk.logs.export;version="[1.62,2)",io.opentelemetry.
 sdk.metrics;version="[1.62,2)",io.opentelemetry.sdk.metrics.data;vers
 ion="[1.62,2)",io.opentelemetry.sdk.metrics.export;version="[1.62,2)"
 ,io.opentelemetry.sdk.trace.data;version="[1.62,2)",io.opentelemetry.
 sdk.trace.export;version="[1.62,2)",java.io,java.lang,java.lang.invok
 e,java.net,java.nio.charset,java.time,java.util,java.util.concurrent,
 java.util.concurrent.atomic,java.util.function,java.util.logging,java
 x.net.ssl
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-exporter-otlp-common

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.internal.otlp
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-otlp-common
Bundle-SymbolicName: opentelemetry-exporter-otlp-common
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.internal.otlp;version="1.62.
 0";uses:="io.opentelemetry.api.common,io.opentelemetry.api.incubator.
 common,io.opentelemetry.exporter.internal.marshal,io.opentelemetry.sd
 k.common,io.opentelemetry.sdk.logs.data,io.opentelemetry.sdk.resource
 s",io.opentelemetry.exporter.internal.otlp.logs;version="1.62.0";uses
 :="io.opentelemetry.exporter.internal.marshal,io.opentelemetry.sdk.co
 mmon,io.opentelemetry.sdk.common.export,io.opentelemetry.sdk.logs.dat
 a,io.opentelemetry.sdk.resources",io.opentelemetry.exporter.internal.
 otlp.metrics;version="1.62.0";uses:="io.opentelemetry.exporter.intern
 al.marshal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.ex
 port,io.opentelemetry.sdk.metrics.data,io.opentelemetry.sdk.resources
 ",io.opentelemetry.exporter.internal.otlp.traces;version="1.62.0";use
 s:="io.opentelemetry.api.trace,io.opentelemetry.exporter.internal.mar
 shal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,i
 o.opentelemetry.sdk.resources,io.opentelemetry.sdk.trace.data",io.ope
 ntelemetry.proto.collector.logs.v1.internal;version="1.62.0";uses:="i
 o.opentelemetry.exporter.internal.marshal",io.opentelemetry.proto.col
 lector.metrics.v1.internal;version="1.62.0";uses:="io.opentelemetry.e
 xporter.internal.marshal",io.opentelemetry.proto.collector.profiles.v
 1development.internal;version="1.62.0";uses:="io.opentelemetry.export
 er.internal.marshal",io.opentelemetry.proto.collector.trace.v1.intern
 al;version="1.62.0";uses:="io.opentelemetry.exporter.internal.marshal
 ",io.opentelemetry.proto.common.v1.internal;version="1.62.0";uses:="i
 o.opentelemetry.exporter.internal.marshal",io.opentelemetry.proto.log
 s.v1.internal;version="1.62.0";uses:="io.opentelemetry.exporter.inter
 nal.marshal",io.opentelemetry.proto.metrics.v1.internal;version="1.62
 .0";uses:="io.opentelemetry.exporter.internal.marshal",io.opentelemet
 ry.proto.profiles.v1development.internal;version="1.62.0";uses:="io.o
 pentelemetry.exporter.internal.marshal",io.opentelemetry.proto.resour
 ce.v1.internal;version="1.62.0";uses:="io.opentelemetry.exporter.inte
 rnal.marshal",io.opentelemetry.proto.trace.v1.internal;version="1.62.
 0";uses:="io.opentelemetry.exporter.internal.marshal"
Implementation-Title: common
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.api.common;version="[1.62,2)",io.opentelemetry.api.i
 ncubator.common;version="[1.62,2)",io.opentelemetry.api.incubator.int
 ernal;version="[1.62,2)",io.opentelemetry.api.internal;version="[1.62
 ,2)",io.opentelemetry.api.logs;version="[1.62,2)",io.opentelemetry.ap
 i.trace;version="[1.62,2)",io.opentelemetry.api.trace.propagation.int
 ernal;version="[1.62,2)",io.opentelemetry.context.internal.shaded;ver
 sion="[1.62,2)",io.opentelemetry.exporter.internal.marshal;version="[
 1.62,2)",io.opentelemetry.sdk.common;version="[1.62,2)",io.openteleme
 try.sdk.common.export;version="[1.62,2)",io.opentelemetry.sdk.common.
 internal;version="[1.62,2)",io.opentelemetry.sdk.logs.data;version="[
 1.62,2)",io.opentelemetry.sdk.logs.data.internal;version="[1.62,2)",i
 o.opentelemetry.sdk.metrics.data;version="[1.62,2)",io.opentelemetry.
 sdk.resources;version="[1.62,2)",io.opentelemetry.sdk.trace.data;vers
 ion="[1.62,2)",java.io,java.lang,java.lang.invoke,java.nio,java.nio.c
 harset,java.util,java.util.concurrent,java.util.function
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.internal.otlp
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-otlp-common
Bundle-SymbolicName: opentelemetry-exporter-otlp-common
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.internal.otlp;version="1.62.
 0";uses:="io.opentelemetry.api.common,io.opentelemetry.api.incubator.
 common,io.opentelemetry.exporter.internal.marshal,io.opentelemetry.sd
 k.common,io.opentelemetry.sdk.logs.data,io.opentelemetry.sdk.resource
 s",io.opentelemetry.exporter.internal.otlp.logs;version="1.62.0";uses
 :="io.opentelemetry.exporter.internal.marshal,io.opentelemetry.sdk.co
 mmon,io.opentelemetry.sdk.common.export,io.opentelemetry.sdk.logs.dat
 a,io.opentelemetry.sdk.resources",io.opentelemetry.exporter.internal.
 otlp.metrics;version="1.62.0";uses:="io.opentelemetry.exporter.intern
 al.marshal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.ex
 port,io.opentelemetry.sdk.metrics.data,io.opentelemetry.sdk.resources
 ",io.opentelemetry.exporter.internal.otlp.traces;version="1.62.0";use
 s:="io.opentelemetry.api.trace,io.opentelemetry.exporter.internal.mar
 shal,io.opentelemetry.sdk.common,io.opentelemetry.sdk.common.export,i
 o.opentelemetry.sdk.resources,io.opentelemetry.sdk.trace.data",io.ope
 ntelemetry.proto.collector.logs.v1.internal;version="1.62.0";uses:="i
 o.opentelemetry.exporter.internal.marshal",io.opentelemetry.proto.col
 lector.metrics.v1.internal;version="1.62.0";uses:="io.opentelemetry.e
 xporter.internal.marshal",io.opentelemetry.proto.collector.profiles.v
 1development.internal;version="1.62.0";uses:="io.opentelemetry.export
 er.internal.marshal",io.opentelemetry.proto.collector.trace.v1.intern
 al;version="1.62.0";uses:="io.opentelemetry.exporter.internal.marshal
 ",io.opentelemetry.proto.common.v1.internal;version="1.62.0";uses:="i
 o.opentelemetry.exporter.internal.marshal",io.opentelemetry.proto.log
 s.v1.internal;version="1.62.0";uses:="io.opentelemetry.exporter.inter
 nal.marshal",io.opentelemetry.proto.metrics.v1.internal;version="1.62
 .0";uses:="io.opentelemetry.exporter.internal.marshal",io.opentelemet
 ry.proto.profiles.v1development.internal;version="1.62.0";uses:="io.o
 pentelemetry.exporter.internal.marshal",io.opentelemetry.proto.resour
 ce.v1.internal;version="1.62.0";uses:="io.opentelemetry.exporter.inte
 rnal.marshal",io.opentelemetry.proto.trace.v1.internal;version="1.62.
 0";uses:="io.opentelemetry.exporter.internal.marshal"
Implementation-Title: common
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.api.incubator.common;version="1.62.0";resolution:=op
 tional,io.opentelemetry.api.incubator.internal;version="1.62.0";resol
 ution:=optional,io.opentelemetry.api.common;version="[1.62,2)",io.ope
 ntelemetry.api.internal;version="[1.62,2)",io.opentelemetry.api.logs;
 version="[1.62,2)",io.opentelemetry.api.trace;version="[1.62,2)",io.o
 pentelemetry.api.trace.propagation.internal;version="[1.62,2)",io.ope
 ntelemetry.context.internal.shaded;version="[1.62,2)",io.opentelemetr
 y.exporter.internal.marshal;version="[1.62,2)",io.opentelemetry.sdk.c
 ommon;version="[1.62,2)",io.opentelemetry.sdk.common.export;version="
 [1.62,2)",io.opentelemetry.sdk.common.internal;version="[1.62,2)",io.
 opentelemetry.sdk.logs.data;version="[1.62,2)",io.opentelemetry.sdk.l
 ogs.data.internal;version="[1.62,2)",io.opentelemetry.sdk.metrics.dat
 a;version="[1.62,2)",io.opentelemetry.sdk.resources;version="[1.62,2)
 ",io.opentelemetry.sdk.trace.data;version="[1.62,2)",java.io,java.lan
 g,java.lang.invoke,java.nio,java.nio.charset,java.util,java.util.conc
 urrent,java.util.function
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-exporter-sender-jdk

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.sender.jdk.internal
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-sender-jdk
Bundle-SymbolicName: opentelemetry-exporter-sender-jdk
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.sender.jdk.internal;version=
 "1.62.0";uses:="io.opentelemetry.sdk.common,io.opentelemetry.sdk.comm
 on.export"
Implementation-Title: jdk
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.sdk.common;version="[1.62,2)",io.opentelemetry.sdk.c
 ommon.export;version="[1.62,2)",io.opentelemetry.sdk.common.internal;
 version="[1.62,2)",java.io,java.lang,java.lang.invoke,java.net,java.n
 et.http,java.nio,java.time,java.util,java.util.concurrent,java.util.f
 unction,java.util.logging,java.util.zip,javax.net.ssl
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=11))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.sender.jdk.internal
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-sender-jdk
Bundle-SymbolicName: opentelemetry-exporter-sender-jdk
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.sender.jdk.internal;version=
 "1.62.0";uses:="io.opentelemetry.sdk.common,io.opentelemetry.sdk.comm
 on.export"
Implementation-Title: jdk
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.sdk.common;version="[1.62,2)",io.opentelemetry.sdk.c
 ommon.export;version="[1.62,2)",io.opentelemetry.sdk.common.internal;
 version="[1.62,2)",java.io,java.lang,java.lang.invoke,java.net,java.n
 et.http,java.nio,java.time,java.util,java.util.concurrent,java.util.f
 unction,java.util.logging,java.util.zip,javax.net.ssl
Provide-Capability: osgi.serviceloader;osgi.serviceloader="io.opentele
 metry.sdk.common.export.HttpSenderProvider"
Require-Capability: osgi.extender;filter:="(osgi.extender=osgi.service
 loader.registrar)",osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=11))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-exporter-sender-okhttp

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.sender.okhttp.interna
 l
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-sender-okhttp
Bundle-SymbolicName: opentelemetry-exporter-sender-okhttp
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.sender.okhttp.internal;versi
 on="1.62.0";uses:="io.opentelemetry.sdk.common,io.opentelemetry.sdk.c
 ommon.export,javax.annotation,javax.net.ssl,okhttp3,okio"
Implementation-Title: okhttp
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.api.internal;version="[1.62,2)",io.opentelemetry.con
 text;version="[1.62,2)",io.opentelemetry.exporter.internal;version="[
 1.62,2)",io.opentelemetry.sdk.common;version="[1.62,2)",io.openteleme
 try.sdk.common.export;version="[1.62,2)",io.opentelemetry.sdk.common.
 internal;version="[1.62,2)",java.io,java.lang,java.lang.invoke,java.n
 et,java.nio,java.nio.charset,java.time,java.util,java.util.concurrent
 ,java.util.function,java.util.logging,java.util.stream,javax.net.ssl,
 okhttp3;version="[5.3,6)",okio;version="[3.17,4)",org.jspecify.annota
 tions;version="[1.0,2)"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.exporter.sender.okhttp.interna
 l
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-exporter-sender-okhttp
Bundle-SymbolicName: opentelemetry-exporter-sender-okhttp
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.exporter.sender.okhttp.internal;versi
 on="1.62.0";uses:="io.opentelemetry.sdk.common,io.opentelemetry.sdk.c
 ommon.export,javax.annotation,javax.net.ssl,okhttp3,okio"
Implementation-Title: okhttp
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: okhttp3;version="[5.3,6)";resolution:=optional,okio;ve
 rsion="[3.17,4)";resolution:=optional,org.jspecify.annotations;versio
 n="[1.0,2)";resolution:=optional,javax.annotation;version="3.0.2";res
 olution:=optional,io.opentelemetry.api.internal;version="[1.62,2)",io
 .opentelemetry.context;version="[1.62,2)",io.opentelemetry.exporter.i
 nternal;version="[1.62,2)",io.opentelemetry.sdk.common;version="[1.62
 ,2)",io.opentelemetry.sdk.common.export;version="[1.62,2)",io.opentel
 emetry.sdk.common.internal;version="[1.62,2)",java.io,java.lang,java.
 lang.invoke,java.net,java.nio,java.nio.charset,java.time,java.util,ja
 va.util.concurrent,java.util.function,java.util.logging,java.util.str
 eam,javax.net.ssl
Provide-Capability: osgi.serviceloader;osgi.serviceloader="io.opentele
 metry.sdk.common.export.GrpcSenderProvider",osgi.serviceloader;osgi.s
 erviceloader="io.opentelemetry.sdk.common.export.HttpSenderProvider"
Require-Capability: osgi.extender;filter:="(osgi.extender=osgi.service
 loader.registrar)",osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

opentelemetry-sdk-extension-autoconfigure-spi

Before (1.62.0)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.sdk.autoconfigure.spi
Built-By: runner
Built-JDK: 21.0.10
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-sdk-extension-autoconfigure-spi
Bundle-SymbolicName: opentelemetry-sdk-extension-autoconfigure-spi
Bundle-Version: 1.62.0
Created-By: 21.0.10 (Eclipse Adoptium)
Export-Package: io.opentelemetry.sdk.autoconfigure.spi;version="1.62.0
 ";uses:="io.opentelemetry.common,io.opentelemetry.context.propagation
 ,io.opentelemetry.sdk.logs,io.opentelemetry.sdk.logs.export,io.opente
 lemetry.sdk.metrics,io.opentelemetry.sdk.metrics.export,io.openteleme
 try.sdk.resources,io.opentelemetry.sdk.trace,io.opentelemetry.sdk.tra
 ce.export,io.opentelemetry.sdk.trace.samplers,javax.annotation",io.op
 entelemetry.sdk.autoconfigure.spi.internal;version="1.62.0";uses:="io
 .opentelemetry.api.incubator.config,io.opentelemetry.common,io.opente
 lemetry.sdk,io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.s
 dk.metrics.export,io.opentelemetry.sdk.resources,javax.annotation",io
 .opentelemetry.sdk.autoconfigure.spi.logs;version="1.62.0";uses:="io.
 opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sdk.logs.export"
 ,io.opentelemetry.sdk.autoconfigure.spi.metrics;version="1.62.0";uses
 :="io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sdk.metric
 s.export",io.opentelemetry.sdk.autoconfigure.spi.traces;version="1.62
 .0";uses:="io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sd
 k.trace,io.opentelemetry.sdk.trace.export,io.opentelemetry.sdk.trace.
 samplers"
Implementation-Title: autoconfigure-spi
Implementation-Version: 1.62.0
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.api.incubator.config;version="[1.62,2)",io.opentelem
 etry.api.internal;version="[1.62,2)",io.opentelemetry.common;version=
 "[1.62,2)",io.opentelemetry.context.propagation;version="[1.62,2)",io
 .opentelemetry.sdk;version="[1.62,2)",io.opentelemetry.sdk.logs;versi
 on="[1.62,2)",io.opentelemetry.sdk.logs.export;version="[1.62,2)",io.
 opentelemetry.sdk.metrics;version="[1.62,2)",io.opentelemetry.sdk.met
 rics.export;version="[1.62,2)",io.opentelemetry.sdk.resources;version
 ="[1.62,2)",io.opentelemetry.sdk.trace;version="[1.62,2)",io.opentele
 metry.sdk.trace.export;version="[1.62,2)",io.opentelemetry.sdk.trace.
 samplers;version="[1.62,2)",java.lang,java.lang.invoke,java.time,java
 .util,java.util.concurrent,java.util.function,java.util.stream
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

After (1.62.0-SNAPSHOT)

Manifest-Version: 1.0
Automatic-Module-Name: io.opentelemetry.sdk.autoconfigure.spi
Built-By: jberg
Built-JDK: 25.0.1
Bundle-ManifestVersion: 2
Bundle-Name: opentelemetry-sdk-extension-autoconfigure-spi
Bundle-SymbolicName: opentelemetry-sdk-extension-autoconfigure-spi
Bundle-Version: 1.62.0.SNAPSHOT
Created-By: 25.0.1 (Eclipse Adoptium)
Export-Package: io.opentelemetry.sdk.autoconfigure.spi;version="1.62.0
 ";uses:="io.opentelemetry.common,io.opentelemetry.context.propagation
 ,io.opentelemetry.sdk.logs,io.opentelemetry.sdk.logs.export,io.opente
 lemetry.sdk.metrics,io.opentelemetry.sdk.metrics.export,io.openteleme
 try.sdk.resources,io.opentelemetry.sdk.trace,io.opentelemetry.sdk.tra
 ce.export,io.opentelemetry.sdk.trace.samplers,javax.annotation",io.op
 entelemetry.sdk.autoconfigure.spi.internal;version="1.62.0";uses:="io
 .opentelemetry.api.incubator.config,io.opentelemetry.common,io.opente
 lemetry.sdk,io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.s
 dk.metrics.export,io.opentelemetry.sdk.resources,javax.annotation",io
 .opentelemetry.sdk.autoconfigure.spi.logs;version="1.62.0";uses:="io.
 opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sdk.logs.export"
 ,io.opentelemetry.sdk.autoconfigure.spi.metrics;version="1.62.0";uses
 :="io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sdk.metric
 s.export",io.opentelemetry.sdk.autoconfigure.spi.traces;version="1.62
 .0";uses:="io.opentelemetry.sdk.autoconfigure.spi,io.opentelemetry.sd
 k.trace,io.opentelemetry.sdk.trace.export,io.opentelemetry.sdk.trace.
 samplers"
Implementation-Title: autoconfigure-spi
Implementation-Version: 1.62.0-SNAPSHOT
Import-Package: javax.annotation;version="3.0.2";resolution:=optional,
 io.opentelemetry.api.incubator.config;version="1.62.0";resolution:=op
 tional,io.opentelemetry.api.internal;version="[1.62,2)",io.openteleme
 try.common;version="[1.62,2)",io.opentelemetry.context.propagation;ve
 rsion="[1.62,2)",io.opentelemetry.sdk;version="[1.62,2)",io.opentelem
 etry.sdk.logs;version="[1.62,2)",io.opentelemetry.sdk.logs.export;ver
 sion="[1.62,2)",io.opentelemetry.sdk.metrics;version="[1.62,2)",io.op
 entelemetry.sdk.metrics.export;version="[1.62,2)",io.opentelemetry.sd
 k.resources;version="[1.62,2)",io.opentelemetry.sdk.trace;version="[1
 .62,2)",io.opentelemetry.sdk.trace.export;version="[1.62,2)",io.opent
 elemetry.sdk.trace.samplers;version="[1.62,2)",java.lang,java.lang.in
 voke,java.time,java.util,java.util.concurrent,java.util.function,java
 .util.stream
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-7.2.0.202512261929

@jack-berg jack-berg requested a review from a team as a code owner May 12, 2026 19:43
@jack-berg
Copy link
Copy Markdown
Member Author

cc previous reviewers @royteeuwen, @laeubi, @stbischof. You're feedback was really helpful / appreciated for the first round.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.87%. Comparing base (83f947f) to head (95912aa).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #8401      +/-   ##
============================================
- Coverage     90.88%   90.87%   -0.01%     
+ Complexity     7985     7984       -1     
============================================
  Files           898      898              
  Lines         24107    24107              
  Branches       2406     2406              
============================================
- Hits          21909    21908       -1     
  Misses         1455     1455              
- Partials        743      744       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@royteeuwen
Copy link
Copy Markdown

royteeuwen commented May 14, 2026

Starts to look good, a lot of tests. Will validate if I can update my project to use these bundles instead of my own rewrapped ones:

https://github.com/orbinson/aemaacs-opentelemetry-instrumentation
https://github.com/orbinson/adaptto-opentelemetry-demo

You had to do some manual fixes in gradle it seems, the latest BND plugin wasn't correctly detecting it?

@jack-berg
Copy link
Copy Markdown
Member Author

Will validate if I can update my project to use these bundles instead of my own rewrapped ones:

That would be great!

You had to do some manual fixes in gradle it seems, the latest BND plugin wasn't correctly detecting it?

Correctly detecting what? The SPI provides / requires instructions?

@royteeuwen
Copy link
Copy Markdown

Tested on a running AEMaaCS SDK 2026.2 (OSGi with Apache Felix).

What works

  • OSGi metadata is correct. Every bundle has Bundle-SymbolicName,
    Bundle-Version, versioned Export-Package clauses with proper uses: and
    versioned Import-Package clauses. BSN is unambiguous.
  • Optional resolution for vanilla SDK case is now correct in
    exporter-common and exporter-otlp.
    io.grpc, io.grpc.stub,
    com.google.common.io, com.google.common.util.concurrent,
    com.fasterxml.jackson.core are all resolution:=optional — bundle resolves
    without those even being present.
  • opentelemetry-exporter-sender-jdk is the perfect OSGi candidate. Imports are
    exclusively JDK packages (java.net.http, java.io, java.util, ...). No
    external transitive deps. Provides the HttpSenderProvider SPI through
    osgi.serviceloader capability so SPI Fly picks it up automatically. This
    one resolves and starts cleanly without any third-party bundle in the
    container.

Remaining issues

Issue 1 — sun.misc is a mandatory Import-Package in opentelemetry-exporter-common

The manifest contains:

Import-Package: ...,sun.misc

(no resolution:=optional).

Source culprit:
exporters/common/src/main/java/io/opentelemetry/exporter/internal/marshal/UnsafeStringEncoder.java
uses sun.misc.Unsafe. There already is a fallback path
(StringEncoder / StringEncoderHolder) that picks a non-Unsafe encoder when
Unsafe is unavailable, so this dependency is runtime-optional in the Java
sense. The OSGi manifest should reflect that.

This single import cascades into 4 unresolved bundles
(exporter-common, exporter-otlp, exporter-otlp-common,
sdk-extension-autoconfigure).

Fix: add sun.misc to osgiOptionalPackages (or
osgiUnversionedOptionalPackages) for the exporters:common module.

Issue 2 — io.opentelemetry.sdk.internal exported by 5 bundles (was in the previous commit too)

-exportcontents: !io.opentelemetry.internal.shaded.*,io.opentelemetry.*
still catches io.opentelemetry.sdk.internal.* in sdk-common, sdk-trace,
sdk-metrics, sdk-logs, and exporter-common. Different classes live in
that package in each module — that's a split package.

In Felix this resolves to whichever provider gets picked first by the
resolver, and uses constraints further reduce flexibility. Either:

  • Move internal helpers to module-specific internal.* packages
    (io.opentelemetry.sdk.trace.internal, io.opentelemetry.sdk.metrics.internal,
    etc.) so each is owned by one bundle, or
  • Exclude io.opentelemetry.sdk.internal from Export-Package along with the
    already-excluded io.opentelemetry.internal.shaded.*.

Issue 3 (nit) — Recommend exporter-sender-jdk in OSGi docs

The PR's integration tests include OtlpHttpJdkTest, which is the simplest
OSGi setup: zero non-JDK runtime deps, smallest bundle graph, no SPI Fly
quirks. Worth calling out in the OSGi guide as the default recommendation,
with okhttp as the option for users who specifically need okhttp's connection
pooling.

End-to-end verification (blocked)

I couldn't confirm an OTLP record actually reaches a collector via the native
bundles because exporter-common doesn't resolve in AEM due to Issue 1. Once
sun.misc is marked optional, I can retest both the jdk + okhttp branch easily

@jack-berg
Copy link
Copy Markdown
Member Author

Thanks @royteeuwen. Check out 95912aa:

  • Issue 1: you're right - I added sun.misc to the set of optional unversioned packages.
  • Issue 2: ah yeah we have some funky vendoring / relocation going on in :sdk:trace-shaded-deps. Adjusted to relocate to io.opentelemetry.sdk.trace.internal.shaded.jctools instead to avoid split package.
  • Issue 3: Yeah after the dust settles on this we'll want to add a new OSGi section to the docs, and explain things like this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants