Skip to content

feat(instrumentation-pg): propagate context using set application_name#3454

Open
mhennoch wants to merge 11 commits intoopen-telemetry:mainfrom
mhennoch:pgsetappname
Open

feat(instrumentation-pg): propagate context using set application_name#3454
mhennoch wants to merge 11 commits intoopen-telemetry:mainfrom
mhennoch:pgsetappname

Conversation

@mhennoch
Copy link
Copy Markdown
Contributor

Changes

Adds SET application_name as a context propagation mechanism, following the pattern established for SQL Server (SET CONTEXT_INFO) and Oracle (V$SESSION.ACTION).

Why SET application_name?

PostgreSQL instrumentation already supports SQL Commenter, but it has limitations:

  • Prepared statements -- SQL Commenter cannot be used with named/prepared queries, as the comment is baked into the statement text and every subsequent execution carries stale trace context.
  • Stored procedures -- SQL comments on the outer CALL statement are not visible to queries executed inside the procedure body.

SET application_name operates at the session level and avoids all of these issues.

There is ongoing discussion in the npgsql community about this not being the ideal long-term solution, but no better alternative currently exists for PostgreSQL, and getting to one will take a long time. I will also create a semconv issue about it. This feature is disabled by default, as in the other instrumentations.

Existing and related implementations

@mhennoch mhennoch requested a review from a team as a code owner March 26, 2026 09:29
@github-actions github-actions Bot added pkg:instrumentation-mysql2 pkg:instrumentation-pg pkg:sql-common pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. labels Mar 26, 2026
@github-actions github-actions Bot requested a review from maryliag March 26, 2026 09:29
@github-actions
Copy link
Copy Markdown
Contributor

This package does not have an assigned component owner and is considered unmaintained. As such this package is in feature-freeze and this PR will be closed with 14 days unless a new owner or a sponsor (a member of @open-telemetry/javascript-approvers) for the feature is found. It is the responsibility of the author to find a sponsor for this feature.
Are you familiar with this package? Consider becoming a component owner.

@raphael-theriault-swi raphael-theriault-swi removed pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. pkg-status:unmaintained:autoclose-scheduled labels Mar 27, 2026
@maryliag
Copy link
Copy Markdown
Contributor

maryliag commented Apr 7, 2026

I haven't checked the code yet, but can you add more tests? I can see that the codecov is failing, so this will need to increase the coverage

@github-actions github-actions Bot added pkg:instrumentation-mysql2 pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. labels Apr 16, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This package does not have an assigned component owner and is considered unmaintained. As such this package is in feature-freeze and this PR will be closed with 14 days unless a new owner or a sponsor (a member of @open-telemetry/javascript-approvers) for the feature is found. It is the responsibility of the author to find a sponsor for this feature.
Are you familiar with this package? Consider becoming a component owner.

@maryliag maryliag removed pkg:instrumentation-mysql2 pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. pkg-status:unmaintained:autoclose-scheduled labels Apr 17, 2026
@mhennoch mhennoch requested a review from a team as a code owner April 21, 2026 09:17
@github-actions github-actions Bot added pkg:instrumentation-mysql2 pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. labels Apr 21, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This package does not have an assigned component owner and is considered unmaintained. As such this package is in feature-freeze and this PR will be closed with 14 days unless a new owner or a sponsor (a member of @open-telemetry/javascript-approvers) for the feature is found. It is the responsibility of the author to find a sponsor for this feature.
Are you familiar with this package? Consider becoming a component owner.

@pichlermarc pichlermarc removed pkg:sql-common pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. pkg-status:unmaintained:autoclose-scheduled labels Apr 22, 2026
@github-actions github-actions Bot added pkg:instrumentation-mysql2 pkg:sql-common pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. labels Apr 28, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This package does not have an assigned component owner and is considered unmaintained. As such this package is in feature-freeze and this PR will be closed with 14 days unless a new owner or a sponsor (a member of @open-telemetry/javascript-approvers) for the feature is found. It is the responsibility of the author to find a sponsor for this feature.
Are you familiar with this package? Consider becoming a component owner.

@maryliag maryliag added has:sponsor This package or feature has a sponsor that has volunteered to review PRs and respond to questions and removed pkg:instrumentation-mysql2 pkg-status:unmaintained:autoclose-scheduled labels Apr 29, 2026
@pichlermarc pichlermarc self-assigned this Apr 29, 2026
@raphael-theriault-swi raphael-theriault-swi self-assigned this Apr 29, 2026
Copy link
Copy Markdown
Member

@raphael-theriault-swi raphael-theriault-swi left a comment

Choose a reason for hiding this comment

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

LGTM apart from the silent failure. Sorry it took so long to get a review.

Comment on lines +491 to +507
const traceparent = buildTraceparent(span);
if (traceparent) {
const setQuery = {
text: `SET application_name = '${traceparent}'`,
[INTERNAL_SET_QUERY]: true,
};
try {
const setResult: unknown = original.apply(this, [
setQuery,
] as never);
if (setResult instanceof Promise) {
setResult.catch(() => {});
}
} catch {
// Silently ignore SET failures to avoid breaking user queries
}
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'd like there to be some diag warnings here on failure so it doesn't fail completely silently. Would make things a lot easier to debug for people if they're not getting correlation.

return query;
}

const propagator = new W3CTraceContextPropagator();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nitpicking but this could be removed to use the newly added one at the module scope.

@raphael-theriault-swi raphael-theriault-swi removed the pkg-status:unmaintained This package is unmaintained. Only bugfixes may be acceped until a new owner has been found. label May 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

has:sponsor This package or feature has a sponsor that has volunteered to review PRs and respond to questions pkg:instrumentation-pg pkg:sql-common

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants