From a5835dc0258e1f79b9f1d65d6ac66c12c5858dbd Mon Sep 17 00:00:00 2001 From: release-bot Date: Mon, 26 Oct 2026 09:50:42 +0000 Subject: [PATCH 1/6] [automated] v2.33.0 post release changes --- README.md | 7 ++++++- deployments/cloudfoundry/index.yml | 1 + version.gradle.kts | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c834a4b66..a2200e334 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ see [Migrate from the SignalFx Java Agent](https://help.splunk.com/en/splunk-obs + +The following documentation refers to the in-development version of `splunk-otel-java`. Docs for the latest version ([v2.33.0](https://github.com/signalfx/splunk-otel-java/releases/latest)) can be found [here](https://github.com/signalfx/splunk-otel-java/blob/v2.33.0/README.md). + +--- + ## Requirements @@ -82,7 +87,7 @@ with: ## Snapshot builds -We publish [snapshot builds](https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/com/splunk/splunk-otel-javaagent/2.33.0-SNAPSHOT/) +We publish [snapshot builds](https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/com/splunk/splunk-otel-javaagent/2.34.0-SNAPSHOT/) with every merge to the `main` branch. Snapshots are primarily intended to test new functionality and are not recommended for production use. diff --git a/deployments/cloudfoundry/index.yml b/deployments/cloudfoundry/index.yml index a20714cf7..1305d652f 100644 --- a/deployments/cloudfoundry/index.yml +++ b/deployments/cloudfoundry/index.yml @@ -62,3 +62,4 @@ 2.30.0: https://github.com/signalfx/splunk-otel-java/releases/download/v2.30.0/splunk-otel-javaagent.jar 2.31.0: https://github.com/signalfx/splunk-otel-java/releases/download/v2.31.0/splunk-otel-javaagent.jar 2.32.0: https://github.com/signalfx/splunk-otel-java/releases/download/v2.32.0/splunk-otel-javaagent.jar +2.33.0: https://github.com/signalfx/splunk-otel-java/releases/download/v2.33.0/splunk-otel-javaagent.jar diff --git a/version.gradle.kts b/version.gradle.kts index 1c5f14693..17eef5a20 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -1,5 +1,5 @@ // do NOT update that variable manually - it is managed by the pre/post release scripts -val distroVersion = "2.33.0" +val distroVersion = "2.34.0-SNAPSHOT" allprojects { version = distroVersion From 97108911c4263f25add017b1abc3dcb7ef9f4471 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 26 Oct 2026 16:32:13 +0200 Subject: [PATCH 2/6] update upstream to 3.0.0-SNAPSHOT --- .../TruncateCommandLineResourceDetector.java | 74 ---------------- .../appd/AppdBonusPropagatorTest.java | 5 -- ...uncateCommandLineResourceDetectorTest.java | 85 ------------------- dependencyManagement/build.gradle.kts | 2 +- ...ssfishAttributesInstrumentationModule.java | 2 +- instrumentation/jdbc/build.gradle.kts | 1 + .../mariadb/MariaDbInstrumentationModule.java | 13 +++ .../MariaDbStatementInstrumentation.java | 4 +- .../mysql/MySqlInstrumentationModule.java | 13 +++ .../mysql/MySqlStatementInstrumentation.java | 4 +- .../oracle/OracleInstrumentationModule.java | 13 +++ .../OracleStatementInstrumentation.java | 4 +- .../PostgreSqlInstrumentationModule.java | 13 +++ .../PostgreSqlStatementInstrumentation.java | 4 +- .../SqlServerInstrumentationModule.java | 13 +++ .../SqlServerStatementInstrumentation.java | 4 +- .../JettyAttributesInstrumentationModule.java | 2 +- .../khttp/KHttpInstrumentation.java | 4 +- ...ibertyAttributesInstrumentationModule.java | 2 +- .../nocode/NocodeAttributesExtractor.java | 2 +- .../nocode/NocodeInstrumentation.java | 4 +- .../nocode/NocodeSpanNameExtractor.java | 2 +- .../nocode/NocodeInstrumentationTest.java | 2 +- .../webengine/CatalinaInstrumentation.java | 2 +- .../TomeeAttributesInstrumentationModule.java | 2 +- ...bLogicAttributesInstrumentationModule.java | 11 +-- ...SphereAttributesInstrumentationModule.java | 2 +- ...ildFlyAttributesInstrumentationModule.java | 4 +- licenses/licenses.md | 4 +- version.gradle.kts | 2 +- 30 files changed, 101 insertions(+), 198 deletions(-) delete mode 100644 custom/src/main/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetector.java delete mode 100644 custom/src/test/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetectorTest.java diff --git a/custom/src/main/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetector.java b/custom/src/main/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetector.java deleted file mode 100644 index d74aa1c00..000000000 --- a/custom/src/main/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetector.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Splunk Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.splunk.opentelemetry.resource; - -import static com.splunk.opentelemetry.resource.StringListShortener.truncate; -import static io.opentelemetry.semconv.incubating.ProcessIncubatingAttributes.PROCESS_COMMAND_ARGS; -import static io.opentelemetry.semconv.incubating.ProcessIncubatingAttributes.PROCESS_COMMAND_LINE; - -import com.google.auto.service.AutoService; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.instrumentation.resources.ProcessResource; -import io.opentelemetry.instrumentation.resources.ProcessRuntimeResource; -import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; -import io.opentelemetry.sdk.resources.Resource; -import java.util.List; -import java.util.logging.Logger; - -@AutoService(ComponentProvider.class) -public class TruncateCommandLineResourceDetector implements ComponentProvider { - private static final Logger logger = - Logger.getLogger(TruncateCommandLineResourceDetector.class.getName()); - - private static final int MAX_COMMAND_LINE_LENGTH = 255; - - @Override - public Class getType() { - return Resource.class; - } - - @Override - public String getName() { - return "truncate_command_line_process"; - } - - @Override - public Resource create(DeclarativeConfigProperties config) { - Resource resource = ProcessResource.get().merge(ProcessRuntimeResource.get()); - - List commandArgs = resource.getAttribute(PROCESS_COMMAND_ARGS); - if (commandArgs != null) { - logger.fine(() -> "Truncate resource attribute " + PROCESS_COMMAND_ARGS.getKey()); - List newCommandArgs = truncate(commandArgs, MAX_COMMAND_LINE_LENGTH); - if (newCommandArgs != null) { - resource = - resource.merge(Resource.create(Attributes.of(PROCESS_COMMAND_ARGS, newCommandArgs))); - } - } - - String commandLine = resource.getAttribute(PROCESS_COMMAND_LINE); - if (commandLine != null && commandLine.length() > MAX_COMMAND_LINE_LENGTH) { - logger.fine(() -> "Truncate resource attribute " + PROCESS_COMMAND_LINE.getKey()); - String newCommandLine = commandLine.substring(0, MAX_COMMAND_LINE_LENGTH - 3) + "..."; - resource = - resource.merge(Resource.create(Attributes.of(PROCESS_COMMAND_LINE, newCommandLine))); - } - - return resource; - } -} diff --git a/custom/src/test/java/com/splunk/opentelemetry/appd/AppdBonusPropagatorTest.java b/custom/src/test/java/com/splunk/opentelemetry/appd/AppdBonusPropagatorTest.java index cbb860793..6c4438d90 100644 --- a/custom/src/test/java/com/splunk/opentelemetry/appd/AppdBonusPropagatorTest.java +++ b/custom/src/test/java/com/splunk/opentelemetry/appd/AppdBonusPropagatorTest.java @@ -81,11 +81,6 @@ void extract() { context, map, new TextMapGetter<>() { - @Override - public Iterable keys(Map carrier) { - return carrier.keySet(); - } - @Nullable @Override public String get(@Nullable Map carrier, String key) { diff --git a/custom/src/test/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetectorTest.java b/custom/src/test/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetectorTest.java deleted file mode 100644 index d35ce7b87..000000000 --- a/custom/src/test/java/com/splunk/opentelemetry/resource/TruncateCommandLineResourceDetectorTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright Splunk Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.splunk.opentelemetry.resource; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.mockito.Mockito.mockStatic; - -import io.opentelemetry.instrumentation.resources.ProcessResource; -import io.opentelemetry.sdk.resources.Resource; -import io.opentelemetry.semconv.incubating.ProcessIncubatingAttributes; -import java.util.List; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; - -class TruncateCommandLineResourceDetectorTest { - @Test - public void shouldDoNothingWhenNoNeedToTruncateResourceAttributes() { - try (MockedStatic mockedStatic = mockStatic(ProcessResource.class)) { - // given - List args = List.of("ABC"); - String commandLine = "RUN"; - Resource detectedResource = - Resource.builder() - .put(ProcessIncubatingAttributes.PROCESS_COMMAND_ARGS, args) - .put(ProcessIncubatingAttributes.PROCESS_COMMAND_LINE, commandLine) - .build(); - mockedStatic.when(ProcessResource::get).thenReturn(detectedResource); - - TruncateCommandLineResourceDetector provider = new TruncateCommandLineResourceDetector(); - - // when - Resource resource = provider.create(null); - - // then - assertThat(resource.getAttribute(ProcessIncubatingAttributes.PROCESS_COMMAND_ARGS)) - .isEqualTo(List.of("ABC")); - assertThat(resource.getAttribute(ProcessIncubatingAttributes.PROCESS_COMMAND_LINE)) - .isEqualTo("RUN"); - } - } - - @Test - public void shouldTruncateProcessCommandLine() { - try (MockedStatic mockedStatic = mockStatic(ProcessResource.class)) { - // given - List args = List.of("X".repeat(512)); - String commandLine = "Y".repeat(512); - Resource detectedResource = - Resource.builder() - .put(ProcessIncubatingAttributes.PROCESS_COMMAND_ARGS, args) - .put(ProcessIncubatingAttributes.PROCESS_COMMAND_LINE, commandLine) - .build(); - mockedStatic.when(ProcessResource::get).thenReturn(detectedResource); - - TruncateCommandLineResourceDetector provider = new TruncateCommandLineResourceDetector(); - - // when - Resource resource = provider.create(null); - - // then - // TODO: Seems like a small bug. It should be 252 + ... - List expectedArgs = List.of("X".repeat(248) + "..."); - assertThat(resource.getAttribute(ProcessIncubatingAttributes.PROCESS_COMMAND_ARGS)) - .isEqualTo(expectedArgs); - - String expectedCommandLine = "Y".repeat(252) + "..."; - assertThat(resource.getAttribute(ProcessIncubatingAttributes.PROCESS_COMMAND_LINE)) - .isEqualTo(expectedCommandLine); - } - } -} diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 7f9e68f9c..9a318b262 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -4,7 +4,7 @@ plugins { val otelVersion = "1.67.0" val otelAlphaVersion = otelVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1") -val otelInstrumentationVersion = "2.33.0" +val otelInstrumentationVersion = "3.0.0-SNAPSHOT" val otelInstrumentationAlphaVersion = otelInstrumentationVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1") val otelContribAlphaVersion = "1.61.0-alpha" diff --git a/instrumentation/glassfish/src/main/java/com/splunk/opentelemetry/instrumentation/glassfish/GlassfishAttributesInstrumentationModule.java b/instrumentation/glassfish/src/main/java/com/splunk/opentelemetry/instrumentation/glassfish/GlassfishAttributesInstrumentationModule.java index 5ac3e9511..8c09a4252 100644 --- a/instrumentation/glassfish/src/main/java/com/splunk/opentelemetry/instrumentation/glassfish/GlassfishAttributesInstrumentationModule.java +++ b/instrumentation/glassfish/src/main/java/com/splunk/opentelemetry/instrumentation/glassfish/GlassfishAttributesInstrumentationModule.java @@ -66,7 +66,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit() { WebengineHolder.trySetName(Version.getProductName()); WebengineHolder.trySetVersion(Version.getVersionNumber()); diff --git a/instrumentation/jdbc/build.gradle.kts b/instrumentation/jdbc/build.gradle.kts index 05418c97b..269c4fd9a 100644 --- a/instrumentation/jdbc/build.gradle.kts +++ b/instrumentation/jdbc/build.gradle.kts @@ -59,6 +59,7 @@ dependencies { tasks.withType().configureEach { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) + systemProperty("jdbcTestMode", "true") jvmArgs("-Dotel.instrumentation.splunk-jdbc.enabled=true") jvmArgs("-Dotel.service.name=test-service") } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java index 39bf0f153..c13e0b1c3 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java @@ -16,6 +16,7 @@ package com.splunk.opentelemetry.instrumentation.jdbc.mariadb; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; @@ -50,4 +51,16 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("com.splunk.opentelemetry.instrumentation"); } + + @Override + public List exposedClassNames() { + // MariaDbContextPropagator is used with CallDepth to skip instrumenting nested calls. + // This class is loaded in the insolated instrumentation class loaded we expose it to + // application class loader so that tests can temporarily disable instrumentation to read + // tracing state. + return Boolean.getBoolean("jdbcTestMode") + ? singletonList( + "com.splunk.opentelemetry.instrumentation.jdbc.mariadb.MariaDbContextPropagator") + : emptyList(); + } } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbStatementInstrumentation.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbStatementInstrumentation.java index bf570f261..aa9c0eff3 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbStatementInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbStatementInstrumentation.java @@ -59,7 +59,7 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class SetContextAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static CallDepth onEnter(@Advice.This Statement statement) throws Exception { CallDepth callDepth = CallDepth.forClass(MariaDbContextPropagator.class); if (callDepth.getAndIncrement() == 0) { @@ -69,7 +69,7 @@ public static CallDepth onEnter(@Advice.This Statement statement) throws Excepti return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit(@Advice.Enter CallDepth callDepth) { callDepth.decrementAndGet(); } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java index 7f5369c29..00b872640 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java @@ -16,6 +16,7 @@ package com.splunk.opentelemetry.instrumentation.jdbc.mysql; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; @@ -50,4 +51,16 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("com.splunk.opentelemetry.instrumentation"); } + + @Override + public List exposedClassNames() { + // MySqlContextPropagator is used with CallDepth to skip instrumenting nested calls. + // This class is loaded in the insolated instrumentation class loaded we expose it to + // application class loader so that tests can temporarily disable instrumentation to read + // tracing state. + return Boolean.getBoolean("jdbcTestMode") + ? singletonList( + "com.splunk.opentelemetry.instrumentation.jdbc.mysql.MySqlContextPropagator") + : emptyList(); + } } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlStatementInstrumentation.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlStatementInstrumentation.java index 24ceae302..2fb206e1c 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlStatementInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlStatementInstrumentation.java @@ -50,7 +50,7 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class SetContextAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static CallDepth onEnter(@Advice.This Statement statement) throws Exception { CallDepth callDepth = CallDepth.forClass(MySqlContextPropagator.class); if (callDepth.getAndIncrement() == 0) { @@ -60,7 +60,7 @@ public static CallDepth onEnter(@Advice.This Statement statement) throws Excepti return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit(@Advice.Enter CallDepth callDepth) { callDepth.decrementAndGet(); } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java index 095fb764f..3c0b8fbce 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java @@ -16,6 +16,7 @@ package com.splunk.opentelemetry.instrumentation.jdbc.oracle; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; @@ -50,4 +51,16 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("com.splunk.opentelemetry.instrumentation"); } + + @Override + public List exposedClassNames() { + // OracleContextPropagator is used with CallDepth to skip instrumenting nested calls. + // This class is loaded in the insolated instrumentation class loaded we expose it to + // application class loader so that tests can temporarily disable instrumentation to read + // tracing state. + return Boolean.getBoolean("jdbcTestMode") + ? singletonList( + "com.splunk.opentelemetry.instrumentation.jdbc.oracle.OracleContextPropagator") + : emptyList(); + } } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleStatementInstrumentation.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleStatementInstrumentation.java index 02f75c24b..eb85ef4c8 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleStatementInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleStatementInstrumentation.java @@ -51,7 +51,7 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class SetActionAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static CallDepth onEnter(@Advice.This Statement statement) throws Exception { CallDepth callDepth = CallDepth.forClass(OracleContextPropagator.class); if (callDepth.getAndIncrement() == 0) { @@ -61,7 +61,7 @@ public static CallDepth onEnter(@Advice.This Statement statement) throws Excepti return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit(@Advice.Enter CallDepth callDepth) { callDepth.decrementAndGet(); } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java index 63e89657c..faaf9c614 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java @@ -16,6 +16,7 @@ package com.splunk.opentelemetry.instrumentation.jdbc.postgresql; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; @@ -50,4 +51,16 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("com.splunk.opentelemetry.instrumentation"); } + + @Override + public List exposedClassNames() { + // PostgreSqlContextPropagator is used with CallDepth to skip instrumenting nested calls. + // This class is loaded in the insolated instrumentation class loaded we expose it to + // application class loader so that tests can temporarily disable instrumentation to read + // tracing state. + return Boolean.getBoolean("jdbcTestMode") + ? singletonList( + "com.splunk.opentelemetry.instrumentation.jdbc.postgresql.PostgreSqlContextPropagator") + : emptyList(); + } } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlStatementInstrumentation.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlStatementInstrumentation.java index ca25719ef..86934eeea 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlStatementInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlStatementInstrumentation.java @@ -49,7 +49,7 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class SetActionAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static CallDepth onEnter(@Advice.This Statement statement) throws Exception { CallDepth callDepth = CallDepth.forClass(PostgreSqlContextPropagator.class); if (callDepth.getAndIncrement() == 0) { @@ -59,7 +59,7 @@ public static CallDepth onEnter(@Advice.This Statement statement) throws Excepti return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit(@Advice.Enter CallDepth callDepth) { callDepth.decrementAndGet(); } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java index a64689caf..e6c33574e 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java @@ -16,6 +16,7 @@ package com.splunk.opentelemetry.instrumentation.jdbc.sqlserver; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; @@ -50,4 +51,16 @@ public List typeInstrumentations() { public boolean isHelperClass(String className) { return className.startsWith("com.splunk.opentelemetry.instrumentation"); } + + @Override + public List exposedClassNames() { + // SqlServerContextPropagator is used with CallDepth to skip instrumenting nested calls. + // This class is loaded in the insolated instrumentation class loaded we expose it to + // application class loader so that tests can temporarily disable instrumentation to read + // tracing state. + return Boolean.getBoolean("jdbcTestMode") + ? singletonList( + "com.splunk.opentelemetry.instrumentation.jdbc.sqlserver.SqlServerContextPropagator") + : emptyList(); + } } diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerStatementInstrumentation.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerStatementInstrumentation.java index 439e1319d..1727a6c7e 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerStatementInstrumentation.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerStatementInstrumentation.java @@ -51,7 +51,7 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class SetContextAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static CallDepth onEnter(@Advice.This Statement statement) throws Exception { CallDepth callDepth = CallDepth.forClass(SqlServerContextPropagator.class); if (callDepth.getAndIncrement() == 0) { @@ -61,7 +61,7 @@ public static CallDepth onEnter(@Advice.This Statement statement) throws Excepti return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit(@Advice.Enter CallDepth callDepth) { callDepth.decrementAndGet(); } diff --git a/instrumentation/jetty/src/main/java/com/splunk/opentelemetry/instrumentation/jetty/JettyAttributesInstrumentationModule.java b/instrumentation/jetty/src/main/java/com/splunk/opentelemetry/instrumentation/jetty/JettyAttributesInstrumentationModule.java index d23b0bdb2..1270afb01 100644 --- a/instrumentation/jetty/src/main/java/com/splunk/opentelemetry/instrumentation/jetty/JettyAttributesInstrumentationModule.java +++ b/instrumentation/jetty/src/main/java/com/splunk/opentelemetry/instrumentation/jetty/JettyAttributesInstrumentationModule.java @@ -67,7 +67,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter() { WebengineHolder.trySetVersion(Server.getVersion()); WebengineHolder.trySetName("jetty"); diff --git a/instrumentation/khttp/src/main/java/com/splunk/opentelemetry/instrumentation/khttp/KHttpInstrumentation.java b/instrumentation/khttp/src/main/java/com/splunk/opentelemetry/instrumentation/khttp/KHttpInstrumentation.java index a3e651f2b..3dd10222c 100644 --- a/instrumentation/khttp/src/main/java/com/splunk/opentelemetry/instrumentation/khttp/KHttpInstrumentation.java +++ b/instrumentation/khttp/src/main/java/com/splunk/opentelemetry/instrumentation/khttp/KHttpInstrumentation.java @@ -103,7 +103,7 @@ public Map getHeaders() { } @AssignReturned.ToArguments(@ToArgument(value = 2, index = 1)) - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static Object[] methodEnter( @Advice.Argument(0) String method, @Advice.Argument(1) String uri, @@ -116,7 +116,7 @@ public static Object[] methodEnter( return new Object[] {adviceScope, adviceScope.getHeaders()}; } - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static void methodExit( @Advice.Return Response response, @Advice.Thrown Throwable throwable, diff --git a/instrumentation/liberty/src/main/java/com/splunk/opentelemetry/instrumentation/liberty/webengine/LibertyAttributesInstrumentationModule.java b/instrumentation/liberty/src/main/java/com/splunk/opentelemetry/instrumentation/liberty/webengine/LibertyAttributesInstrumentationModule.java index 31981b9d4..40c954791 100644 --- a/instrumentation/liberty/src/main/java/com/splunk/opentelemetry/instrumentation/liberty/webengine/LibertyAttributesInstrumentationModule.java +++ b/instrumentation/liberty/src/main/java/com/splunk/opentelemetry/instrumentation/liberty/webengine/LibertyAttributesInstrumentationModule.java @@ -67,7 +67,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter() { String version = null; for (ProductInfo p : ProductInfo.getAllProductInfo().values()) { diff --git a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeAttributesExtractor.java b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeAttributesExtractor.java index 59c02f88f..d1cf9e9e7 100644 --- a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeAttributesExtractor.java +++ b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeAttributesExtractor.java @@ -20,9 +20,9 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.semconv.code.CodeAttributesExtractor; import java.util.Map; import java.util.function.BiConsumer; import javax.annotation.Nullable; diff --git a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentation.java b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentation.java index c37a621c1..90e9d07ea 100644 --- a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentation.java +++ b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentation.java @@ -119,7 +119,7 @@ public Object end( } } - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) @Nullable public static AdviceScope onEnter( @RuleId int ruleId, @@ -131,7 +131,7 @@ public static AdviceScope onEnter( } @Advice.AssignReturned.ToReturned - @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class, inline = false) public static Object stopSpan( @MethodReturnType Class methodReturnType, @Advice.Enter @Nullable AdviceScope adviceScope, diff --git a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeSpanNameExtractor.java b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeSpanNameExtractor.java index f49dc7213..1b793df59 100644 --- a/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeSpanNameExtractor.java +++ b/instrumentation/nocode/src/main/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeSpanNameExtractor.java @@ -17,9 +17,9 @@ package com.splunk.opentelemetry.instrumentation.nocode; import com.splunk.opentelemetry.javaagent.bootstrap.nocode.NocodeRules; -import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.semconv.code.CodeSpanNameExtractor; class NocodeSpanNameExtractor implements SpanNameExtractor { private final SpanNameExtractor defaultNamer; diff --git a/instrumentation/nocode/src/test/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentationTest.java b/instrumentation/nocode/src/test/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentationTest.java index 9c710acf8..e663dbbc5 100644 --- a/instrumentation/nocode/src/test/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentationTest.java +++ b/instrumentation/nocode/src/test/java/com/splunk/opentelemetry/instrumentation/nocode/NocodeInstrumentationTest.java @@ -66,7 +66,7 @@ void testRuleWithManyInvalidFields() { .hasKind(SpanKind.INTERNAL) .hasStatus(StatusData.unset()) .hasTotalAttributeCount( - 2))); // two code. attribute but nothing from the invalid rule + 1))); // one code attribute but nothing from the invalid rule } @Test diff --git a/instrumentation/tomcat/src/main/java/com/splunk/opentelemetry/instrumentation/tomcat/webengine/CatalinaInstrumentation.java b/instrumentation/tomcat/src/main/java/com/splunk/opentelemetry/instrumentation/tomcat/webengine/CatalinaInstrumentation.java index f1db1072f..dce7ddc4a 100644 --- a/instrumentation/tomcat/src/main/java/com/splunk/opentelemetry/instrumentation/tomcat/webengine/CatalinaInstrumentation.java +++ b/instrumentation/tomcat/src/main/java/com/splunk/opentelemetry/instrumentation/tomcat/webengine/CatalinaInstrumentation.java @@ -45,7 +45,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter() { WebengineHolder.trySetVersion(ServerInfo.getServerNumber()); WebengineHolder.trySetName("tomcat"); diff --git a/instrumentation/tomee/src/main/java/com/splunk/opentelemetry/instrumentation/tomee/TomeeAttributesInstrumentationModule.java b/instrumentation/tomee/src/main/java/com/splunk/opentelemetry/instrumentation/tomee/TomeeAttributesInstrumentationModule.java index 00b1391d9..30a83cd41 100644 --- a/instrumentation/tomee/src/main/java/com/splunk/opentelemetry/instrumentation/tomee/TomeeAttributesInstrumentationModule.java +++ b/instrumentation/tomee/src/main/java/com/splunk/opentelemetry/instrumentation/tomee/TomeeAttributesInstrumentationModule.java @@ -60,7 +60,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void onEnter() { String version = OpenEjbVersion.get().getVersion(); WebengineHolder.trySetVersion(version); diff --git a/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java b/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java index fab3fe73c..c9b5b0a7b 100644 --- a/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java +++ b/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java @@ -27,7 +27,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; +import io.opentelemetry.context.Context; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; @@ -84,8 +84,9 @@ public void transform(TypeTransformer typeTransformer) { } } + @SuppressWarnings("unused") private static class WebengineAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void start(@Advice.Argument(1) HttpServletRequest servletRequest) { WebLogicAttributeCollector.attachWebengineAttributes(servletRequest); } @@ -114,15 +115,15 @@ public void transform(TypeTransformer typeTransformer) { } } + @SuppressWarnings("unused") private static class ServletAdvice { - @Advice.OnMethodEnter(suppress = Throwable.class) + @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) public static void start( @Advice.Argument(value = 0, readOnly = false) HttpServletRequest request) { Object value = request.getAttribute("otel.webengine"); if (value instanceof Map) { - Span span = Java8BytecodeBridge.currentSpan(); - + Span span = Span.fromContextOrNull(Context.current()); if (span != null) { for (Map.Entry entry : ((Map) value).entrySet()) { if (entry.getValue() != null) { diff --git a/instrumentation/websphere/src/main/java/com/splunk/opentelemetry/instrumentation/websphere/webengine/WebSphereAttributesInstrumentationModule.java b/instrumentation/websphere/src/main/java/com/splunk/opentelemetry/instrumentation/websphere/webengine/WebSphereAttributesInstrumentationModule.java index 443e947bc..064818297 100644 --- a/instrumentation/websphere/src/main/java/com/splunk/opentelemetry/instrumentation/websphere/webengine/WebSphereAttributesInstrumentationModule.java +++ b/instrumentation/websphere/src/main/java/com/splunk/opentelemetry/instrumentation/websphere/webengine/WebSphereAttributesInstrumentationModule.java @@ -65,7 +65,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit() { WebengineHolder.trySetVersion(PlatformHelper.getPlatformVersion()); WebengineHolder.trySetName("websphere"); diff --git a/instrumentation/wildfly/src/main/java/com/splunk/opentelemetry/instrumentation/wildfly/WildFlyAttributesInstrumentationModule.java b/instrumentation/wildfly/src/main/java/com/splunk/opentelemetry/instrumentation/wildfly/WildFlyAttributesInstrumentationModule.java index a5a55f142..4b522e5dc 100644 --- a/instrumentation/wildfly/src/main/java/com/splunk/opentelemetry/instrumentation/wildfly/WildFlyAttributesInstrumentationModule.java +++ b/instrumentation/wildfly/src/main/java/com/splunk/opentelemetry/instrumentation/wildfly/WildFlyAttributesInstrumentationModule.java @@ -67,14 +67,14 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") public static class WebengineInitializedAdvice { - @Advice.OnMethodEnter + @Advice.OnMethodEnter(inline = false) public static CallDepth onEnter() { CallDepth callDepth = CallDepth.forClass(ProductConfig.class); callDepth.getAndIncrement(); return callDepth; } - @Advice.OnMethodExit(suppress = Throwable.class) + @Advice.OnMethodExit(suppress = Throwable.class, inline = false) public static void onExit( @Advice.Enter CallDepth callDepth, @Advice.FieldValue("productConfig") ProductConfig productConfig) { diff --git a/licenses/licenses.md b/licenses/licenses.md index 90cccfad4..088d1ff0e 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -1,7 +1,7 @@ # splunk-otel-javaagent ## Dependency License Report -_2026-10-26 08:23:08 EET_ +_2026-10-26 15:25:33 EET_ ## Apache License, Version 2.0 **1** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `5.5.1` @@ -88,7 +88,7 @@ _2026-10-26 08:23:08 EET_ > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**22** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom-alpha` **Version:** `2.33.0-alpha` +**22** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom-alpha` **Version:** `3.0.0-alpha-SNAPSHOT` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/version.gradle.kts b/version.gradle.kts index 17eef5a20..0b40f539e 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -1,5 +1,5 @@ // do NOT update that variable manually - it is managed by the pre/post release scripts -val distroVersion = "2.34.0-SNAPSHOT" +val distroVersion = "3.0.0-SNAPSHOT" allprojects { version = distroVersion From 43ca992247633a74f83777e4af97201d024f87a1 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 26 Oct 2026 16:46:17 +0200 Subject: [PATCH 3/6] correct snapshot url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2200e334..cdc15b54c 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ with: ## Snapshot builds -We publish [snapshot builds](https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/com/splunk/splunk-otel-javaagent/2.34.0-SNAPSHOT/) +We publish [snapshot builds](https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/com/splunk/splunk-otel-javaagent/3.0.0-SNAPSHOT/) with every merge to the `main` branch. Snapshots are primarily intended to test new functionality and are not recommended for production use. From ae7e0c606df7ccc293c650b0b36c5c666a72d7dd Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 26 Oct 2026 17:20:48 +0200 Subject: [PATCH 4/6] correct controller telemetry flag --- .../com/splunk/opentelemetry/RulesBasedSamplerSmokeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smoke-tests/src/test/java/com/splunk/opentelemetry/RulesBasedSamplerSmokeTest.java b/smoke-tests/src/test/java/com/splunk/opentelemetry/RulesBasedSamplerSmokeTest.java index bd750b3e7..16cdcb186 100644 --- a/smoke-tests/src/test/java/com/splunk/opentelemetry/RulesBasedSamplerSmokeTest.java +++ b/smoke-tests/src/test/java/com/splunk/opentelemetry/RulesBasedSamplerSmokeTest.java @@ -35,7 +35,7 @@ protected Map getExtraEnv() { "rules", "OTEL_TRACES_SAMPLER_ARG", "drop=/front;fallback=parentbased_always_on", - "OTEL_INSTRUMENTATION_COMMON_EXPERIMENTAL_CONTROLLER_TELEMETRY_ENABLED", + "OTEL_INSTRUMENTATION_COMMON_CONTROLLER_TELEMETRY_ENABLED", "true"); } From 443a1332c4bb505fb1c0dbf40c732cd5420fd6d8 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 26 Oct 2026 20:11:52 +0200 Subject: [PATCH 5/6] fix tests --- .../webengine/WebLogicAttributesInstrumentationModule.java | 3 +-- .../test/java/com/splunk/opentelemetry/OtlpLogsSmokeTest.java | 2 +- .../java/com/splunk/opentelemetry/SpringBootSmokeTest.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java b/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java index c9b5b0a7b..e5e63614c 100644 --- a/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java +++ b/instrumentation/weblogic/src/main/java/com/splunk/opentelemetry/instrumentation/weblogic/webengine/WebLogicAttributesInstrumentationModule.java @@ -118,8 +118,7 @@ public void transform(TypeTransformer typeTransformer) { @SuppressWarnings("unused") private static class ServletAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, inline = false) - public static void start( - @Advice.Argument(value = 0, readOnly = false) HttpServletRequest request) { + public static void start(@Advice.Argument(0) HttpServletRequest request) { Object value = request.getAttribute("otel.webengine"); if (value instanceof Map) { diff --git a/smoke-tests/src/test/java/com/splunk/opentelemetry/OtlpLogsSmokeTest.java b/smoke-tests/src/test/java/com/splunk/opentelemetry/OtlpLogsSmokeTest.java index 6386ac03c..5e3f3b995 100644 --- a/smoke-tests/src/test/java/com/splunk/opentelemetry/OtlpLogsSmokeTest.java +++ b/smoke-tests/src/test/java/com/splunk/opentelemetry/OtlpLogsSmokeTest.java @@ -40,7 +40,7 @@ protected Map getExtraEnv() { return Map.of( "OTEL_LOGS_EXPORTER", "otlp", - "OTEL_INSTRUMENTATION_COMMON_EXPERIMENTAL_CONTROLLER_TELEMETRY_ENABLED", + "OTEL_INSTRUMENTATION_COMMON_CONTROLLER_TELEMETRY_ENABLED", "true"); } diff --git a/smoke-tests/src/test/java/com/splunk/opentelemetry/SpringBootSmokeTest.java b/smoke-tests/src/test/java/com/splunk/opentelemetry/SpringBootSmokeTest.java index d9b276cbe..5e5627357 100644 --- a/smoke-tests/src/test/java/com/splunk/opentelemetry/SpringBootSmokeTest.java +++ b/smoke-tests/src/test/java/com/splunk/opentelemetry/SpringBootSmokeTest.java @@ -45,7 +45,7 @@ protected Map getExtraEnv() { return Map.of( "SPRING_APPLICATION_NAME", "smoke-test-app", - "OTEL_INSTRUMENTATION_COMMON_EXPERIMENTAL_CONTROLLER_TELEMETRY_ENABLED", + "OTEL_INSTRUMENTATION_COMMON_CONTROLLER_TELEMETRY_ENABLED", "true", "OTEL_INSTRUMENTATION_JVM_METRICS_SPLUNK_ENABLED", "true"); From 077aae13b890eb550df06d8f2a6f0af956a05370 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 26 Oct 2026 20:23:30 +0200 Subject: [PATCH 6/6] fix comment --- .../jdbc/mariadb/MariaDbInstrumentationModule.java | 9 +++++---- .../jdbc/mysql/MySqlInstrumentationModule.java | 9 +++++---- .../jdbc/oracle/OracleInstrumentationModule.java | 9 +++++---- .../jdbc/postgresql/PostgreSqlInstrumentationModule.java | 9 +++++---- .../jdbc/sqlserver/SqlServerInstrumentationModule.java | 9 +++++---- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java index c13e0b1c3..2935d27d3 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mariadb/MariaDbInstrumentationModule.java @@ -54,10 +54,11 @@ public boolean isHelperClass(String className) { @Override public List exposedClassNames() { - // MariaDbContextPropagator is used with CallDepth to skip instrumenting nested calls. - // This class is loaded in the insolated instrumentation class loaded we expose it to - // application class loader so that tests can temporarily disable instrumentation to read - // tracing state. + // Statement instrumentation uses MariaDbContextPropagator class with CallDepth to skip + // instrumenting the nested statement that propagates context to db. This class is loaded in the + // isolated instrumentation class loader. We expose it to application class loader so that tests + // can temporarily disable instrumentation with CallDepth to read the curent tracing context + // from the db. return Boolean.getBoolean("jdbcTestMode") ? singletonList( "com.splunk.opentelemetry.instrumentation.jdbc.mariadb.MariaDbContextPropagator") diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java index 00b872640..4f7ae6d83 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/mysql/MySqlInstrumentationModule.java @@ -54,10 +54,11 @@ public boolean isHelperClass(String className) { @Override public List exposedClassNames() { - // MySqlContextPropagator is used with CallDepth to skip instrumenting nested calls. - // This class is loaded in the insolated instrumentation class loaded we expose it to - // application class loader so that tests can temporarily disable instrumentation to read - // tracing state. + // Statement instrumentation uses MySqlContextPropagator class with CallDepth to skip + // instrumenting the nested statement that propagates context to db. This class is loaded in the + // isolated instrumentation class loader. We expose it to application class loader so that tests + // can temporarily disable instrumentation with CallDepth to read the curent tracing context + // from the db. return Boolean.getBoolean("jdbcTestMode") ? singletonList( "com.splunk.opentelemetry.instrumentation.jdbc.mysql.MySqlContextPropagator") diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java index 3c0b8fbce..85e2b634f 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/oracle/OracleInstrumentationModule.java @@ -54,10 +54,11 @@ public boolean isHelperClass(String className) { @Override public List exposedClassNames() { - // OracleContextPropagator is used with CallDepth to skip instrumenting nested calls. - // This class is loaded in the insolated instrumentation class loaded we expose it to - // application class loader so that tests can temporarily disable instrumentation to read - // tracing state. + // Statement instrumentation uses OracleContextPropagator class with CallDepth to skip + // instrumenting the nested statement that propagates context to db. This class is loaded in the + // isolated instrumentation class loader. We expose it to application class loader so that tests + // can temporarily disable instrumentation with CallDepth to read the curent tracing context + // from the db. return Boolean.getBoolean("jdbcTestMode") ? singletonList( "com.splunk.opentelemetry.instrumentation.jdbc.oracle.OracleContextPropagator") diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java index faaf9c614..35ec76d65 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/postgresql/PostgreSqlInstrumentationModule.java @@ -54,10 +54,11 @@ public boolean isHelperClass(String className) { @Override public List exposedClassNames() { - // PostgreSqlContextPropagator is used with CallDepth to skip instrumenting nested calls. - // This class is loaded in the insolated instrumentation class loaded we expose it to - // application class loader so that tests can temporarily disable instrumentation to read - // tracing state. + // Statement instrumentation uses PostgreSqlContextPropagator class with CallDepth to skip + // instrumenting the nested statement that propagates context to db. This class is loaded in the + // isolated instrumentation class loader. We expose it to application class loader so that tests + // can temporarily disable instrumentation with CallDepth to read the curent tracing context + // from the db. return Boolean.getBoolean("jdbcTestMode") ? singletonList( "com.splunk.opentelemetry.instrumentation.jdbc.postgresql.PostgreSqlContextPropagator") diff --git a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java index e6c33574e..984e0fa06 100644 --- a/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java +++ b/instrumentation/jdbc/src/main/java/com/splunk/opentelemetry/instrumentation/jdbc/sqlserver/SqlServerInstrumentationModule.java @@ -54,10 +54,11 @@ public boolean isHelperClass(String className) { @Override public List exposedClassNames() { - // SqlServerContextPropagator is used with CallDepth to skip instrumenting nested calls. - // This class is loaded in the insolated instrumentation class loaded we expose it to - // application class loader so that tests can temporarily disable instrumentation to read - // tracing state. + // Statement instrumentation uses SqlServerContextPropagator class with CallDepth to skip + // instrumenting the nested statement that propagates context to db. This class is loaded in the + // isolated instrumentation class loader. We expose it to application class loader so that tests + // can temporarily disable instrumentation with CallDepth to read the curent tracing context + // from the db. return Boolean.getBoolean("jdbcTestMode") ? singletonList( "com.splunk.opentelemetry.instrumentation.jdbc.sqlserver.SqlServerContextPropagator")