diff --git a/packages/opentelemetry-api/src/index.ts b/packages/opentelemetry-api/src/index.ts index 3b4e33c1462..b44db7aeec7 100644 --- a/packages/opentelemetry-api/src/index.ts +++ b/packages/opentelemetry-api/src/index.ts @@ -30,6 +30,7 @@ export * from './metrics/NoopMeterProvider'; export * from './trace/attributes'; export * from './trace/Event'; export * from './trace/instrumentation/Plugin'; +export * from './trace/link_context'; export * from './trace/link'; export * from './trace/NoopSpan'; export * from './trace/NoopTracer'; diff --git a/packages/opentelemetry-api/src/trace/NoopSpan.ts b/packages/opentelemetry-api/src/trace/NoopSpan.ts index cfa3c9c4c08..e9e2672babc 100644 --- a/packages/opentelemetry-api/src/trace/NoopSpan.ts +++ b/packages/opentelemetry-api/src/trace/NoopSpan.ts @@ -59,11 +59,6 @@ export class NoopSpan implements Span { return this; } - // By default does nothing - addLink(spanContext: SpanContext, attributes?: Attributes): this { - return this; - } - // By default does nothing setStatus(status: Status): this { return this; diff --git a/packages/opentelemetry-api/src/trace/link.ts b/packages/opentelemetry-api/src/trace/link.ts index 5baf8c30f9e..fc6e5a500d8 100644 --- a/packages/opentelemetry-api/src/trace/link.ts +++ b/packages/opentelemetry-api/src/trace/link.ts @@ -15,7 +15,7 @@ */ import { Attributes } from './attributes'; -import { SpanContext } from './span_context'; +import { LinkContext } from './link_context'; /** * A pointer from the current {@link Span} to another span in the same trace or @@ -24,7 +24,7 @@ import { SpanContext } from './span_context'; */ export interface Link { /** The {@link SpanContext} of a linked span. */ - spanContext: SpanContext; + linkContext: LinkContext; /** A set of {@link Attributes} on the link. */ attributes?: Attributes; } diff --git a/packages/opentelemetry-api/src/trace/link_context.ts b/packages/opentelemetry-api/src/trace/link_context.ts new file mode 100644 index 00000000000..168d2ce30c3 --- /dev/null +++ b/packages/opentelemetry-api/src/trace/link_context.ts @@ -0,0 +1,34 @@ +/*! + * Copyright 2020, OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * A pointer to another span. + */ +export interface LinkContext { + /** + * The ID of the trace that this span belongs to. It is worldwide unique + * with practically sufficient probability by being made as 16 randomly + * generated bytes, encoded as a 32 lowercase hex characters corresponding to + * 128 bits. + */ + traceId: string; + /** + * The ID of the Span. It is globally unique with practically sufficient + * probability by being made as 8 randomly generated bytes, encoded as a 16 + * lowercase hex characters corresponding to 64 bits. + */ + spanId: string; +} diff --git a/packages/opentelemetry-api/src/trace/span_context.ts b/packages/opentelemetry-api/src/trace/span_context.ts index b901cf52eb8..a1126e15f37 100644 --- a/packages/opentelemetry-api/src/trace/span_context.ts +++ b/packages/opentelemetry-api/src/trace/span_context.ts @@ -49,7 +49,7 @@ export interface SpanContext { * * SAMPLED = 0x1 and UNSAMPLED = 0x0; */ - traceFlags?: TraceFlags; + traceFlags: TraceFlags; /** * Tracing-system-specific info to propagate. * diff --git a/packages/opentelemetry-api/test/noop-implementations/noop-span.test.ts b/packages/opentelemetry-api/test/noop-implementations/noop-span.test.ts index a42d4711891..f612f558995 100644 --- a/packages/opentelemetry-api/test/noop-implementations/noop-span.test.ts +++ b/packages/opentelemetry-api/test/noop-implementations/noop-span.test.ts @@ -39,18 +39,6 @@ describe('NoopSpan', () => { span.addEvent('sent'); span.addEvent('sent', { id: '42', key: 'value' }); - span.addLink({ - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - }); - span.addLink( - { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - }, - { id: '42', key: 'value' } - ); - span.setStatus({ code: CanonicalCode.CANCELLED }); span.updateName('my-span'); diff --git a/packages/opentelemetry-api/test/noop-implementations/noop-tracer.test.ts b/packages/opentelemetry-api/test/noop-implementations/noop-tracer.test.ts index ed017dda998..a8a1905b761 100644 --- a/packages/opentelemetry-api/test/noop-implementations/noop-tracer.test.ts +++ b/packages/opentelemetry-api/test/noop-implementations/noop-tracer.test.ts @@ -20,7 +20,7 @@ import { Context } from '@opentelemetry/scope-base'; describe('NoopTracer', () => { it('should not crash', () => { - const spanContext = { traceId: '', spanId: '' }; + const spanContext = { traceId: '', spanId: '', traceFlags: 0 }; const tracer = new NoopTracer(); assert.deepStrictEqual(tracer.startSpan('span-name'), NOOP_SPAN); diff --git a/packages/opentelemetry-core/src/context/propagation/BinaryTraceContext.ts b/packages/opentelemetry-core/src/context/propagation/BinaryTraceContext.ts index ebcd0391cd2..57f39507403 100644 --- a/packages/opentelemetry-core/src/context/propagation/BinaryTraceContext.ts +++ b/packages/opentelemetry-core/src/context/propagation/BinaryTraceContext.ts @@ -74,7 +74,7 @@ export class BinaryTraceContext implements BinaryFormat { } fromBytes(buf: Uint8Array): SpanContext | null { - const result: SpanContext = { traceId: '', spanId: '' }; + const result: SpanContext = { traceId: '', spanId: '', traceFlags: 0 }; // Length must be 29. if (buf.length !== FORMAT_LENGTH) return null; // Check version and field numbers. diff --git a/packages/opentelemetry-core/test/context/B3Format.test.ts b/packages/opentelemetry-core/test/context/B3Format.test.ts index df7a1e6162c..5e06dfea564 100644 --- a/packages/opentelemetry-core/test/context/B3Format.test.ts +++ b/packages/opentelemetry-core/test/context/B3Format.test.ts @@ -82,6 +82,7 @@ describe('B3Format', () => { const emptySpanContext = { traceId: '', spanId: '', + traceFlags: 0, }; b3Format.inject( setExtractedSpanContext(Context.ROOT_CONTEXT, emptySpanContext), @@ -90,24 +91,6 @@ describe('B3Format', () => { assert.deepStrictEqual(carrier[X_B3_TRACE_ID], undefined); assert.deepStrictEqual(carrier[X_B3_SPAN_ID], undefined); }); - - it('should handle absence of sampling decision', () => { - const spanContext: SpanContext = { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - }; - - b3Format.inject( - setExtractedSpanContext(Context.ROOT_CONTEXT, spanContext), - carrier - ); - assert.deepStrictEqual( - carrier[X_B3_TRACE_ID], - 'd4cda95b652f4a1592b449d5929fda1b' - ); - assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); - assert.deepStrictEqual(carrier[X_B3_SAMPLED], undefined); - }); }); describe('.extract()', () => { diff --git a/packages/opentelemetry-core/test/context/BinaryTraceContext.test.ts b/packages/opentelemetry-core/test/context/BinaryTraceContext.test.ts index 0b5c303fd46..b12623fe1f7 100644 --- a/packages/opentelemetry-core/test/context/BinaryTraceContext.test.ts +++ b/packages/opentelemetry-core/test/context/BinaryTraceContext.test.ts @@ -68,7 +68,11 @@ describe('BinaryTraceContext', () => { description: 'span context with 64-bit span ID', }, { - structured: { traceId: commonTraceId, spanId: commonSpanId }, + structured: { + traceId: commonTraceId, + spanId: commonSpanId, + traceFlags: 0, + }, binary: new Uint8Array([ 0, 0, diff --git a/packages/opentelemetry-core/test/trace/ProbabilitySampler.test.ts b/packages/opentelemetry-core/test/trace/ProbabilitySampler.test.ts index 9195682a4bd..b0426899a27 100644 --- a/packages/opentelemetry-core/test/trace/ProbabilitySampler.test.ts +++ b/packages/opentelemetry-core/test/trace/ProbabilitySampler.test.ts @@ -24,13 +24,7 @@ import { describe('ProbabilitySampler', () => { it('should return a always sampler for 1', () => { const sampler = new ProbabilitySampler(1); - assert.strictEqual( - sampler.shouldSample({ - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - }), - true - ); + assert.strictEqual(sampler.shouldSample(), true); }); it('should return a always sampler for >1', () => { diff --git a/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts b/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts index 612ca34a8c0..165481ae8a2 100644 --- a/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts +++ b/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts @@ -22,6 +22,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }; assert.ok(context.isValid(spanContext)); }); @@ -30,6 +31,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: context.INVALID_TRACEID, spanId: '6e0c63257de34c92', + traceFlags: 0, }; assert.ok(!context.isValid(spanContext)); }); @@ -38,6 +40,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: context.INVALID_SPANID, + traceFlags: 0, }; assert.ok(!context.isValid(spanContext)); }); @@ -46,6 +49,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: context.INVALID_TRACEID, spanId: context.INVALID_SPANID, + traceFlags: 0, }; assert.ok(!context.isValid(spanContext)); }); diff --git a/packages/opentelemetry-exporter-collector/src/transform.ts b/packages/opentelemetry-exporter-collector/src/transform.ts index 1d60c442e27..28e05e86d4d 100644 --- a/packages/opentelemetry-exporter-collector/src/transform.ts +++ b/packages/opentelemetry-exporter-collector/src/transform.ts @@ -140,8 +140,8 @@ export function toCollectorLinkType( span: ReadableSpan, link: Link ): collectorTypes.LinkType { - const linkSpanId = link.spanContext.spanId; - const linkTraceId = link.spanContext.traceId; + const linkSpanId = link.linkContext.spanId; + const linkTraceId = link.linkContext.traceId; const spanParentId = span.parentSpanId; const spanTraceId = span.spanContext.traceId; @@ -158,8 +158,8 @@ export function toCollectorLinkType( export function toCollectorLinks(span: ReadableSpan): collectorTypes.Links { const collectorLinks: collectorTypes.Link[] = span.links.map((link: Link) => { const collectorLink: collectorTypes.Link = { - traceId: hexToBase64(link.spanContext.traceId), - spanId: hexToBase64(link.spanContext.spanId), + traceId: hexToBase64(link.linkContext.traceId), + spanId: hexToBase64(link.linkContext.spanId), type: toCollectorLinkType(span, link), }; diff --git a/packages/opentelemetry-exporter-collector/test/helper.ts b/packages/opentelemetry-exporter-collector/test/helper.ts index 46071b7e7fe..894a3f2fa92 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -36,10 +36,9 @@ export const mockedReadableSpan: ReadableSpan = { attributes: { component: 'document-load' }, links: [ { - spanContext: { + linkContext: { traceId: '1f1008dc8e270e85c40a0d7c3939b278', spanId: '78a8915098864388', - traceFlags: 1, }, attributes: { component: 'document-load' }, }, diff --git a/packages/opentelemetry-exporter-jaeger/src/transform.ts b/packages/opentelemetry-exporter-jaeger/src/transform.ts index 5ed607e4534..88bf5798397 100644 --- a/packages/opentelemetry-exporter-jaeger/src/transform.ts +++ b/packages/opentelemetry-exporter-jaeger/src/transform.ts @@ -103,12 +103,12 @@ function spanLinksToThriftRefs( ): ThriftReference[] { return links .map((link): ThriftReference | null => { - if (link.spanContext.spanId === parentSpanId) { + if (link.linkContext.spanId === parentSpanId) { const refType = ThriftReferenceType.CHILD_OF; - const traceId = link.spanContext.traceId; + const traceId = link.linkContext.traceId; const traceIdHigh = Utils.encodeInt64(traceId.slice(0, 16)); const traceIdLow = Utils.encodeInt64(traceId.slice(16)); - const spanId = Utils.encodeInt64(link.spanContext.spanId); + const spanId = Utils.encodeInt64(link.linkContext.spanId); return { traceIdLow, traceIdHigh, spanId, refType }; } return null; diff --git a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts index 20ef8467c8b..a8a38e9e659 100644 --- a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts @@ -110,6 +110,7 @@ describe('JaegerExporter', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }; const readableSpan: ReadableSpan = { name: 'my-span1', diff --git a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts index 2189b97d4d3..2ff8922be29 100644 --- a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts @@ -25,6 +25,7 @@ describe('transform', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }; describe('spanToThrift', () => { @@ -45,7 +46,7 @@ describe('transform', () => { }, links: [ { - spanContext: { + linkContext: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', }, @@ -194,7 +195,7 @@ describe('transform', () => { parentSpanId: '3e0c63257de34c92', links: [ { - spanContext: { + linkContext: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', }, @@ -227,6 +228,7 @@ describe('transform', () => { spanContext: { traceId: '92b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }, startTime: [1566156729, 709], endTime: [1566156731, 709], diff --git a/packages/opentelemetry-exporter-stackdriver-trace/src/transform.ts b/packages/opentelemetry-exporter-stackdriver-trace/src/transform.ts index e88b6e9b2a1..5a0c075eccc 100644 --- a/packages/opentelemetry-exporter-stackdriver-trace/src/transform.ts +++ b/packages/opentelemetry-exporter-stackdriver-trace/src/transform.ts @@ -77,8 +77,8 @@ export function getReadableSpanTransformer( function transformLink(link: ot.Link): Link { return { attributes: transformAttributes(link.attributes), - spanId: link.spanContext.spanId, - traceId: link.spanContext.traceId, + spanId: link.linkContext.spanId, + traceId: link.linkContext.traceId, type: LinkType.UNSPECIFIED, }; } diff --git a/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts b/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts index 68e60baf23d..87874400e7d 100644 --- a/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts +++ b/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts @@ -115,6 +115,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -147,6 +148,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -178,6 +180,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -207,6 +210,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, isRemote: true, }, status: { code: types.CanonicalCode.OK }, diff --git a/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts b/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts index 6d9ddf7969f..6b4ca1c5a74 100644 --- a/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts +++ b/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts @@ -31,6 +31,7 @@ describe('transform', () => { spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, isRemote: true, }; @@ -131,11 +132,9 @@ describe('transform', () => { it('should transform links', () => { readableSpan.links.push({ - spanContext: { + linkContext: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', - isRemote: true, - traceFlags: types.TraceFlags.SAMPLED, }, }); @@ -158,11 +157,9 @@ describe('transform', () => { it('should transform links with attributes', () => { readableSpan.links.push({ - spanContext: { + linkContext: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', - isRemote: true, - traceFlags: types.TraceFlags.SAMPLED, }, attributes: { testAttr: 'value', diff --git a/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts b/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts index b4b0a5177a0..8f069cdc16a 100644 --- a/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts @@ -35,6 +35,7 @@ function getReadableSpan() { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], @@ -138,6 +139,7 @@ describe('ZipkinExporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], @@ -164,6 +166,7 @@ describe('ZipkinExporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: 0, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], diff --git a/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts b/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts index cc35f6ec61c..8f42d17c939 100644 --- a/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts +++ b/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts @@ -164,7 +164,7 @@ describe('Utility', () => { const span = new Span( new BasicTracerProvider().getTracer('default'), 'test', - { spanId: '', traceId: '' }, + { spanId: '', traceId: '', traceFlags: 0 }, SpanKind.INTERNAL ); utils.setError(new Error(errorMessage), span, process.versions.node); diff --git a/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts b/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts index 8bfb673fcf1..c90af0ee4d1 100644 --- a/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts +++ b/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts @@ -17,7 +17,7 @@ import { NoopLogger } from '@opentelemetry/core'; import { NoopScopeManager } from '@opentelemetry/scope-base'; import { BasicTracerProvider, Span } from '@opentelemetry/tracing'; -import { CanonicalCode, SpanKind } from '@opentelemetry/api'; +import { CanonicalCode, SpanKind, TraceFlags } from '@opentelemetry/api'; import * as assert from 'assert'; import * as http from 'http'; import * as sinon from 'sinon'; @@ -259,7 +259,7 @@ describe('Utility', () => { scopeManager: new NoopScopeManager(), }).getTracer('default'), 'test', - { spanId: '', traceId: '' }, + { spanId: '', traceId: '', traceFlags: TraceFlags.SAMPLED }, SpanKind.INTERNAL ); /* tslint:disable-next-line:no-any */ diff --git a/packages/opentelemetry-plugin-http/test/utils/DummyPropagation.ts b/packages/opentelemetry-plugin-http/test/utils/DummyPropagation.ts index 5c65bd16d7c..50374267861 100644 --- a/packages/opentelemetry-plugin-http/test/utils/DummyPropagation.ts +++ b/packages/opentelemetry-plugin-http/test/utils/DummyPropagation.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Context, HttpTextFormat } from '@opentelemetry/api'; +import { Context, HttpTextFormat, TraceFlags } from '@opentelemetry/api'; import { setExtractedSpanContext, getParentSpanContext, @@ -27,6 +27,7 @@ export class DummyPropagation implements HttpTextFormat { return setExtractedSpanContext(context, { traceId: carrier[DummyPropagation.TRACE_CONTEXT_KEY] as string, spanId: DummyPropagation.SPAN_CONTEXT_KEY, + traceFlags: TraceFlags.SAMPLED, }); } inject(context: Context, headers: { [custom: string]: string }): void { diff --git a/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts b/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts index 5c65bd16d7c..50374267861 100644 --- a/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts +++ b/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Context, HttpTextFormat } from '@opentelemetry/api'; +import { Context, HttpTextFormat, TraceFlags } from '@opentelemetry/api'; import { setExtractedSpanContext, getParentSpanContext, @@ -27,6 +27,7 @@ export class DummyPropagation implements HttpTextFormat { return setExtractedSpanContext(context, { traceId: carrier[DummyPropagation.TRACE_CONTEXT_KEY] as string, spanId: DummyPropagation.SPAN_CONTEXT_KEY, + traceFlags: TraceFlags.SAMPLED, }); } inject(context: Context, headers: { [custom: string]: string }): void { diff --git a/packages/opentelemetry-shim-opentracing/src/shim.ts b/packages/opentelemetry-shim-opentracing/src/shim.ts index 07fb689ccfd..4621da63d67 100644 --- a/packages/opentelemetry-shim-opentracing/src/shim.ts +++ b/packages/opentelemetry-shim-opentracing/src/shim.ts @@ -30,7 +30,7 @@ function translateReferences( const context = reference.referencedContext(); if (context instanceof SpanContextShim) { links.push({ - spanContext: (context as SpanContextShim).getSpanContext(), + linkContext: (context as SpanContextShim).getSpanContext(), attributes: { 'span.kind': reference.type }, }); } diff --git a/packages/opentelemetry-tracing/test/BasicTracerRegistry.test.ts b/packages/opentelemetry-tracing/test/BasicTracerRegistry.test.ts index f829de1ff76..632d5f45835 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerRegistry.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerRegistry.test.ts @@ -188,6 +188,7 @@ describe('BasicTracerProvider', () => { parent: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, traceState: state, }, }); @@ -223,7 +224,7 @@ describe('BasicTracerProvider', () => { it('should start a span with name and with invalid spancontext', () => { const tracer = new BasicTracerProvider().getTracer('default'); const span = tracer.startSpan('my-span', { - parent: { traceId: '0', spanId: '0' }, + parent: { traceId: '0', spanId: '0', traceFlags: TraceFlags.SAMPLED }, }); assert.ok(span instanceof Span); const context = span.context(); diff --git a/packages/opentelemetry-tracing/test/Span.test.ts b/packages/opentelemetry-tracing/test/Span.test.ts index 7c56dc5e713..4a63876f168 100644 --- a/packages/opentelemetry-tracing/test/Span.test.ts +++ b/packages/opentelemetry-tracing/test/Span.test.ts @@ -20,6 +20,7 @@ import { CanonicalCode, TraceFlags, SpanContext, + LinkContext, } from '@opentelemetry/api'; import { BasicTracerProvider, Span } from '../src'; import { @@ -42,6 +43,10 @@ describe('Span', () => { spanId: '6e0c63257de34c92', traceFlags: TraceFlags.SAMPLED, }; + const linkContext: LinkContext = { + traceId: 'e4cda95b652f4a1592b449d5929fda1b', + spanId: '7e0c63257de34c92', + }; it('should create a Span instance', () => { const span = new Span(tracer, name, spanContext, SpanKind.SERVER); @@ -169,10 +174,14 @@ describe('Span', () => { spanId: '5e0c63257de34c92', traceFlags: TraceFlags.SAMPLED, }; + const linkContext: LinkContext = { + traceId: 'b3cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + }; const attributes = { attr1: 'value', attr2: 123, attr3: true }; const span = new Span(tracer, name, spanContext, SpanKind.CLIENT, '12345', [ - { spanContext }, - { spanContext, attributes }, + { linkContext }, + { linkContext, attributes }, ]); span.end(); }); @@ -255,9 +264,9 @@ describe('Span', () => { SpanKind.CLIENT, undefined, [ - { spanContext }, + { linkContext }, { - spanContext, + linkContext, attributes: { attr1: 'value', attr2: 123, attr3: true }, }, ] @@ -266,11 +275,11 @@ describe('Span', () => { assert.strictEqual(readableSpan.links.length, 2); assert.deepStrictEqual(readableSpan.links, [ { - spanContext, + linkContext, }, { attributes: { attr1: 'value', attr2: 123, attr3: true }, - spanContext, + linkContext, }, ]);