From 415d48e22cb8d939049aadfefc5f80fa22d81c5d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Jun 2026 18:56:47 -0700 Subject: [PATCH] Fix Couchbase stable DB span names --- .../v2_0/CouchbaseSpanNameExtractor.java | 4 ++- .../AbstractCouchbaseAsyncClientTest.java | 15 ++++++-- .../AbstractCouchbaseClientTest.java | 10 ++++-- ...AbstractCouchbaseSpringRepositoryTest.java | 36 +++++++++++++++---- .../AbstractCouchbaseSpringTemplateTest.java | 26 +++++++++++--- 5 files changed, 73 insertions(+), 18 deletions(-) diff --git a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSpanNameExtractor.java b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSpanNameExtractor.java index 22d3d6c54810..4d036a7a41ea 100644 --- a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSpanNameExtractor.java +++ b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSpanNameExtractor.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; + import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.javaagent.instrumentation.couchbase.common.v2_0.CouchbaseRequestInfo; @@ -17,7 +19,7 @@ class CouchbaseSpanNameExtractor implements SpanNameExtractor - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketSettings.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( @@ -230,7 +233,10 @@ void upsertAndGet(BucketSettings bucketSettings) { equalTo(maybeStable(DB_SYSTEM), COUCHBASE), equalTo(maybeStable(DB_OPERATION), "Cluster.openBucket")), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketSettings.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( @@ -245,7 +251,10 @@ void upsertAndGet(BucketSettings bucketSettings) { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.get") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.get " + bucketSettings.name() + : "Bucket.get") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( diff --git a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/AbstractCouchbaseClientTest.java b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/AbstractCouchbaseClientTest.java index 5d2c9b8d37b3..53ea2c38c9dd 100644 --- a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/AbstractCouchbaseClientTest.java +++ b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/AbstractCouchbaseClientTest.java @@ -152,7 +152,10 @@ void upsertAndGet(BucketSettings bucketSettings) { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketSettings.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -167,7 +170,10 @@ void upsertAndGet(BucketSettings bucketSettings) { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.get") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.get " + bucketSettings.name() + : "Bucket.get") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( diff --git a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringRepositoryTest.java b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringRepositoryTest.java index d34345a9d14f..fb50a4a92137 100644 --- a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringRepositoryTest.java +++ b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringRepositoryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.couchbase.springdata; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -125,7 +126,10 @@ void save() { trace -> trace.hasSpansSatisfyingExactly( span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketCouchbase.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasNoParent() .hasAttributesSatisfyingExactly( @@ -160,7 +164,10 @@ void saveAndRetrieve() { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketCouchbase.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -175,7 +182,10 @@ void saveAndRetrieve() { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.get") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.get " + bucketCouchbase.name() + : "Bucket.get") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -208,7 +218,10 @@ void saveAndUpdate() { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketCouchbase.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -223,7 +236,10 @@ void saveAndUpdate() { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketCouchbase.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -258,7 +274,10 @@ void saveAndDelete() { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + bucketCouchbase.name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -273,7 +292,10 @@ void saveAndDelete() { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.remove") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.remove " + bucketCouchbase.name() + : "Bucket.remove") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( diff --git a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringTemplateTest.java b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringTemplateTest.java index 299712ad5758..a66c76096695 100644 --- a/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringTemplateTest.java +++ b/instrumentation/couchbase/couchbase-common/testing/src/main/java/io/opentelemetry/instrumentation/couchbase/springdata/AbstractCouchbaseSpringTemplateTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.couchbase.springdata; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -106,7 +107,10 @@ void write(CouchbaseTemplate template) { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + template.getCouchbaseBucket().name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -121,7 +125,10 @@ void write(CouchbaseTemplate template) { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.get") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.get " + template.getCouchbaseBucket().name() + : "Bucket.get") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -153,7 +160,10 @@ void remove(CouchbaseTemplate template) { trace.hasSpansSatisfyingExactly( span -> span.hasName("someTrace").hasKind(SpanKind.INTERNAL).hasNoParent(), span -> - span.hasName("Bucket.upsert") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.upsert " + template.getCouchbaseBucket().name() + : "Bucket.upsert") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -168,7 +178,10 @@ void remove(CouchbaseTemplate template) { satisfies( stringKey("couchbase.operation_id"), experimentalAttribute())), span -> - span.hasName("Bucket.remove") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.remove " + template.getCouchbaseBucket().name() + : "Bucket.remove") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( @@ -192,7 +205,10 @@ void remove(CouchbaseTemplate template) { trace -> trace.hasSpansSatisfyingExactly( span -> - span.hasName("Bucket.get") + span.hasName( + emitStableDatabaseSemconv() + ? "Bucket.get " + template.getCouchbaseBucket().name() + : "Bucket.get") .hasKind(SpanKind.CLIENT) .hasNoParent() .hasAttributesSatisfyingExactly(