Skip to content

Commit 69843c2

Browse files
traskotelbot[bot]
andauthored
Bring in newer upstream Couchbase instrumentation to fix span kind (#14995)
Co-authored-by: otelbot <[email protected]>
1 parent 2c9de9d commit 69843c2

File tree

19 files changed

+334
-8
lines changed

19 files changed

+334
-8
lines changed

.fossa.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,9 @@ targets:
427427
- type: gradle
428428
path: ./
429429
target: ':instrumentation:couchbase:couchbase-3.2:javaagent'
430+
- type: gradle
431+
path: ./
432+
target: ':instrumentation:couchbase:couchbase-3.4:javaagent'
430433
- type: gradle
431434
path: ./
432435
target: ':instrumentation:dropwizard:dropwizard-metrics-4.0:javaagent'

instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ dependencies {
2626

2727
testImplementation(project(":instrumentation:couchbase:couchbase-common:testing"))
2828

29+
// TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent"))
30+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent"))
31+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent"))
32+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent"))
33+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent"))
34+
2935
latestDepTestLibrary("org.springframework.data:spring-data-couchbase:2.+") // see couchbase-2.6 module
3036
latestDepTestLibrary("com.couchbase.client:java-client:2.5.+") // see couchbase-2.6 module
3137
}

instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@ dependencies {
2323

2424
library("com.couchbase.client:java-client:2.6.0")
2525

26-
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent"))
2726
testImplementation(project(":instrumentation:couchbase:couchbase-common:testing"))
2827

2928
testLibrary("org.springframework.data:spring-data-couchbase:3.1.0.RELEASE")
3029
testLibrary("com.couchbase.client:encryption:1.0.0")
3130

31+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent"))
32+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent"))
33+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent"))
34+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent"))
35+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent"))
36+
3237
latestDepTestLibrary("org.springframework.data:spring-data-couchbase:3.1.+") // see couchbase-3.1 module
3338
latestDepTestLibrary("com.couchbase.client:java-client:2.+") // see couchbase-3.1 module
3439
}

instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ dependencies {
3333

3434
library("com.couchbase.client:java-client:3.1.6")
3535

36+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent"))
37+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent"))
38+
// TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent"))
39+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent"))
40+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent"))
3641
testImplementation("org.testcontainers:testcontainers-couchbase")
3742

3843
latestDepTestLibrary("com.couchbase.client:java-client:3.1.+") // see couchbase-3.2 module

instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.javaagent.instrumentation.couchbase.v3_1_6;
77

88
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
9+
import static net.bytebuddy.matcher.ElementMatchers.not;
910

1011
import com.google.auto.service.AutoService;
1112
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
@@ -27,7 +28,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
2728
// New class introduced in 3.1, the minimum version we support.
2829
// NB: Couchbase does not provide any API guarantees on their core IO artifact so reconsider
2930
// instrumenting it instead of each individual JVM artifact if this becomes unmaintainable.
30-
return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers");
31+
return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers")
32+
// added in 3.2
33+
.and(not(hasClassesNamed("com.couchbase.client.core.cnc.RequestSpan$StatusCode")));
3134
}
3235

3336
@Override

instrumentation/couchbase/couchbase-3.1.6/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseClient316Test.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.javaagent.instrumentation.couchbase.v3_1_6;
77

8+
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
9+
810
import com.couchbase.client.core.env.TimeoutConfig;
911
import com.couchbase.client.core.error.DocumentNotFoundException;
1012
import com.couchbase.client.java.Bucket;
@@ -14,6 +16,7 @@
1416
import com.couchbase.client.java.env.ClusterEnvironment;
1517
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1618
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
19+
import io.opentelemetry.sdk.trace.data.StatusData;
1720
import java.time.Duration;
1821
import org.junit.jupiter.api.AfterAll;
1922
import org.junit.jupiter.api.BeforeAll;
@@ -86,6 +89,12 @@ void testEmitsSpans() {
8689
testing.waitAndAssertTracesWithoutScopeVersionVerification(
8790
trace ->
8891
trace.hasSpansSatisfyingExactly(
89-
span -> span.hasName("get"), span -> span.hasName("dispatch_to_server")));
92+
span -> {
93+
span.hasKind(INTERNAL) // later version of couchbase gives correct behavior
94+
.hasName("get")
95+
.hasStatus(
96+
StatusData.unset()); // later version of couchbase gives correct behavior
97+
},
98+
span -> span.hasName("dispatch_to_server")));
9099
}
91100
}

instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ dependencies {
3434
// 3.1.4 (instead of 3.1.0) needed for test stability and for compatibility with server versions that run on M1 processors
3535
library("com.couchbase.client:java-client:3.1.4")
3636

37+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent"))
38+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent"))
39+
// TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent"))
40+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.2:javaagent"))
41+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent"))
3742
testImplementation("org.testcontainers:testcontainers-couchbase")
3843

3944
latestDepTestLibrary("com.couchbase.client:java-client:3.1.5") // see couchbase-3.1.6 module

instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.javaagent.instrumentation.couchbase.v3_1;
77

88
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
9+
import static net.bytebuddy.matcher.ElementMatchers.not;
910

1011
import com.google.auto.service.AutoService;
1112
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
@@ -27,7 +28,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
2728
// New class introduced in 3.1, the minimum version we support.
2829
// NB: Couchbase does not provide any API guarantees on their core IO artifact so reconsider
2930
// instrumenting it instead of each individual JVM artifact if this becomes unmaintainable.
30-
return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers");
31+
return hasClassesNamed("com.couchbase.client.core.cnc.TracingIdentifiers")
32+
// added in 3.2
33+
.and(not(hasClassesNamed("com.couchbase.client.core.cnc.RequestSpan$StatusCode")));
3134
}
3235

3336
@Override

instrumentation/couchbase/couchbase-3.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseClient31Test.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package io.opentelemetry.javaagent.instrumentation.couchbase.v3_1;
77

8+
import static io.opentelemetry.api.trace.SpanKind.INTERNAL;
9+
810
import com.couchbase.client.core.env.TimeoutConfig;
911
import com.couchbase.client.core.error.DocumentNotFoundException;
1012
import com.couchbase.client.java.Bucket;
@@ -14,6 +16,7 @@
1416
import com.couchbase.client.java.env.ClusterEnvironment;
1517
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
1618
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
19+
import io.opentelemetry.sdk.trace.data.StatusData;
1720
import java.time.Duration;
1821
import org.junit.jupiter.api.AfterAll;
1922
import org.junit.jupiter.api.BeforeAll;
@@ -86,6 +89,12 @@ void testEmitsSpans() {
8689
testing.waitAndAssertTracesWithoutScopeVersionVerification(
8790
trace ->
8891
trace.hasSpansSatisfyingExactly(
89-
span -> span.hasName("get"), span -> span.hasName("dispatch_to_server")));
92+
span -> {
93+
span.hasKind(INTERNAL) // later version of couchbase gives correct behavior
94+
.hasName("get")
95+
.hasStatus(
96+
StatusData.unset()); // later version of couchbase gives correct behavior
97+
},
98+
span -> span.hasName("dispatch_to_server")));
9099
}
91100
}

instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ muzzle {
66
pass {
77
group.set("com.couchbase.client")
88
module.set("java-client")
9-
versions.set("[3.2.0,)")
9+
versions.set("[3.2.0,3.4.0)")
1010
// these versions were released as ".bundle" instead of ".jar"
1111
skip("2.7.5", "2.7.8")
1212
assertInverse.set(true)
@@ -34,6 +34,14 @@ dependencies {
3434
library("com.couchbase.client:java-client:3.2.0")
3535

3636
testImplementation("org.testcontainers:testcontainers-couchbase")
37+
38+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.0:javaagent"))
39+
testInstrumentation(project(":instrumentation:couchbase:couchbase-2.6:javaagent"))
40+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1:javaagent"))
41+
// TODO testInstrumentation(project(":instrumentation:couchbase:couchbase-3.1.6:javaagent"))
42+
testInstrumentation(project(":instrumentation:couchbase:couchbase-3.4:javaagent"))
43+
44+
latestDepTestLibrary("com.couchbase.client:java-client:3.3.+") // see couchbase-3.4 module
3745
}
3846

3947
tasks {

0 commit comments

Comments
 (0)