Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 18, 2026

  • Cherry-pick PR Add support for db.query.summary in SqlClientAttributesExtractor #15896 changes
  • Update CassandraSqlAttributesGetter for version 3.0 to implement ExtractQuerySummaryMarker
  • Update CassandraSqlAttributesGetter for version 4.0 to implement ExtractQuerySummaryMarker
  • Update CassandraSqlAttributesGetter for version 4.4 to implement ExtractQuerySummaryMarker
  • Update tests for Cassandra 3.0 to handle new db.query.summary attribute
  • Update tests for Cassandra 4.0 to handle new db.query.summary attribute
  • Update tests for Cassandra 4.4 to handle new db.query.summary attribute
  • Simplify metrics tests to use DB_QUERY_SUMMARY directly (assertDurationMetric has internal check)
  • Apply spotless formatting
  • Run tests for all Cassandra versions to verify changes
  • Code review completed
Original prompt

Implementation Guide: Adding db.query.summary Support to Cassandra Instrumentations

Quick Start

This guide shows how to add db.query.summary support to Cassandra instrumentations (versions 3.0, 4.0, and 4.4).

Prerequisites

CRITICAL: You must cherry-pick changes from PR #15896. This PR adds the SqlStatementInfo.getQuerySummary() method, the ExtractQuerySummaryMarker interface, and span name extraction for SqlClientAttributesGetter.

git fetch origin pull/15896/head
git cherry-pick FETCH_HEAD

Implementation Steps

1. Update CassandraSqlAttributesGetter to additionally implement the marker interface ExtractQuerySummaryMarker

2. Update Tests

Update test assertions to account for the new behavior brought by the marker interface under the stable semconv flag.

Important: make minimal changes, do not make any structural changes.

Where needed, update

  • hasSpanName(...)
  • equalTo(maybeStable(DB_OPERATION), ...) to equalTo(maybeStable(DB_OPERATION), emitStableDatabaseSemconv() ? null : ...)
  • equalTo(maybeStable(DB_CASSANDRA_TABLE), ...) to equalTo(maybeStable(DB_CASSANDRA_TABLE), emitStableDatabaseSemconv() ? null : ...)

Where needed, add
equalTo(DB_QUERY_SUMMARY, emitStableDatabaseSemconv() ? ... : null)
(immediately after DB_STATEMENT assertion).

Make other similar changes to test assertions if needed to make tests pass.

Always static import emitStableDatabaseSemconv and DB_QUERY_SUMMARY.

Verification

Run tests for each Cassandra version:

./gradlew :instrumentation:cassandra:cassandra-<version>:javaagent:test
./gradlew :instrumentation:cassandra:cassandra-<version>:javaagent:testStableSemconv

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Add db.query.summary support to Cassandra instrumentations Add db.query.summary support to Cassandra instrumentations Jan 19, 2026
Copilot AI requested a review from trask January 19, 2026 00:21
@trask
Copy link
Member

trask commented Jan 19, 2026

@copilot fix tests

./gradlew :instrumentation:cassandra:cassandra-3.0:javaagent:test :instrumentation:cassandra:cassandra-3.0:javaagent:testStableSemconv :instrumentation:cassandra:cassandra-4.0:javaagent:test :instrumentation:cassandra:cassandra-4.0:javaagent:testStableSemconv :instrumentation:cassandra:cassandra-4.4:javaagent:test :instrumentation:cassandra:cassandra-4.4:javaagent:testStableSemconv :instrumentation:cassandra:cassandra-4.4:library:test :instrumentation:cassandra:cassandra-4.4:library:testStableSemconv

Copy link
Contributor Author

Copilot AI commented Jan 19, 2026

@copilot fix tests

...

Fixed in cddb2d0. The issue was that when ExtractQuerySummaryMarker is implemented, the metrics include db.query.summary instead of db.operation.name in stable semconv mode. Updated the metrics tests to expect the correct attribute.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • develocity.opentelemetry.io
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

"io.opentelemetry.cassandra-3.0",
DB_SYSTEM_NAME,
DB_OPERATION_NAME,
emitStableDatabaseSemconv() ? DB_QUERY_SUMMARY : DB_OPERATION_NAME,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot assertDurationMetric method already has an internal check and only applies to emitStableDatabaseSemconv, so this can be simplified to just DB_QUERY_SUMMARY

make this change in instrumentation/cassandra/cassandra-4-common/testing/src/main/java/io/opentelemetry/cassandra/v4/common/AbstractCassandraTest.java too

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simplified in c201605. Removed the conditional and unused DB_OPERATION_NAME imports from both files since assertDurationMetric only runs when emitStableDatabaseSemconv() is true.

Copy link
Contributor Author

Copilot AI commented Jan 19, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • develocity.opentelemetry.io
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI requested a review from trask January 19, 2026 02:12
@trask
Copy link
Member

trask commented Jan 19, 2026

@copilot run ./gradlew spotlessApply

Copy link
Contributor Author

Copilot AI commented Jan 19, 2026

@copilot run ./gradlew spotlessApply

Done in 7ec9657. Spotless formatting has been applied to split long lines in the test files.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • develocity.opentelemetry.io
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-21-jdk-amd64/bin/java /usr/lib/jvm/temurin-21-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants