Skip to content

Commit 801c1c8

Browse files
bizob2828feywindhongalex
authored
fix: updated span kind to CLIENT for ack and modack rpc spans (#2029)
* fix: Updated span kind to CLIENT for ack and modack rpc spans * chore: linting nit * chore: lint fixes * tests: ack/modack spans don't get an operation currently; we should look at that in a separate PR if it's problematic --------- Co-authored-by: Megan Potter <[email protected]> Co-authored-by: Alex Hong <[email protected]>
1 parent 6c1613f commit 801c1c8

File tree

2 files changed

+95
-2
lines changed

2 files changed

+95
-2
lines changed

src/telemetry-tracing.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ export class PubsubSpans {
537537
const span: Span = getTracer().startSpan(
538538
`${subInfo.subId ?? subInfo.subName} ack`,
539539
{
540-
kind: SpanKind.CONSUMER,
540+
kind: SpanKind.CLIENT,
541541
attributes: spanAttributes,
542542
links,
543543
},
@@ -585,7 +585,7 @@ export class PubsubSpans {
585585
const span: Span = getTracer().startSpan(
586586
`${subInfo.subId ?? subInfo.subName} ${type}`,
587587
{
588-
kind: SpanKind.CONSUMER,
588+
kind: SpanKind.CLIENT,
589589
attributes: spanAttributes,
590590
links,
591591
},

test/telemetry-tracing.ts

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {exporter} from './tracing';
2323
import {SpanKind} from '@opentelemetry/api';
2424
import sinon = require('sinon');
2525
import {PubsubMessage} from '../src/publisher';
26+
import {Duration} from '../src/temporal';
2627

2728
describe('OpenTelemetryTracer', () => {
2829
beforeEach(() => {
@@ -292,6 +293,7 @@ describe('OpenTelemetryTracer', () => {
292293
firstSpan.attributes['messaging.destination.name'],
293294
tests.topicInfo.topicId,
294295
);
296+
assert.strictEqual(firstSpan.attributes['messaging.operation'], 'create');
295297
assert.strictEqual(
296298
firstSpan.attributes['messaging.system'],
297299
'gcp_pubsub',
@@ -346,6 +348,10 @@ describe('OpenTelemetryTracer', () => {
346348
assert.ok(parentReadSpan && childReadSpan);
347349

348350
assert.strictEqual(childReadSpan.name, 'sub subscribe');
351+
assert.strictEqual(
352+
childReadSpan.attributes['messaging.operation'],
353+
'receive',
354+
);
349355
assert.strictEqual(
350356
childReadSpan.attributes['messaging.destination.name'],
351357
'sub',
@@ -388,5 +394,92 @@ describe('OpenTelemetryTracer', () => {
388394
assert.strictEqual(publishReadSpan.links.length, 1);
389395
assert.strictEqual(childReadSpan.links.length, 1);
390396
});
397+
398+
it('creates ack rpc span', () => {
399+
const message: PubsubMessage = {};
400+
const topicName = 'projects/test/topics/topicfoo';
401+
const subName = 'subTest';
402+
const producerSpan = otel.PubsubSpans.createPublisherSpan(
403+
message,
404+
topicName,
405+
'test',
406+
) as trace.Span;
407+
const span = otel.PubsubSpans.createAckRpcSpan(
408+
[producerSpan],
409+
subName,
410+
'tests',
411+
);
412+
assert.ok(span);
413+
producerSpan.end();
414+
span.end();
415+
416+
const spans = exporter.getFinishedSpans();
417+
assert.strictEqual(spans.length, 2);
418+
419+
const firstSpan = spans.pop();
420+
assert.ok(firstSpan);
421+
assert.strictEqual(firstSpan.kind, SpanKind.CLIENT);
422+
assert.strictEqual(firstSpan.name, `${subName} ack`);
423+
assert.strictEqual(
424+
firstSpan.attributes['messaging.destination.name'],
425+
subName,
426+
);
427+
assert.strictEqual(
428+
firstSpan.attributes['messaging.batch.message_count'],
429+
1,
430+
);
431+
assert.strictEqual(
432+
firstSpan.attributes['messaging.system'],
433+
'gcp_pubsub',
434+
);
435+
});
436+
437+
it('creates modack rpc span', () => {
438+
const message: PubsubMessage = {};
439+
const topicName = 'projects/test/topics/topicfoo';
440+
const subName = 'subTest';
441+
const producerSpan = otel.PubsubSpans.createPublisherSpan(
442+
message,
443+
topicName,
444+
'test',
445+
) as trace.Span;
446+
const span = otel.PubsubSpans.createModackRpcSpan(
447+
[producerSpan],
448+
subName,
449+
'modack',
450+
'test',
451+
Duration.from({seconds: 1}),
452+
true,
453+
);
454+
assert.ok(span);
455+
producerSpan.end();
456+
span.end();
457+
458+
const spans = exporter.getFinishedSpans();
459+
assert.strictEqual(spans.length, 2);
460+
461+
const firstSpan = spans.pop();
462+
assert.ok(firstSpan);
463+
assert.strictEqual(firstSpan.kind, SpanKind.CLIENT);
464+
assert.strictEqual(firstSpan.name, `${subName} modack`);
465+
assert.strictEqual(
466+
firstSpan.attributes['messaging.destination.name'],
467+
subName,
468+
);
469+
assert.strictEqual(
470+
firstSpan.attributes[
471+
'messaging.gcp_pubsub.message.ack_deadline_seconds'
472+
],
473+
1,
474+
);
475+
assert.strictEqual(
476+
firstSpan.attributes['messaging.gcp_pubsub.is_receipt_modack'],
477+
true,
478+
);
479+
assert.strictEqual(
480+
firstSpan.attributes['messaging.system'],
481+
'gcp_pubsub',
482+
);
483+
});
391484
});
392485
});

0 commit comments

Comments
 (0)