Skip to content

Add experimental MySQL query-to-trace correlation - #811

Draft
pmcollins wants to merge 3 commits into
mainfrom
mysql-trace-context-helper
Draft

pmcollins wants to merge 3 commits into
mainfrom
mysql-trace-context-helper

Conversation

@pmcollins

Copy link
Copy Markdown
Contributor

MySQL queries currently have no session-variable link to the OpenTelemetry database span that caused them. This adds an experimental, explicitly enabled Connector/Python hook that writes the database child span's W3C context to @traceparent before execution and attempts to clear it afterward, including after a query error.

The hook supports built-in buffered tuple, raw, and dictionary cursors in pure Python and C extension modes. It checks for pending results and accepts a conservative set of single-result SQL statements. Streaming and prepared cursors, scripts, stored-procedure calls, batches, custom cursor or connection subclasses, and SQLCommenter queries run without correlation commands. Internal SET commands create no extra spans. Suppressed calls and no-op tracers do not inject the application parent context.

Validation: 157 tests passed, including 48 real MySQL 8.4.11 cases with Connector/Python 26.7.0 and DBAPI instrumentation 0.66b1. Checks cover exact database child-span IDs, buffered rows after cleanup, query errors, unsampled context, suppression, transaction boundaries, and unsupported execution paths. Ruff checks and formatting passed. docs/mysql.md includes usage and test instructions.

This remains a draft: the hook uses private DBAPI and driver interfaces, adds two SET commands per eligible execution, and changes session diagnostics such as ROW_COUNT() and warning state. Internal SET failures are logged without replacing the query result or error, but can leave stale context. Startup configuration, connection-pool validation, additional execution modes and drivers, overhead measurement, and Collector/DBMon validation remain pending.

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.

1 participant