Skip to content

Support db.system.name in JDBC instrumentation#16277

Merged
trask merged 14 commits intoopen-telemetry:mainfrom
trask:prefactor-db-info
Apr 8, 2026
Merged

Support db.system.name in JDBC instrumentation#16277
trask merged 14 commits intoopen-telemetry:mainfrom
trask:prefactor-db-info

Conversation

@trask
Copy link
Copy Markdown
Member

@trask trask commented Feb 24, 2026

This PR adds support for stable db.system.name in JDBC instrumentation.

It refactors the massive JdbcConnectionUrlParser into driver-specific parsers, updates DbInfo and attribute extraction to carry both stable and legacy semconv values, preserving old semconv behavior for compatibility during the transition.

Sorry for the size of this PR. I've split the PR into multiple commits and can send them as individual PRs if that would help

  • d80ad6a - Add JDBC DbInfo semconv bridge
  • 26e7e25 - Add JDBC parser framework scaffolding
  • 7ccd833 - Add simple JDBC parser implementations
  • 97c5aff - Add complex JDBC parser implementations
  • edbb6c9 - Switch JDBC URL parsing to parser framework
  • 0118257 - Adjust DbClientSpanNameExtractor semconv test
  • ad96d68 - Update Kafka Connect base test plumbing
  • f69c3b9 - Update Kafka Connect Postgres assertions
  • 9061146 - Add Kafka Connect stable semconv test task

@github-actions github-actions Bot added the test native This label can be applied to PRs to trigger them to run native tests label Feb 24, 2026
@trask trask force-pushed the prefactor-db-info branch from 85254c9 to 4a1299c Compare February 24, 2026 04:23
@trask trask mentioned this pull request Feb 24, 2026
@trask trask force-pushed the prefactor-db-info branch 3 times, most recently from a132596 to b5f105d Compare February 24, 2026 20:57
@trask trask force-pushed the prefactor-db-info branch 2 times, most recently from a141600 to 3c6b8ec Compare February 27, 2026 18:35
@trask trask force-pushed the prefactor-db-info branch 4 times, most recently from a9db901 to 4fac3c7 Compare March 30, 2026 22:01
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

this is probably the key place to start when reviewing

@trask trask marked this pull request as ready for review April 2, 2026 01:45
@trask trask requested a review from a team as a code owner April 2, 2026 01:45
@trask trask marked this pull request as draft April 2, 2026 01:49
@trask trask force-pushed the prefactor-db-info branch from 4ad4ee7 to 318276a Compare April 2, 2026 15:15
@trask trask force-pushed the prefactor-db-info branch from 318276a to 9061146 Compare April 2, 2026 15:38
@trask trask marked this pull request as ready for review April 2, 2026 17:36
@trask trask requested a review from Copilot April 3, 2026 18:29
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces support for stable db.system.name in JDBC instrumentation while preserving legacy semantic convention behavior for compatibility, and updates downstream tests (Kafka Connect) to validate both modes.

Changes:

  • Refactors JDBC URL parsing into driver-specific parsers with shared parsing utilities and a ParseContext.
  • Updates DbInfo and JDBC attribute extraction to carry both stable (db.system.name, db.namespace, etc.) and legacy (db.system, db.name, etc.) values.
  • Extends Kafka Connect/JDBC tests and Gradle tasks to exercise stable semconv opt-in behavior.

Reviewed changes

Copilot reviewed 33 out of 33 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
instrumentation/kafka/kafka-connect-2.6/testing/src/test/java/io/opentelemetry/instrumentation/kafkaconnect/v2_6/PostgresKafkaConnectSinkTaskTest.java Adjusts span name assertions for stable vs legacy semconv modes.
instrumentation/kafka/kafka-connect-2.6/testing/src/test/java/io/opentelemetry/instrumentation/kafkaconnect/v2_6/KafkaConnectSinkTaskBaseTest.java Wires semconv stability opt-in into Kafka Connect container env.
instrumentation/kafka/kafka-connect-2.6/testing/build.gradle.kts Adds a stable-semconv test task and hooks it into check.
instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java Updates test DbInfo construction to new stable/legacy fields.
instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParserTest.java Updates expectations for stable vs legacy db system/name/namespace parsing.
instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcAttributesGetterTest.java Adds tests for SQL dialect selection based on stable db.system.name.
instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java Updates assertions to new DbInfo getters/fields.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/UrlParsingUtils.java Introduces shared URL parsing helpers (params, host/port, IPv6).
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/SapUrlParser.java Adds SAP HANA driver-specific URL parsing.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/PostgresqlUrlParser.java Adds PostgreSQL-specific parsing (including currentSchema → namespace).
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/PolardbUrlParser.java Adds PolarDB driver-specific parsing.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/ParseContext.java Adds mutable context for staged parsing and building DbInfo.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/OracleUrlParser.java Adds Oracle driver-specific parsing (including DESCRIPTION format).
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/OceanbaseUrlParser.java Adds OceanBase parsing (including Oracle-mode mapping).
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/MysqlUrlParser.java Adds MySQL/MariaDB parsing including non-standard and subprotocol forms.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/MssqlUrlParser.java Adds SQL Server parsing with instance/namespace handling and precedence.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/LindormUrlParser.java Adds Lindorm parsing (:url= indirection and subtype extraction).
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/JtdsUrlParser.java Adds jTDS SQL Server parsing with instance/namespace handling.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/JdbcUrlParser.java Defines parser contract and precedence guidance.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/InformixSqliUrlParser.java Adds Informix SQLI parsing with db name normalization.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/InformixDirectUrlParser.java Adds Informix Direct parsing for db-only URLs.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/HsqlUrlParser.java Adds HSQLDB parsing for local/network modes.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/H2UrlParser.java Adds H2 parsing for local/network modes with stable/legacy system mapping.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/GenericUrlParser.java Provides generic URI-based parsing for standard URL-like JDBC forms.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/DerbyUrlParser.java Adds Derby parsing across local/network modes with precedence rules.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/Db2UrlParser.java Adds DB2/AS400 parsing including colon-separated params.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/DataDirectUrlParser.java Adds DataDirect/TIBCO parsing with subtype→system mapping.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/parser/ClickhouseUrlParser.java Adds ClickHouse parsing with protocol subtype.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcConnectionUrlParser.java Switches to parser framework and stable/legacy DbInfo output.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcAttributesGetter.java Reads stable db.system.name/namespace and preserves legacy getters.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/dbinfo/DbInfo.java Refactors DbInfo to carry stable + legacy semconv values.
instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/DataSourceDbAttributesExtractor.java Emits stable vs legacy DB attributes from updated DbInfo.
instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/db/DbClientSpanNameExtractorTest.java Updates test setup for stable semconv conditional behavior.

trask and others added 4 commits April 3, 2026 11:54
…strumentation/jdbc/internal/parser/ParseContext.java

Co-authored-by: Copilot <[email protected]>
…strumentation/jdbc/internal/parser/JtdsUrlParser.java

Co-authored-by: Copilot <[email protected]>

private static Map<String, String> buildSubtypeToOldSystem() {
Map<String, String> map = new HashMap<>(3);
map.put(SUBTYPE_SQLSERVER, MSSQL);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

postgres and mysql are missing from there because they are some in both old and new?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

yup

@trask trask enabled auto-merge (squash) April 8, 2026 19:13
@trask trask merged commit efe0b05 into open-telemetry:main Apr 8, 2026
95 checks passed
@trask trask deleted the prefactor-db-info branch April 8, 2026 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test native This label can be applied to PRs to trigger them to run native tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants