ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ref(node): Streamline ioredis instrumentation - #21560

Merged
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis
Jun 15, 2026
Merged

ref(node): Streamline ioredis instrumentation#21560
logaretm merged 1 commit into
developfrom
awad/js-2383-streamline-opentelemetryinstrumentation-ioredis

Conversation

@logaretm

@logaretmlogaretm commented Jun 15, 2026

Copy link
Copy Markdown
Member

Streamlines the vendored ioredis instrumentation to use Sentry's span APIs instead of the OpenTelemetry tracing APIs.

I removed the fake tests, added test cases to the integration tests, and dropped any unreachable code.

Streamlines the vendored `ioredis` instrumentation to use Sentry's span
APIs instead of the OpenTelemetry tracing API, and removes the code
paths that are dead in Sentry's context.
Mirrors the approach in #21481 (mongoose) and #21509 (mysql2).
### Notes
#### Blockers for `startSpan*`
ioredis ends its span manually since completion fires via the patched
`cmd.resolve`/`cmd.reject` (and the `connect` promise) after the sync
wrapper returns, which `startSpan`'s auto-end misses. `startInactiveSpan`
leaves the return value untouched (no thenable probing).
#### Semantic Conventions Attributes
Dropping the `OTEL_SEMCONV_STABILITY_OPT_IN` path means ioredis spans now
**always** emit the legacy semantic-convention attributes (`db.system`,
`db.statement`, `db.connection_string`, `net.peer.*`).
Modernizing the semconv is deferred as a separate, breaking change.
@linear-code

Copy link
Copy Markdown

JS-2383

@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser27.4 kB--
@sentry/browser - with treeshaking flags25.84 kB--
@sentry/browser (incl. Tracing)45.7 kB--
@sentry/browser (incl. Tracing + Span Streaming)47.94 kB--
@sentry/browser (incl. Tracing, Profiling)50.5 kB--
@sentry/browser (incl. Tracing, Replay)84.92 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags74.53 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)89.61 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.3 kB--
@sentry/browser (incl. Feedback)44.56 kB--
@sentry/browser (incl. sendFeedback)32.2 kB--
@sentry/browser (incl. FeedbackAsync)37.31 kB--
@sentry/browser (incl. Metrics)28.47 kB--
@sentry/browser (incl. Logs)28.71 kB--
@sentry/browser (incl. Metrics & Logs)29.4 kB--
@sentry/react29.2 kB--
@sentry/react (incl. Tracing)48 kB--
@sentry/vue32.42 kB--
@sentry/vue (incl. Tracing)47.59 kB--
@sentry/svelte27.42 kB--
CDN Bundle29.79 kB--
CDN Bundle (incl. Tracing)48.2 kB--
CDN Bundle (incl. Logs, Metrics)31.33 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.49 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.62 kB--
CDN Bundle (incl. Tracing, Replay)85.52 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)86.77 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.62 kB--
CDN Bundle - uncompressed88.59 kB--
CDN Bundle (incl. Tracing) - uncompressed145.8 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed93.29 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed149.77 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.12 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed264.67 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed268.63 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed278.37 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.31 kB--
@sentry/nextjs (client)50.45 kB--
@sentry/sveltekit (client)46.12 kB--
@sentry/core/server76.08 kB--
@sentry/core/browser63.22 kB--
@sentry/node-core61.72 kB--
@sentry/node129.28 kB-0.18%-226 B 🔽
@sentry/node - without tracing74.1 kB--
@sentry/aws-serverless86.35 kB--
@sentry/cloudflare (withSentry) - minified174.19 kB--
@sentry/cloudflare (withSentry)435.41 kB--

View base workflow run

@logaretm
logaretm marked this pull request as ready for review June 15, 2026 20:07
@logaretm
logaretm requested a review from a team as a code ownerJune 15, 2026 20:07
@logaretm
logaretm requested review from JPeer264, andreiborza, mydea and nicohrubec and removed request for a teamJune 15, 2026 20:07
@logaretm
logaretm merged commit aa9c09d into developJun 15, 2026
533 of 535 checks passed
@logaretm
logaretm deleted the awad/js-2383-streamline-opentelemetryinstrumentation-ioredis branch June 15, 2026 20:42
logaretm added a commit that referenced this pull request Jun 17, 2026
Streamlines the vendored `redis` (node-redis) instrumentation to use
Sentry's span APIs instead of the OpenTelemetry tracing APIs, following
the ioredis precedent (#21560).
- Replace `tracer.startSpan`/`context.with(trace.setSpan(...))` with
`startInactiveSpan`/`withActiveSpan`, `SpanStatusCode.ERROR` with
`SPAN_STATUS_ERROR`, and drop `recordException` (a no-op in Sentry's
pipeline) across all three classes.
- Drop the `SemconvStability` dual-emission and keep the OLD semconv
attributes only (the STABLE path was env-gated behind
`OTEL_SEMCONV_STABILITY_OPT_IN` and never enabled by the SDK).
- Remove dead config the SDK never passes (`dbStatementSerializer`,
`requireParentSpan`, `semconvStability`) and the now-dead `isPipeline`
plumbing; bake the origin into the attributes.
- Drop the blanket eslint-disable and rely on the consolidated path entry.
Also splits the node-redis test version aliases so every code path is
covered: `redis-5` now pins 5.11.0 (vendored monkey-patch, >=5.0.0 <5.12.0)
and the new `redis-5-tracing` pins >=5.12.0 (diagnostics_channel). Adds a
node-redis error-path assertion and a redis-5 cache suite.
Sign up for freeto 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

@logaretm@andreiborza