From 0174e40d6f382551493483167db87de5c55adb57 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 02:09:00 +0000 Subject: [PATCH 1/6] Initial plan From 4313e3fd9c3400de37f89c82165ae02395a6df88 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 02:26:12 +0000 Subject: [PATCH 2/6] Refactor schema URL ownership Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../db/DbClientAttributesExtractor.java | 4 ++-- .../semconv/db/DbConnectionPoolMetrics.java | 4 ++-- .../db/SqlClientAttributesExtractor.java | 4 ++-- .../semconv/db/internal/DbSchemaUrls.java | 19 +++++++++++++++++++ .../MessagingAttributesExtractor.java | 4 ++-- .../internal/MessagingSchemaUrls.java | 19 +++++++++++++++++++ .../rpc/RpcCommonAttributesExtractor.java | 3 +-- .../rpc/internal/RpcSemconvSelection.java | 5 +++++ .../api/internal/SemconvStability.java | 9 --------- .../api/internal/SemconvStabilityTest.java | 8 -------- .../internal/AwsSdkInstrumenterFactory.java | 16 ++++++++-------- .../internal/AwsSdkInstrumenterFactory.java | 18 +++++++++--------- .../camel/v2_20/CamelProcessMetrics.java | 4 ++-- .../camel/v2_20/CamelSingletons.java | 8 ++++---- .../v3_0/CouchbaseRequestTracer.java | 8 +++++--- .../v3_1/CouchbaseRequestTracer.java | 8 +++++--- .../v3_2/CouchbaseRequestTracer.java | 8 +++++--- .../OpenTelemetryInstrumentationHelper.java | 6 ++++-- .../internal/JdbcInstrumenterFactory.java | 4 ++-- .../lettuce/v4_0/LettuceSingletons.java | 4 ++-- .../lettuce/v5_0/LettuceSingletons.java | 4 ++-- 21 files changed, 100 insertions(+), 67 deletions(-) create mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/internal/DbSchemaUrls.java create mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/internal/MessagingSchemaUrls.java diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java index 6632e1af1846..69ebe00f3216 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientAttributesExtractor.java @@ -16,6 +16,7 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.internal.SchemaUrlProvider; import io.opentelemetry.instrumentation.api.internal.SpanKey; @@ -23,7 +24,6 @@ import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor; import io.opentelemetry.semconv.AttributeKeyTemplate; -import io.opentelemetry.semconv.SchemaUrls; import java.util.Map; import javax.annotation.Nullable; @@ -143,6 +143,6 @@ public SpanKey internalGetSpanKey() { @Override public String internalGetSchemaUrl() { - return SchemaUrls.V1_44_0; + return DbSchemaUrls.SCHEMA_URL; } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbConnectionPoolMetrics.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbConnectionPoolMetrics.java index b780fdc4d8b0..7235c0aec38a 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbConnectionPoolMetrics.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbConnectionPoolMetrics.java @@ -18,8 +18,8 @@ import io.opentelemetry.api.metrics.MeterBuilder; import io.opentelemetry.api.metrics.ObservableLongMeasurement; import io.opentelemetry.api.metrics.ObservableMeasurement; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; -import io.opentelemetry.semconv.SchemaUrls; /** * A helper class that models the @@ -88,6 +87,6 @@ public final void onEnd( @Override public final String internalGetSchemaUrl() { - return selection.get().emitPreview() ? SchemaUrls.V1_44_0 : SchemaUrls.V1_37_0; + return selection.get().schemaUrl(); } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java index 4f57a2a4b915..cbbc96b52e7b 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.semconv.SchemaUrls; import javax.annotation.Nullable; /** @@ -70,5 +71,9 @@ public boolean emitOld() { public boolean emitPreview() { return emitPreview; } + + public String schemaUrl() { + return emitPreview ? SchemaUrls.V1_44_0 : SchemaUrls.V1_37_0; + } } } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java index 4d94c57ca082..b7c3ff53b443 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java @@ -11,7 +11,6 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.semconv.SchemaUrls; import java.util.HashMap; import java.util.Map; @@ -55,10 +54,6 @@ public static boolean emitPreviewRpcSemconv(OpenTelemetry openTelemetry) { return emitStable(selectionResolver(openTelemetry).rpc()); } - public static String rpcSchemaUrl(OpenTelemetry openTelemetry) { - return emitPreviewRpcSemconv(openTelemetry) ? SchemaUrls.V1_44_0 : SchemaUrls.V1_37_0; - } - private static SemconvSelectionResolver selectionResolver(OpenTelemetry openTelemetry) { return new SemconvSelectionResolver( openTelemetry, getGeneralInstrumentationConfig(openTelemetry)); @@ -97,9 +92,5 @@ private static boolean emitStable(SemconvMode mode) { return mode.version() >= 1; } - public static String messagingSchemaUrl() { - return SchemaUrls.V1_43_0; - } - private SemconvStability() {} } diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/SemconvStabilityTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/SemconvStabilityTest.java index 922963af069e..4350d41aa323 100644 --- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/SemconvStabilityTest.java +++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/SemconvStabilityTest.java @@ -25,7 +25,6 @@ import io.opentelemetry.sdk.autoconfigure.declarativeconfig.DeclarativeConfiguration; import io.opentelemetry.sdk.autoconfigure.declarativeconfig.model.OpenTelemetryConfigurationModel; import io.opentelemetry.sdk.internal.SdkConfigProvider; -import io.opentelemetry.semconv.SchemaUrls; import java.io.ByteArrayInputStream; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.HashMap; @@ -206,11 +205,6 @@ void previewFallbackAppliesToPreviewDomains() { assertThat(servicePeer).isEqualTo(SemconvMode.V1_EXPERIMENTAL); } - @Test - void messagingUsesAdoptedSchemaUrl() { - assertThat(SemconvStability.messagingSchemaUrl()).isEqualTo(SchemaUrls.V1_43_0); - } - @Test void domainsResolveIndependently() { SemconvSelectionResolver resolver = @@ -311,8 +305,6 @@ void structuredRpcSelectionFromDeclarativeConfig( assertThat(emitOldRpcSemconv(openTelemetry)) .isEqualTo(expected.version() == 0 || expected.dualEmit()); assertThat(emitPreviewRpcSemconv(openTelemetry)).isEqualTo(expected.version() >= 1); - assertThat(SemconvStability.rpcSchemaUrl(openTelemetry)) - .isEqualTo(expected.version() >= 1 ? SchemaUrls.V1_44_0 : SchemaUrls.V1_37_0); } private static Stream structuredRpcSelections() { diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/internal/AwsSdkInstrumenterFactory.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/internal/AwsSdkInstrumenterFactory.java index f7417cd8cadc..99e807921a9a 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/internal/AwsSdkInstrumenterFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/internal/AwsSdkInstrumenterFactory.java @@ -12,7 +12,6 @@ import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSendExceptionEventExtractor; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSettleExceptionEventExtractor; import static io.opentelemetry.instrumentation.api.incubator.semconv.rpc.internal.RpcExceptionEventExtractors.setRpcClientExceptionEventExtractor; -import static io.opentelemetry.instrumentation.api.internal.SemconvStability.messagingSchemaUrl; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -28,6 +27,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.config.IncludeExclude; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingConsumerMetrics; @@ -37,6 +37,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanKindExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingProcessContextCustomizer; +import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; @@ -44,7 +45,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor; -import io.opentelemetry.semconv.SchemaUrls; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -143,7 +143,7 @@ public Instrumenter> consumerReceiveInstrumenter( singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingConsumerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingReceiveExceptionEventExtractor(builder); builder.addSpanLinksExtractor( (spanLinks, parentContext, request) -> { @@ -171,7 +171,7 @@ public Instrumenter> consumerProcessInstrumenter( .addAttributesExtractors(toSqsRequestExtractors(attributesExtractors())) .addAttributesExtractor(messagingAttributeExtractor) .addOperationMetrics(MessagingProcessMetrics.get()) - .setSchemaUrl(messagingSchemaUrl()); + .setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); if (!messagingReceiveInstrumentationEnabled) { builder.addOperationMetrics(MessagingConsumerMetrics.getConsumedMessages()); } @@ -248,7 +248,7 @@ public Instrumenter, Response> producerInstrumenter() { singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingProducerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingSendExceptionEventExtractor(builder); builder.addSpanLinksExtractor( (spanLinks, parentContext, request) -> { @@ -270,7 +270,7 @@ public Instrumenter producerCreateInstrumenter() { MessagingSpanNameExtractor.create(getter, operationType, CREATE_OPERATION_NAME)) .addAttributesExtractor( messagingAttributesExtractor(getter, operationType, CREATE_OPERATION_NAME)) - .setSchemaUrl(messagingSchemaUrl()) + .setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL) .buildInstrumenter(MessagingSpanKindExtractor.create(operationType)); } @@ -288,7 +288,7 @@ public Instrumenter, Response> settleInstrumenter() { singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingConsumerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingSettleExceptionEventExtractor(builder); }, true); @@ -304,7 +304,7 @@ public Instrumenter, Response> dynamoDbInstrumenter() { builder .addAttributesExtractor(new DynamoDbAttributesExtractor()) .addOperationMetrics(DbClientMetrics.get()) - .setSchemaUrl(SchemaUrls.V1_44_0); + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL); setDbClientExceptionEventExtractor(builder); }, true); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java index b061bc2c5356..2357494b26ea 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java @@ -13,7 +13,6 @@ import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSendExceptionEventExtractor; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingExceptionEventExtractors.setMessagingSettleExceptionEventExtractor; import static io.opentelemetry.instrumentation.api.incubator.semconv.rpc.internal.RpcExceptionEventExtractors.setRpcClientExceptionEventExtractor; -import static io.opentelemetry.instrumentation.api.internal.SemconvStability.messagingSchemaUrl; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -33,6 +32,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.genai.GenAiAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.genai.GenAiClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.genai.GenAiSpanNameExtractor; @@ -45,6 +45,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanKindExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingProcessContextCustomizer; +import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; @@ -55,7 +56,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.semconv.SchemaUrls; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -257,7 +257,7 @@ public Instrumenter consumerReceiveInstrumenter() { singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingConsumerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingReceiveExceptionEventExtractor(builder); builder.addSpanLinksExtractor( (spanLinks, parentContext, request) -> { @@ -284,7 +284,7 @@ public Instrumenter consumerProcessInstrumenter() { .addAttributesExtractor( messagingAttributesExtractor(getter, operationType, PROCESS_OPERATION_NAME)) .addOperationMetrics(processMetrics) - .setSchemaUrl(messagingSchemaUrl()); + .setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); if (!messagingReceiveInstrumentationEnabled) { builder.addContextCustomizer( (context, request, startAttributes) -> @@ -368,7 +368,7 @@ public Instrumenter producerInstrumenter() { singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingProducerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingSendExceptionEventExtractor(builder); builder.addSpanLinksExtractor( (spanLinks, parentContext, request) -> { @@ -391,7 +391,7 @@ public Instrumenter producerCreateInstrumenter() { MessagingSpanNameExtractor.create(getter, operationType, CREATE_OPERATION_NAME)) .addAttributesExtractor( messagingAttributesExtractor(getter, operationType, CREATE_OPERATION_NAME)) - .setSchemaUrl(messagingSchemaUrl()) + .setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL) .buildInstrumenter(MessagingSpanKindExtractor.create(operationType)); } @@ -409,7 +409,7 @@ public Instrumenter settleInstrumenter() { singletonList(messagingAttributeExtractor), builder -> { builder.addOperationMetrics(MessagingConsumerMetrics.get()); - builder.setSchemaUrl(messagingSchemaUrl()); + builder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); setMessagingSettleExceptionEventExtractor(builder); }, true); @@ -426,7 +426,7 @@ public Instrumenter dynamoDbInstrumenter() { builder .addAttributesExtractor(DbClientAttributesExtractor.create(getter)) .addOperationMetrics(DbClientMetrics.get()) - .setSchemaUrl(SchemaUrls.V1_44_0); + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL); setDbClientExceptionEventExtractor(builder); }, true); @@ -445,7 +445,7 @@ public Instrumenter rdsDataInstrumenter() { builder .addAttributesExtractor(SqlClientAttributesExtractor.create(getter)) .addOperationMetrics(DbClientMetrics.get()) - .setSchemaUrl(SchemaUrls.V1_44_0); + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL); setDbClientExceptionEventExtractor(builder); }, true); diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelProcessMetrics.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelProcessMetrics.java index dab8ee28190a..a27f9d8f687a 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelProcessMetrics.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelProcessMetrics.java @@ -10,7 +10,6 @@ import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetrySignal.CONSUMED_MESSAGES; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetryState.add; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetryState.enable; -import static io.opentelemetry.instrumentation.api.internal.SemconvStability.messagingSchemaUrl; import static io.opentelemetry.javaagent.instrumentation.camel.v2_20.CamelMessageTelemetry.messageTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -22,6 +21,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingConsumerMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingProcessMetrics; +import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingSchemaUrls; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.OperationListener; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; @@ -48,7 +48,7 @@ private static Meter createMeter() { if (version != null) { meterBuilder.setInstrumentationVersion(version); } - meterBuilder.setSchemaUrl(messagingSchemaUrl()); + meterBuilder.setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); return meterBuilder.build(); } diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelSingletons.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelSingletons.java index 64aa557cc425..751652294bc1 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelSingletons.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelSingletons.java @@ -11,13 +11,13 @@ import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetrySignal.CONSUMED_MESSAGES; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetryState.add; import static io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingTelemetryState.enable; -import static io.opentelemetry.instrumentation.api.internal.SemconvStability.messagingSchemaUrl; import static io.opentelemetry.javaagent.instrumentation.camel.v2_20.CamelMessageTelemetry.messageTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingConsumerMetrics; @@ -27,6 +27,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanKindExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingProcessInstrumenterFactory; +import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.internal.MessagingSchemaUrls; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; @@ -34,7 +35,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; import io.opentelemetry.instrumentation.api.internal.SchemaUrlProvider; import io.opentelemetry.javaagent.instrumentation.camel.v2_20.decorators.DecoratorRegistry; -import io.opentelemetry.semconv.SchemaUrls; import javax.annotation.Nullable; import org.apache.camel.Endpoint; import org.apache.camel.util.StringHelper; @@ -46,7 +46,7 @@ class CamelSingletons { private static final DecoratorRegistry registry = new DecoratorRegistry(); private static final Instrumenter instrumenter = createInstrumenter(); private static final Instrumenter databaseInstrumenter = - createInstrumenter(SchemaUrls.V1_44_0); + createInstrumenter(DbSchemaUrls.SCHEMA_URL); private static final Instrumenter messagingSendInstrumenter = createMessagingInstrumenter(SEND, "send", true); private static final Instrumenter messagingPublishInstrumenter = @@ -85,7 +85,7 @@ private static Instrumenter createMessagingInstrumenter( SpanNameExtractor spanNameExtractor = MessagingSpanNameExtractor.create(getter, operationType, operationName); InstrumenterBuilder builder = - instrumenterBuilder(spanNameExtractor).setSchemaUrl(messagingSchemaUrl()); + instrumenterBuilder(spanNameExtractor).setSchemaUrl(MessagingSchemaUrls.SCHEMA_URL); AttributesExtractor attributesExtractor = MessagingAttributesExtractor.create(getter, operationType, operationName); builder.addAttributesExtractor( diff --git a/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java index 9f9fa7cd2477..de517406ce63 100644 --- a/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java @@ -24,26 +24,28 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.logs.Logger; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseSpan; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseTracer; -import io.opentelemetry.semconv.SchemaUrls; import java.time.Duration; import javax.annotation.Nullable; import reactor.core.publisher.Mono; public final class CouchbaseRequestTracer implements RequestTracer { + private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; + private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry) { String instrumentationName = "io.opentelemetry.couchbase-3.0"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SchemaUrls.V1_44_0).build(); + openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, false, true, true)); diff --git a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java index 054de1da64d2..b9d72fcae63f 100644 --- a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java @@ -15,13 +15,13 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.logs.Logger; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseSpan; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseTracer; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseConfiguredTarget; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseRequestPeers; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseRequestPeers.Peer; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseSpanName; -import io.opentelemetry.semconv.SchemaUrls; import java.time.Duration; import java.time.Instant; import javax.annotation.Nullable; @@ -29,17 +29,19 @@ public final class CouchbaseRequestTracer implements RequestTracer { + private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; + private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry, boolean legacyBridge) { String instrumentationName = "io.opentelemetry.couchbase-3.1"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SchemaUrls.V1_44_0).build(); + openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, !legacyBridge, legacyBridge, false)); diff --git a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java index fc401ca4ce11..5b15d79572f2 100644 --- a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java @@ -18,6 +18,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.logs.Logger; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseSpan; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_0.CouchbaseTracer; @@ -26,7 +27,6 @@ import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseRequestPeers.Peer; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseServerTarget; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v3_1.CouchbaseSpanName; -import io.opentelemetry.semconv.SchemaUrls; import java.time.Duration; import java.time.Instant; import javax.annotation.Nullable; @@ -34,17 +34,19 @@ public final class CouchbaseRequestTracer implements RequestTracer { + private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; + private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry) { String instrumentationName = "io.opentelemetry.couchbase-3.2"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SchemaUrls.V1_44_0).build(); + openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, true, false, false)); diff --git a/instrumentation/graphql-java/graphql-java-common-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/common/v12_0/internal/OpenTelemetryInstrumentationHelper.java b/instrumentation/graphql-java/graphql-java-common-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/common/v12_0/internal/OpenTelemetryInstrumentationHelper.java index c09852a1f67d..efbd6612a9c6 100644 --- a/instrumentation/graphql-java/graphql-java-common-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/common/v12_0/internal/OpenTelemetryInstrumentationHelper.java +++ b/instrumentation/graphql-java/graphql-java-common-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/common/v12_0/internal/OpenTelemetryInstrumentationHelper.java @@ -41,6 +41,8 @@ * any time. */ public class OpenTelemetryInstrumentationHelper { + private static final String SCHEMA_URL = SchemaUrls.V1_44_0; + private static final NodeVisitor sanitizingVisitor = new SanitizingVisitor(); private static final AstTransformer astTransformer = new AstTransformer(); @@ -76,10 +78,10 @@ public static OpenTelemetryInstrumentationHelper create( } }); builder.addAttributesExtractor(new GraphqlAttributesExtractor()); - builder.setSchemaUrl(SchemaUrls.V1_44_0); + builder.setSchemaUrl(SCHEMA_URL); return new OpenTelemetryInstrumentationHelper( builder.buildInstrumenter(), - new GraphqlErrorRecorder(openTelemetry, instrumentationName, SchemaUrls.V1_44_0), + new GraphqlErrorRecorder(openTelemetry, instrumentationName, SCHEMA_URL), captureQuery, sanitizeQuery, addOperationNameToSpanName); diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java index 1ab5ba8733df..df25df6e9cff 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java @@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; @@ -19,7 +20,6 @@ import io.opentelemetry.instrumentation.api.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.jdbc.internal.dbinfo.DbInfo; -import io.opentelemetry.semconv.SchemaUrls; import java.util.List; import javax.sql.DataSource; @@ -68,7 +68,7 @@ public static Instrumenter createDataSourceInstrumenter( openTelemetry, INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(getter)) .addAttributesExtractor(CodeAttributesExtractor.create(getter)) .addAttributesExtractor(new DataSourceDbAttributesExtractor()) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .setEnabled(enabled) .buildInstrumenter(); } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java index 3602607b491b..a43bd1a06884 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java @@ -18,6 +18,7 @@ import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.RedisSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.service.peer.ServicePeerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; @@ -25,7 +26,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.semconv.SchemaUrls; import java.net.SocketAddress; import java.util.List; import javax.annotation.Nullable; @@ -94,7 +94,7 @@ public class LettuceSingletons { ServicePeerAttributesExtractor.create( netAttributesGetter, GlobalOpenTelemetry.get())) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .setEnabled( DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "lettuce") .get("connection_telemetry") diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java index 7b403f6216f7..dba00cdb78ff 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; +import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.DbSchemaUrls; import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.RedisSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.service.peer.ServicePeerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; @@ -23,7 +24,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.semconv.SchemaUrls; public class LettuceSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.lettuce-5.0"; @@ -75,7 +75,7 @@ public class LettuceSingletons { ServicePeerAttributesExtractor.create( connectNetworkAttributesGetter, GlobalOpenTelemetry.get())) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) - .setSchemaUrl(SchemaUrls.V1_44_0) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .setEnabled( DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "lettuce") .get("connection_telemetry") From d3a29f05ed1ae382d2c4f81a7bb8a87b028eba90 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 02:48:06 +0000 Subject: [PATCH 3/6] Remove Couchbase schema URL aliases Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../couchbase/v3_0/CouchbaseRequestTracer.java | 9 +++++---- .../couchbase/v3_1/CouchbaseRequestTracer.java | 9 +++++---- .../couchbase/v3_2/CouchbaseRequestTracer.java | 9 +++++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java index de517406ce63..0dd403a7c93b 100644 --- a/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_0/CouchbaseRequestTracer.java @@ -33,19 +33,20 @@ public final class CouchbaseRequestTracer implements RequestTracer { - private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; - private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry) { String instrumentationName = "io.opentelemetry.couchbase-3.0"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); + openTelemetry + .tracerBuilder(instrumentationName) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) + .build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SCHEMA_URL) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, false, true, true)); diff --git a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java index b9d72fcae63f..04a186083038 100644 --- a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseRequestTracer.java @@ -29,19 +29,20 @@ public final class CouchbaseRequestTracer implements RequestTracer { - private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; - private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry, boolean legacyBridge) { String instrumentationName = "io.opentelemetry.couchbase-3.1"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); + openTelemetry + .tracerBuilder(instrumentationName) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) + .build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SCHEMA_URL) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, !legacyBridge, legacyBridge, false)); diff --git a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java index 5b15d79572f2..540d40ea41a7 100644 --- a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java +++ b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseRequestTracer.java @@ -34,19 +34,20 @@ public final class CouchbaseRequestTracer implements RequestTracer { - private static final String SCHEMA_URL = DbSchemaUrls.SCHEMA_URL; - private final CouchbaseTracer tracer; public static RequestTracer create(OpenTelemetry openTelemetry) { String instrumentationName = "io.opentelemetry.couchbase-3.2"; Tracer tracer = - openTelemetry.tracerBuilder(instrumentationName).setSchemaUrl(SCHEMA_URL).build(); + openTelemetry + .tracerBuilder(instrumentationName) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) + .build(); Logger exceptionLogger = openTelemetry .getLogsBridge() .loggerBuilder(instrumentationName) - .setSchemaUrl(SCHEMA_URL) + .setSchemaUrl(DbSchemaUrls.SCHEMA_URL) .build(); return new CouchbaseRequestTracer( new CouchbaseTracer(tracer, exceptionLogger, true, false, false)); From 9c065785d4a2dcb25dcf36e7dfb86906a963acec Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 19 Oct 2026 20:55:49 -0700 Subject: [PATCH 4/6] Complete domain-owned HTTP and GenAI schema definitions Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../DefaultHttpClientInstrumenterBuilder.java | 6 +- .../DefaultHttpServerInstrumenterBuilder.java | 4 +- .../genai/internal/GenAiSchemaUrls.java | 19 +++++ .../rpc/internal/RpcSemconvSelection.java | 2 +- .../internal/HttpInstrumenterSchemaTest.java | 80 +++++++++++++++++++ .../semconv/rpc/RpcInstanceSemconvTest.java | 4 + .../semconv/http/internal/HttpSchemaUrls.java | 19 +++++ .../v3_8/client/NettyClientSingletons.java | 4 +- 8 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/genai/internal/GenAiSchemaUrls.java create mode 100644 instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java create mode 100644 instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HttpSchemaUrls.java diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java index e62d48f37112..f6a9fca7f030 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java @@ -32,7 +32,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; -import io.opentelemetry.semconv.SchemaUrls; +import io.opentelemetry.instrumentation.api.semconv.http.internal.HttpSchemaUrls; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -267,7 +267,7 @@ public Instrumenter build() { .addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) .addOperationMetrics(HttpClientMetrics.get()) - .setSchemaUrl(SchemaUrls.V1_41_0); + .setSchemaUrl(HttpSchemaUrls.SCHEMA_URL); setHttpClientExceptionEventExtractor(builder); if (emitExperimentalHttpClientTelemetry) { builder @@ -288,7 +288,7 @@ InstrumenterBuilder instrumenterBuilder( SpanNameExtractor spanNameExtractor) { return Instrumenter.builder( openTelemetry, instrumentationName, spanNameExtractor) - .setSchemaUrl(SchemaUrls.V1_41_0); + .setSchemaUrl(HttpSchemaUrls.SCHEMA_URL); } public static void setHttpClientExceptionEventExtractor( diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java index 7ea3683c7f84..2da0e94d07c8 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -31,7 +31,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor; -import io.opentelemetry.semconv.SchemaUrls; +import io.opentelemetry.instrumentation.api.semconv.http.internal.HttpSchemaUrls; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -272,7 +272,7 @@ public InstrumenterBuilder instrumenterBuilder() { .addAttributesExtractors(additionalExtractors) .addContextCustomizer(httpServerRouteBuilder.build()) .addOperationMetrics(HttpServerMetrics.get()) - .setSchemaUrl(SchemaUrls.V1_41_0); + .setSchemaUrl(HttpSchemaUrls.SCHEMA_URL); Experimental.setExceptionEventExtractor( builder, (logRecordBuilder, context, request) -> { diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/genai/internal/GenAiSchemaUrls.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/genai/internal/GenAiSchemaUrls.java new file mode 100644 index 000000000000..878abb786520 --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/genai/internal/GenAiSchemaUrls.java @@ -0,0 +1,19 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.semconv.genai.internal; + +import io.opentelemetry.semconv.SchemaUrls; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class GenAiSchemaUrls { + + public static final String SCHEMA_URL = SchemaUrls.V1_37_0; + + private GenAiSchemaUrls() {} +} diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java index cbbc96b52e7b..42e842cf46ca 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java @@ -60,7 +60,7 @@ private Selection(boolean emitOld, boolean emitPreview) { this.emitPreview = emitPreview; } - static Selection forOpenTelemetry(OpenTelemetry openTelemetry) { + public static Selection forOpenTelemetry(OpenTelemetry openTelemetry) { return new Selection(emitOldRpcSemconv(openTelemetry), emitPreviewRpcSemconv(openTelemetry)); } diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java new file mode 100644 index 000000000000..3dd488d6fc3b --- /dev/null +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java @@ -0,0 +1,80 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.builder.internal; + +import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; +import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; +import io.opentelemetry.semconv.SchemaUrls; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class HttpInstrumenterSchemaTest { + + @RegisterExtension + static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create(); + + @Mock HttpClientAttributesGetter clientGetter; + @Mock HttpServerAttributesGetter serverGetter; + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void emitsHttpSchemaOnSignals(boolean client) { + Instrumenter instrumenter = + client + ? DefaultHttpClientInstrumenterBuilder.create( + "test", otelTesting.getOpenTelemetry(), clientGetter) + .build() + : DefaultHttpServerInstrumenterBuilder.create( + "test", otelTesting.getOpenTelemetry(), serverGetter) + .build(); + + Context context = instrumenter.start(Context.root(), "request"); + instrumenter.end(context, "request", null, new IllegalStateException("test")); + + assertThat(otelTesting.getSpans()) + .singleElement() + .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); + assertThat(otelTesting.getMetrics()) + .singleElement() + .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); + if (emitExceptionAsLogs()) { + assertThat(otelTesting.getLogRecords()) + .singleElement() + .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); + } else { + assertThat(otelTesting.getLogRecords()).isEmpty(); + } + } + + @Test + void customClientInstrumenterEmitsHttpSchema() { + Instrumenter instrumenter = + DefaultHttpClientInstrumenterBuilder.create( + "test", otelTesting.getOpenTelemetry(), clientGetter) + .instrumenterBuilder(request -> "request") + .buildInstrumenter(); + + Context context = instrumenter.start(Context.root(), "request"); + instrumenter.end(context, "request", "response", null); + + assertThat(otelTesting.getSpans()) + .singleElement() + .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); + } +} diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcInstanceSemconvTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcInstanceSemconvTest.java index 6cc1013ef898..107b8a273a11 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcInstanceSemconvTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcInstanceSemconvTest.java @@ -29,6 +29,7 @@ import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.internal.RpcSemconvSelection; import io.opentelemetry.instrumentation.api.incubator.semconv.service.peer.ServicePeerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer; @@ -76,6 +77,7 @@ void instancesEmitIndependentSemconv(boolean client) { boolean preview = mode != 0; boolean old = mode != 1; String schemaUrl = preview ? SchemaUrls.V1_44_0 : SchemaUrls.V1_37_0; + assertThat(instance.selection.schemaUrl()).isEqualTo(schemaUrl); Context context = instance.instrumenter.start(Context.root(), "request"); instance.instrumenter.end(context, "request", null, new IllegalStateException()); @@ -264,6 +266,7 @@ private final class ConfiguredInstrumenter { final InMemorySpanExporter spanExporter = InMemorySpanExporter.create(); final InMemoryMetricReader metricReader = InMemoryMetricReader.create(); final Instrumenter instrumenter; + final RpcSemconvSelection.Selection selection; ConfiguredInstrumenter(boolean client, boolean preview, boolean dualEmit) { OpenTelemetrySdk sdk = @@ -307,6 +310,7 @@ private final class ConfiguredInstrumenter { when(openTelemetry.getConfigProvider()).thenReturn(configProvider); when(openTelemetry.getGeneralInstrumentationConfig()).thenReturn(general); when(openTelemetry.getInstrumentationConfig("common")).thenReturn(common); + selection = RpcSemconvSelection.Selection.forOpenTelemetry(openTelemetry); TestGetter getter = new TestGetter(); instrumenter = diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HttpSchemaUrls.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HttpSchemaUrls.java new file mode 100644 index 000000000000..6f405f3b68dc --- /dev/null +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HttpSchemaUrls.java @@ -0,0 +1,19 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.semconv.http.internal; + +import io.opentelemetry.semconv.SchemaUrls; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class HttpSchemaUrls { + + public static final String SCHEMA_URL = SchemaUrls.V1_41_0; + + private HttpSchemaUrls() {} +} diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java index 281138ab7b85..ee23b685548f 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java @@ -13,11 +13,11 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.semconv.http.internal.HttpSchemaUrls; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import io.opentelemetry.javaagent.instrumentation.netty.v3_8.NettyRequest; -import io.opentelemetry.semconv.SchemaUrls; import org.jboss.netty.channel.Channel; import org.jboss.netty.handler.codec.http.HttpResponse; @@ -47,7 +47,7 @@ public class NettyClientSingletons { .addAttributesExtractor( HttpClientServicePeerAttributesExtractor.create( new NettyConnectHttpAttributesGetter(), GlobalOpenTelemetry.get())) - .setSchemaUrl(SchemaUrls.V1_41_0); + .setSchemaUrl(HttpSchemaUrls.SCHEMA_URL); setHttpClientExceptionEventExtractor(builder); connectionInstrumenter = builder.buildInstrumenter(SpanKindExtractor.alwaysClient()); } From cf39371f973249551daa47a0344a91e8b246da9a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 18:17:24 +0000 Subject: [PATCH 5/6] Remove HTTP instrumenter schema test Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../internal/HttpInstrumenterSchemaTest.java | 80 ------------------- 1 file changed, 80 deletions(-) delete mode 100644 instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java deleted file mode 100644 index 3dd488d6fc3b..000000000000 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/HttpInstrumenterSchemaTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.incubator.builder.internal; - -import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; - -import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesGetter; -import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; -import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; -import io.opentelemetry.semconv.SchemaUrls; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.extension.RegisterExtension; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class HttpInstrumenterSchemaTest { - - @RegisterExtension - static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create(); - - @Mock HttpClientAttributesGetter clientGetter; - @Mock HttpServerAttributesGetter serverGetter; - - @ParameterizedTest - @ValueSource(booleans = {true, false}) - void emitsHttpSchemaOnSignals(boolean client) { - Instrumenter instrumenter = - client - ? DefaultHttpClientInstrumenterBuilder.create( - "test", otelTesting.getOpenTelemetry(), clientGetter) - .build() - : DefaultHttpServerInstrumenterBuilder.create( - "test", otelTesting.getOpenTelemetry(), serverGetter) - .build(); - - Context context = instrumenter.start(Context.root(), "request"); - instrumenter.end(context, "request", null, new IllegalStateException("test")); - - assertThat(otelTesting.getSpans()) - .singleElement() - .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); - assertThat(otelTesting.getMetrics()) - .singleElement() - .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); - if (emitExceptionAsLogs()) { - assertThat(otelTesting.getLogRecords()) - .singleElement() - .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); - } else { - assertThat(otelTesting.getLogRecords()).isEmpty(); - } - } - - @Test - void customClientInstrumenterEmitsHttpSchema() { - Instrumenter instrumenter = - DefaultHttpClientInstrumenterBuilder.create( - "test", otelTesting.getOpenTelemetry(), clientGetter) - .instrumenterBuilder(request -> "request") - .buildInstrumenter(); - - Context context = instrumenter.start(Context.root(), "request"); - instrumenter.end(context, "request", "response", null); - - assertThat(otelTesting.getSpans()) - .singleElement() - .satisfies(hasScopeSchemaUrl(SchemaUrls.V1_41_0)); - } -} From a8e8bd1261643810d14cf7b3d9793fd2bc69e1c7 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 20 Oct 2026 14:50:53 -0700 Subject: [PATCH 6/6] Add testing visibility to forOpenTelemetry method Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../api/incubator/semconv/rpc/internal/RpcSemconvSelection.java | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java index 42e842cf46ca..871db236b4f2 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/internal/RpcSemconvSelection.java @@ -60,6 +60,7 @@ private Selection(boolean emitOld, boolean emitPreview) { this.emitPreview = emitPreview; } + // visible for testing public static Selection forOpenTelemetry(OpenTelemetry openTelemetry) { return new Selection(emitOldRpcSemconv(openTelemetry), emitPreviewRpcSemconv(openTelemetry)); }