From 3f5ba1330e9bc63e67eb6962a4d3d0e71ba211cd Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 21 Oct 2025 11:45:51 -0700 Subject: [PATCH] Address Couchbase instrumentation TODOs --- .../couchbase/couchbase-2.0/javaagent/build.gradle.kts | 2 +- .../couchbase/v2_0/CouchbaseInstrumentationModule.java | 8 ++++++++ .../couchbase/v2_6/CouchbaseInstrumentationModule.java | 8 ++++++++ .../couchbase/couchbase-3.1.6/javaagent/build.gradle.kts | 2 +- .../couchbase/v3_1_6/CouchbaseInstrumentationModule.java | 8 +++----- .../couchbase/couchbase-3.1/javaagent/build.gradle.kts | 2 +- .../couchbase/v3_1/CouchbaseInstrumentationModule.java | 8 +++----- .../couchbase/couchbase-3.2/javaagent/build.gradle.kts | 2 +- .../couchbase/v3_2/CouchbaseInstrumentationModule.java | 4 ++-- .../couchbase/couchbase-3.4/javaagent/build.gradle.kts | 2 +- .../couchbase/v3_4/CouchbaseInstrumentationModule.java | 2 +- 11 files changed, 30 insertions(+), 18 deletions(-) diff --git a/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts index 20920c2c53e0..5dde6084b951 100644 --- a/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts @@ -26,7 +26,7 @@ dependencies { testImplementation(project(":instrumentation:couchbase:couchbase-common:testing")) - // TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) + testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent")) diff --git a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseInstrumentationModule.java index 1bc0e582bca5..8c42a82f0711 100644 --- a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseInstrumentationModule.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -13,6 +14,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import java.util.List; +import net.bytebuddy.matcher.ElementMatcher; @AutoService(InstrumentationModule.class) public class CouchbaseInstrumentationModule extends InstrumentationModule @@ -46,4 +48,10 @@ public List injectedClassNames() { public boolean isIndyReady() { return true; } + + @Override + public ElementMatcher.Junction classLoaderMatcher() { + // removed in 3.x + return hasClassesNamed("com.couchbase.client.java.CouchbaseAsyncBucket"); + } } diff --git a/instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseInstrumentationModule.java index f7c6ad268c73..a9d40b5e7d06 100644 --- a/instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseInstrumentationModule.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.couchbase.v2_6; +import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed; import static java.util.Arrays.asList; import com.google.auto.service.AutoService; @@ -12,6 +13,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import java.util.List; +import net.bytebuddy.matcher.ElementMatcher; @AutoService(InstrumentationModule.class) public class CouchbaseInstrumentationModule extends InstrumentationModule @@ -21,6 +23,12 @@ public CouchbaseInstrumentationModule() { super("couchbase", "couchbase-2.6"); } + @Override + public ElementMatcher.Junction classLoaderMatcher() { + // introduced in java-client 2.6, removed in 3.x + return hasClassesNamed("com.couchbase.client.java.auth.CertAuthenticator"); + } + @Override public List typeInstrumentations() { return asList(new CouchbaseCoreInstrumentation(), new CouchbaseNetworkInstrumentation()); diff --git a/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts index 9f547d808573..458b5caf3462 100644 --- a/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts @@ -35,7 +35,7 @@ dependencies { testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) - // TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent")) + testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent")) testImplementation("org.testcontainers:testcontainers-couchbase") diff --git a/instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java index 5beece24dd56..a8cafea70aed 100644 --- a/instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java @@ -25,11 +25,9 @@ public CouchbaseInstrumentationModule() { @Override public ElementMatcher.Junction classLoaderMatcher() { - // New class introduced in 3.1, the minimum version we support. - // NB: Couchbase does not provide any API guarantees on their core IO artifact so reconsider - // instrumenting it instead of each individual JVM artifact if this becomes unmaintainable. - return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers") - // added in 3.2 + // introduced in java-client 3.1.6 (core-io 2.1.6) + return hasClassesNamed("com.couchbase.client.core.endpoint.EventingEndpoint") + // introduced in java-client 3.2.0 (core-io 2.2.0) .and(not(hasClassesNamed("com.couchbase.client.core.cnc.RequestSpan$StatusCode"))); } diff --git a/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts index ffdb8f5b46fc..dd086aa85041 100644 --- a/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) - // TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) + testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent")) testImplementation("org.testcontainers:testcontainers-couchbase") diff --git a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java index 985c815a3366..62b6a26b883d 100644 --- a/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java @@ -25,12 +25,10 @@ public CouchbaseInstrumentationModule() { @Override public ElementMatcher.Junction classLoaderMatcher() { - // New class introduced in 3.1, the minimum version we support. - // NB: Couchbase does not provide any API guarantees on their core IO artifact so reconsider - // instrumenting it instead of each individual JVM artifact if this becomes unmaintainable. + // introduced in java-client 3.1.0 (core-io 2.1.0) return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers") - // added in 3.2 - .and(not(hasClassesNamed("com.couchbase.client.core.cnc.RequestSpan$StatusCode"))); + // introduced in java-client 3.1.6 (core-io 2.1.6) + .and(not(hasClassesNamed("com.couchbase.client.core.endpoint.EventingEndpoint"))); } @Override diff --git a/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts index db9c9b18b888..4939ac16dfe9 100644 --- a/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent")) - // TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) + testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent")) latestDepTestLibrary("com.couchbase.client:java-client:3.3.+") // see couchbase-3.4 module diff --git a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseInstrumentationModule.java index 586db8572396..2d0ef86a82cc 100644 --- a/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseInstrumentationModule.java @@ -25,9 +25,9 @@ public CouchbaseInstrumentationModule() { @Override public ElementMatcher.Junction classLoaderMatcher() { - // New class introduced in 3.2. - // CoreTransactionRequest was introduced in 3.4.0. + // introduced in java-client 3.2.0 (core-io 2.2.0) return hasClassesNamed("com.couchbase.client.core.cnc.RequestSpan$StatusCode") + // introduced in java-client 3.4.0 (core-io 2.4.0) .and( not( hasClassesNamed( diff --git a/instrumentation/couchbase/couchbase-3.4/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.4/javaagent/build.gradle.kts index ce7bb6e7196f..0661fa2cb0b5 100644 --- a/instrumentation/couchbase/couchbase-3.4/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.4/javaagent/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent")) - // TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) + testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent")) testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent")) } diff --git a/instrumentation/couchbase/couchbase-3.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_4/CouchbaseInstrumentationModule.java b/instrumentation/couchbase/couchbase-3.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_4/CouchbaseInstrumentationModule.java index a249af077e66..e6ece8646e96 100644 --- a/instrumentation/couchbase/couchbase-3.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_4/CouchbaseInstrumentationModule.java +++ b/instrumentation/couchbase/couchbase-3.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_4/CouchbaseInstrumentationModule.java @@ -24,7 +24,7 @@ public CouchbaseInstrumentationModule() { @Override public ElementMatcher.Junction classLoaderMatcher() { - // CoreTransactionRequest was introduced in 3.4.0 with integrated transactions support. + // introduced in java-client 3.4.0 (core-io 2.4.0) return hasClassesNamed( "com.couchbase.client.core.transaction.components.CoreTransactionRequest"); }