From 6e74bd9dbc53bf3bf6e369ccd606191e3bb9d3f7 Mon Sep 17 00:00:00 2001 From: Nicole Yu Date: Tue, 1 Jul 2025 20:35:32 +1000 Subject: [PATCH 1/4] fix: addLink --- src/telemetry-tracing.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/telemetry-tracing.ts b/src/telemetry-tracing.ts index e6f44b0d2..27b8864b8 100644 --- a/src/telemetry-tracing.ts +++ b/src/telemetry-tracing.ts @@ -43,7 +43,7 @@ const packageJson = require('../../package.json'); * @internal */ let cachedTracer: Tracer | undefined; -function getTracer(): Tracer { +export function getTracer(): Tracer { const tracer = cachedTracer ?? trace.getTracer('@google-cloud/pubsub', packageJson.version); @@ -379,6 +379,7 @@ export class PubsubSpans { 'create', ), }); + if (topicInfo.topicId) { span.updateName(`${topicInfo.topicId} create`); span.setAttribute('messaging.destination.name', topicInfo.topicId); @@ -505,7 +506,7 @@ export class PubsubSpans { // Also attempt to link from message spans back to the publish RPC span. messages.forEach(m => { if (m.parentSpan && isSampled(m.parentSpan)) { - m.parentSpan.addLink({context: span.spanContext()}); + m.parentSpan?.addLink({context: span.spanContext()}); } }); } @@ -550,7 +551,7 @@ export class PubsubSpans { // Also attempt to link from the subscribe span(s) back to the publish RPC span. messageSpans.forEach(m => { if (m && isSampled(m)) { - m.addLink({context: span.spanContext()}); + m?.addLink({context: span.spanContext()}); } }); } @@ -598,7 +599,7 @@ export class PubsubSpans { // Also attempt to link from the subscribe span(s) back to the publish RPC span. messageSpans.forEach(m => { if (m && isSampled(m)) { - m.addLink({context: span.spanContext()}); + m?.addLink({context: span.spanContext()}); } }); } From 61ce21bb825a8258fef376aca4b53e5c69025be1 Mon Sep 17 00:00:00 2001 From: Nicole Yu Date: Tue, 1 Jul 2025 21:05:32 +1000 Subject: [PATCH 2/4] test: update --- test/telemetry-tracing.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/telemetry-tracing.ts b/test/telemetry-tracing.ts index 02715a304..8354833ca 100644 --- a/test/telemetry-tracing.ts +++ b/test/telemetry-tracing.ts @@ -366,6 +366,7 @@ describe('OpenTelemetryTracer', () => { topicName, 'test', ) as trace.Span; + const parentSpanLink = sinon.spy(span, 'addLink'); message.parentSpan = span; span.end(); @@ -374,7 +375,6 @@ describe('OpenTelemetryTracer', () => { topicName, 'test', ); - publishSpan?.end(); const spans = exporter.getFinishedSpans(); const publishReadSpan = spans.pop(); @@ -387,6 +387,7 @@ describe('OpenTelemetryTracer', () => { ); assert.strictEqual(publishReadSpan.links.length, 1); assert.strictEqual(childReadSpan.links.length, 1); + assert.strictEqual(parentSpanLink.callCount, 1); }); }); }); From 1cba7afd827885db860c95c7c5d95d6800f1c717 Mon Sep 17 00:00:00 2001 From: Nicole Yu Date: Tue, 1 Jul 2025 22:08:25 +1000 Subject: [PATCH 3/4] revert --- src/telemetry-tracing.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/telemetry-tracing.ts b/src/telemetry-tracing.ts index 27b8864b8..1c5254658 100644 --- a/src/telemetry-tracing.ts +++ b/src/telemetry-tracing.ts @@ -43,7 +43,7 @@ const packageJson = require('../../package.json'); * @internal */ let cachedTracer: Tracer | undefined; -export function getTracer(): Tracer { +function getTracer(): Tracer { const tracer = cachedTracer ?? trace.getTracer('@google-cloud/pubsub', packageJson.version); @@ -379,7 +379,6 @@ export class PubsubSpans { 'create', ), }); - if (topicInfo.topicId) { span.updateName(`${topicInfo.topicId} create`); span.setAttribute('messaging.destination.name', topicInfo.topicId); From 2d4a6550255e4130816df3f6ceff574372bfa1ee Mon Sep 17 00:00:00 2001 From: Nicole Yu Date: Wed, 2 Jul 2025 19:33:32 +1000 Subject: [PATCH 4/4] test: update --- src/telemetry-tracing.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/telemetry-tracing.ts b/src/telemetry-tracing.ts index 1c5254658..cb422382d 100644 --- a/src/telemetry-tracing.ts +++ b/src/telemetry-tracing.ts @@ -504,8 +504,12 @@ export class PubsubSpans { if (span) { // Also attempt to link from message spans back to the publish RPC span. messages.forEach(m => { - if (m.parentSpan && isSampled(m.parentSpan)) { - m.parentSpan?.addLink({context: span.spanContext()}); + if ( + m.parentSpan && + isSampled(m.parentSpan) && + typeof m.parentSpan?.addLink === 'function' + ) { + m.parentSpan.addLink({context: span.spanContext()}); } }); } @@ -549,8 +553,8 @@ export class PubsubSpans { if (span) { // Also attempt to link from the subscribe span(s) back to the publish RPC span. messageSpans.forEach(m => { - if (m && isSampled(m)) { - m?.addLink({context: span.spanContext()}); + if (m && isSampled(m) && typeof m?.addLink === 'function') { + m.addLink({context: span.spanContext()}); } }); } @@ -597,8 +601,8 @@ export class PubsubSpans { if (span) { // Also attempt to link from the subscribe span(s) back to the publish RPC span. messageSpans.forEach(m => { - if (m && isSampled(m)) { - m?.addLink({context: span.spanContext()}); + if (m && isSampled(m) && typeof m?.addLink === 'function') { + m.addLink({context: span.spanContext()}); } }); }