diff --git a/packages/opentelemetry-api/src/index.ts b/packages/opentelemetry-api/src/index.ts index 23f31f3ec6f..e76488cf33f 100644 --- a/packages/opentelemetry-api/src/index.ts +++ b/packages/opentelemetry-api/src/index.ts @@ -31,6 +31,7 @@ export * from './metrics/ObserverResult'; 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..342a587413e 100644 --- a/packages/opentelemetry-api/src/trace/NoopSpan.ts +++ b/packages/opentelemetry-api/src/trace/NoopSpan.ts @@ -26,7 +26,7 @@ export const INVALID_SPAN_ID = '0'; const INVALID_SPAN_CONTEXT: SpanContext = { traceId: INVALID_TRACE_ID, spanId: INVALID_SPAN_ID, - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }; /** @@ -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..2125b82b6c7 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 @@ -23,8 +23,8 @@ import { SpanContext } from './span_context'; * single batch handler processes multiple requests from different traces. */ export interface Link { - /** The {@link SpanContext} of a linked span. */ - spanContext: SpanContext; + /** The {@link LinkContext} of a linked span. */ + context: 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..5493f039a6a --- /dev/null +++ b/packages/opentelemetry-api/src/trace/link_context.ts @@ -0,0 +1,22 @@ +/*! + * 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. + */ + +import { SpanContext } from './span_context'; + +/** + * A pointer to another span. + */ +export type LinkContext = Pick; diff --git a/packages/opentelemetry-api/src/trace/span_context.ts b/packages/opentelemetry-api/src/trace/span_context.ts index f776ea4c368..b99be63fc94 100644 --- a/packages/opentelemetry-api/src/trace/span_context.ts +++ b/packages/opentelemetry-api/src/trace/span_context.ts @@ -47,9 +47,9 @@ export interface SpanContext { * caller may have recorded trace data. A caller who does not record trace * data out-of-band leaves this flag unset. * - * SAMPLED = 0x1 and UNSAMPLED = 0x0; + * SAMPLED = 0x1 and NONE = 0x0; */ - traceFlags?: TraceFlags; + traceFlags: TraceFlags; /** * Tracing-system-specific info to propagate. * diff --git a/packages/opentelemetry-api/src/trace/trace_flags.ts b/packages/opentelemetry-api/src/trace/trace_flags.ts index 419af605791..8a593ec254b 100644 --- a/packages/opentelemetry-api/src/trace/trace_flags.ts +++ b/packages/opentelemetry-api/src/trace/trace_flags.ts @@ -20,8 +20,8 @@ * whether a Span should be traced. It is implemented as a bitmask. */ export enum TraceFlags { - /** Bit to represent whether trace is unsampled in trace flags. */ - UNSAMPLED = 0x0, + /** Represents no flag set. */ + NONE = 0x0, /** Bit to represent whether trace is sampled in trace flags. */ - SAMPLED = 0x1, + SAMPLED = 0x1 << 0, } diff --git a/packages/opentelemetry-api/test/api/api.test.ts b/packages/opentelemetry-api/test/api/api.test.ts index 82114d16944..129e161d429 100644 --- a/packages/opentelemetry-api/test/api/api.test.ts +++ b/packages/opentelemetry-api/test/api/api.test.ts @@ -42,7 +42,7 @@ describe('API', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }; const dummySpan = new NoopSpan(spanContext); 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..76b9a14621f 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'); @@ -59,7 +47,7 @@ describe('NoopSpan', () => { assert.deepStrictEqual(span.context(), { traceId: INVALID_TRACE_ID, spanId: INVALID_SPAN_ID, - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }); span.end(); }); diff --git a/packages/opentelemetry-core/src/context/propagation/B3Format.ts b/packages/opentelemetry-core/src/context/propagation/B3Format.ts index 55681ddefeb..08ee1e89b43 100644 --- a/packages/opentelemetry-core/src/context/propagation/B3Format.ts +++ b/packages/opentelemetry-core/src/context/propagation/B3Format.ts @@ -80,9 +80,7 @@ export class B3Format implements HttpTextFormat { traceId, spanId, isRemote: true, - traceFlags: isNaN(Number(options)) - ? TraceFlags.UNSAMPLED - : Number(options), + traceFlags: isNaN(Number(options)) ? TraceFlags.NONE : Number(options), }); } return context; diff --git a/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts b/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts index 12899eabf9a..e4bd3af94d6 100644 --- a/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts +++ b/packages/opentelemetry-core/src/context/propagation/HttpTraceContext.ts @@ -70,7 +70,7 @@ export class HttpTraceContext implements HttpTextFormat { const traceParent = `${VERSION}-${spanContext.traceId}-${ spanContext.spanId - }-0${Number(spanContext.traceFlags || TraceFlags.UNSAMPLED).toString(16)}`; + }-0${Number(spanContext.traceFlags || TraceFlags.NONE).toString(16)}`; setter(carrier, TRACE_PARENT_HEADER, traceParent); if (spanContext.traceState) { diff --git a/packages/opentelemetry-core/src/trace/spancontext-utils.ts b/packages/opentelemetry-core/src/trace/spancontext-utils.ts index 1f20afd2347..42f91368fd7 100644 --- a/packages/opentelemetry-core/src/trace/spancontext-utils.ts +++ b/packages/opentelemetry-core/src/trace/spancontext-utils.ts @@ -21,7 +21,7 @@ export const INVALID_TRACEID = '0'; export const INVALID_SPAN_CONTEXT: SpanContext = { traceId: INVALID_TRACEID, spanId: INVALID_SPANID, - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }; /** diff --git a/packages/opentelemetry-core/test/context/B3Format.test.ts b/packages/opentelemetry-core/test/context/B3Format.test.ts index 22c327819df..df244b1f9c6 100644 --- a/packages/opentelemetry-core/test/context/B3Format.test.ts +++ b/packages/opentelemetry-core/test/context/B3Format.test.ts @@ -67,7 +67,7 @@ describe('B3Format', () => { const spanContext: SpanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, traceState: new TraceState('foo=bar,baz=qux'), isRemote: false, }; @@ -82,13 +82,14 @@ describe('B3Format', () => { 'd4cda95b652f4a1592b449d5929fda1b' ); assert.deepStrictEqual(carrier[X_B3_SPAN_ID], '6e0c63257de34c92'); - assert.deepStrictEqual(carrier[X_B3_SAMPLED], TraceFlags.UNSAMPLED); + assert.deepStrictEqual(carrier[X_B3_SAMPLED], TraceFlags.NONE); }); it('should not inject empty spancontext', () => { const emptySpanContext = { traceId: '', spanId: '', + traceFlags: TraceFlags.NONE, }; b3Format.inject( setExtractedSpanContext(Context.ROOT_CONTEXT, emptySpanContext), @@ -98,25 +99,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, - defaultSetter - ); - 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()', () => { @@ -131,7 +113,7 @@ describe('B3Format', () => { spanId: 'b7ad6b7169203331', traceId: '0af7651916cd43dd8448eb211c80319c', isRemote: true, - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }); }); @@ -179,7 +161,7 @@ describe('B3Format', () => { spanId: 'b7ad6b7169203331', traceId: '0af7651916cd43dd8448eb211c80319c', isRemote: true, - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }); }); diff --git a/packages/opentelemetry-core/test/trace/NoRecordingSpan.test.ts b/packages/opentelemetry-core/test/trace/NoRecordingSpan.test.ts index f1706f733e4..b5855280edc 100644 --- a/packages/opentelemetry-core/test/trace/NoRecordingSpan.test.ts +++ b/packages/opentelemetry-core/test/trace/NoRecordingSpan.test.ts @@ -23,7 +23,7 @@ describe('NoRecordingSpan', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }; const span = new NoRecordingSpan(spanContext); 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..5ffa807efa8 100644 --- a/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts +++ b/packages/opentelemetry-core/test/trace/spancontext-utils.test.ts @@ -16,12 +16,14 @@ import * as assert from 'assert'; import * as context from '../../src/trace/spancontext-utils'; +import { TraceFlags } from '@opentelemetry/api'; describe('spancontext-utils', () => { it('should return true for valid spancontext', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }; assert.ok(context.isValid(spanContext)); }); @@ -30,6 +32,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: context.INVALID_TRACEID, spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }; assert.ok(!context.isValid(spanContext)); }); @@ -38,6 +41,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: context.INVALID_SPANID, + traceFlags: TraceFlags.NONE, }; assert.ok(!context.isValid(spanContext)); }); @@ -46,6 +50,7 @@ describe('spancontext-utils', () => { const spanContext = { traceId: context.INVALID_TRACEID, spanId: context.INVALID_SPANID, + traceFlags: TraceFlags.NONE, }; 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..a1299ec8b92 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.context.spanId; + const linkTraceId = link.context.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.context.traceId), + spanId: hexToBase64(link.context.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..1cff15d01f2 100644 --- a/packages/opentelemetry-exporter-collector/test/helper.ts +++ b/packages/opentelemetry-exporter-collector/test/helper.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { TraceFlags } from '@opentelemetry/api'; import * as core from '@opentelemetry/core'; import { ReadableSpan } from '@opentelemetry/tracing'; import * as assert from 'assert'; @@ -27,7 +28,7 @@ export const mockedReadableSpan: ReadableSpan = { spanContext: { traceId: '1f1008dc8e270e85c40a0d7c3939b278', spanId: '5e107261f64fa53e', - traceFlags: 1, + traceFlags: TraceFlags.SAMPLED, }, parentSpanId: '78a8915098864388', startTime: [1574120165, 429803070], @@ -36,10 +37,9 @@ export const mockedReadableSpan: ReadableSpan = { attributes: { component: 'document-load' }, links: [ { - spanContext: { + context: { 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..04279deb35c 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.context.spanId === parentSpanId) { const refType = ThriftReferenceType.CHILD_OF; - const traceId = link.spanContext.traceId; + const traceId = link.context.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.context.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..1df78896584 100644 --- a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts @@ -21,6 +21,7 @@ import * as types from '@opentelemetry/api'; import { ThriftProcess } from '../src/types'; import { ReadableSpan } from '@opentelemetry/tracing'; import { ExportResult } from '@opentelemetry/base'; +import { TraceFlags } from '@opentelemetry/api'; describe('JaegerExporter', () => { describe('constructor', () => { @@ -110,6 +111,7 @@ describe('JaegerExporter', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }; 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..719b1ed5de6 100644 --- a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts @@ -20,11 +20,13 @@ import { ReadableSpan } from '@opentelemetry/tracing'; import * as types from '@opentelemetry/api'; import { ThriftUtils, Utils, ThriftReferenceType } from '../src/types'; import { hrTimeToMicroseconds } from '@opentelemetry/core'; +import { TraceFlags } from '@opentelemetry/api'; describe('transform', () => { const spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }; describe('spanToThrift', () => { @@ -45,7 +47,7 @@ describe('transform', () => { }, links: [ { - spanContext: { + context: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', }, @@ -194,7 +196,7 @@ describe('transform', () => { parentSpanId: '3e0c63257de34c92', links: [ { - spanContext: { + context: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', }, @@ -227,6 +229,7 @@ describe('transform', () => { spanContext: { traceId: '92b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }, 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..d694f9e2162 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.context.spanId, + traceId: link.context.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..69634563cf9 100644 --- a/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts +++ b/packages/opentelemetry-exporter-stackdriver-trace/test/exporter.test.ts @@ -22,6 +22,7 @@ import * as assert from 'assert'; import * as nock from 'nock'; import * as sinon from 'sinon'; import { StackdriverTraceExporter } from '../src'; +import { TraceFlags } from '@opentelemetry/api'; describe('Stackdriver Trace Exporter', () => { beforeEach(() => { @@ -115,6 +116,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -147,6 +149,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -178,6 +181,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, isRemote: true, }, status: { code: types.CanonicalCode.OK }, @@ -207,6 +211,7 @@ describe('Stackdriver Trace Exporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, 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..4d52a8bac77 100644 --- a/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts +++ b/packages/opentelemetry-exporter-stackdriver-trace/test/transform.test.ts @@ -21,6 +21,7 @@ import * as assert from 'assert'; import { getReadableSpanTransformer } from '../src/transform'; import { LinkType, Span } from '../src/types'; import { VERSION } from '../src/version'; +import { TraceFlags } from '@opentelemetry/api'; describe('transform', () => { let readableSpan: ReadableSpan; @@ -31,6 +32,7 @@ describe('transform', () => { spanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, isRemote: true, }; @@ -131,11 +133,9 @@ describe('transform', () => { it('should transform links', () => { readableSpan.links.push({ - spanContext: { + context: { traceId: 'a4cda95b652f4a1592b449d5929fda1b', spanId: '3e0c63257de34c92', - isRemote: true, - traceFlags: types.TraceFlags.SAMPLED, }, }); @@ -158,11 +158,9 @@ describe('transform', () => { it('should transform links with attributes', () => { readableSpan.links.push({ - spanContext: { + context: { 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 806f4fd0381..b88dbab9b07 100644 --- a/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/zipkin.test.ts @@ -23,6 +23,7 @@ import * as types from '@opentelemetry/api'; import { ZipkinExporter } from '../src'; import * as zipkinTypes from '../src/types'; import { OT_REQUEST_HEADER } from '../src/utils'; +import { TraceFlags } from '@opentelemetry/api'; const MICROS_PER_SECS = 1e6; @@ -35,6 +36,7 @@ function getReadableSpan() { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], @@ -130,6 +132,7 @@ describe('ZipkinExporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], @@ -156,6 +159,7 @@ describe('ZipkinExporter', () => { spanContext: { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.NONE, }, startTime: [startTime, 0], endTime: [startTime + duration, 0], diff --git a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts index a81dcc99f29..67ea5766082 100644 --- a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts +++ b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts @@ -139,7 +139,7 @@ describe('NodeTracerProvider', () => { }); const span = provider.getTracer('default').startSpan('my-span'); assert.ok(span instanceof NoRecordingSpan); - assert.strictEqual(span.context().traceFlags, TraceFlags.UNSAMPLED); + assert.strictEqual(span.context().traceFlags, TraceFlags.NONE); assert.strictEqual(span.isRecording(), false); }); diff --git a/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts b/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts index cc35f6ec61c..b113c99b0a4 100644 --- a/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts +++ b/packages/opentelemetry-plugin-dns/test/functionals/utils.test.ts @@ -16,7 +16,7 @@ import { NoopLogger } from '@opentelemetry/core'; 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 sinon from 'sinon'; import { AttributeNames } from '../../src/enums/AttributeNames'; @@ -164,7 +164,7 @@ describe('Utility', () => { const span = new Span( new BasicTracerProvider().getTracer('default'), 'test', - { spanId: '', traceId: '' }, + { spanId: '', traceId: '', traceFlags: TraceFlags.NONE }, 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 2e845825980..6314d480924 100644 --- a/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts +++ b/packages/opentelemetry-plugin-http/test/functionals/utils.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CanonicalCode, SpanKind } from '@opentelemetry/api'; +import { CanonicalCode, SpanKind, TraceFlags } from '@opentelemetry/api'; import { NoopLogger } from '@opentelemetry/core'; import { BasicTracerProvider, Span } from '@opentelemetry/tracing'; import * as assert from 'assert'; @@ -256,7 +256,7 @@ describe('Utility', () => { const span = new Span( new BasicTracerProvider().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 69f809b4532..14c61e53923 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 { const extractedSpanContext = { traceId: carrier[DummyPropagation.TRACE_CONTEXT_KEY] as string, spanId: DummyPropagation.SPAN_CONTEXT_KEY, + traceFlags: TraceFlags.SAMPLED, }; if (extractedSpanContext.traceId && extractedSpanContext.spanId) { return setExtractedSpanContext(context, extractedSpanContext); diff --git a/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts b/packages/opentelemetry-plugin-https/test/utils/DummyPropagation.ts index 69f809b4532..14c61e53923 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 { const extractedSpanContext = { traceId: carrier[DummyPropagation.TRACE_CONTEXT_KEY] as string, spanId: DummyPropagation.SPAN_CONTEXT_KEY, + traceFlags: TraceFlags.SAMPLED, }; if (extractedSpanContext.traceId && extractedSpanContext.spanId) { return setExtractedSpanContext(context, extractedSpanContext); diff --git a/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts b/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts index 45a85b7f0f0..aec84b7aa0f 100644 --- a/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts +++ b/packages/opentelemetry-propagator-jaeger/src/JaegerHttpTraceFormat.ts @@ -58,9 +58,9 @@ export class JaegerHttpTraceFormat implements HttpTextFormat { const spanContext = getParentSpanContext(context); if (!spanContext) return; - const traceFlags = `0${( - spanContext.traceFlags || TraceFlags.UNSAMPLED - ).toString(16)}`; + const traceFlags = `0${(spanContext.traceFlags || TraceFlags.NONE).toString( + 16 + )}`; setter( carrier, diff --git a/packages/opentelemetry-shim-opentracing/src/shim.ts b/packages/opentelemetry-shim-opentracing/src/shim.ts index c854f4f5b0c..ecc4adf995b 100644 --- a/packages/opentelemetry-shim-opentracing/src/shim.ts +++ b/packages/opentelemetry-shim-opentracing/src/shim.ts @@ -30,7 +30,7 @@ function translateReferences(references: opentracing.Reference[]): api.Link[] { const context = reference.referencedContext(); if (context instanceof SpanContextShim) { links.push({ - spanContext: (context as SpanContextShim).getSpanContext(), + context: (context as SpanContextShim).getSpanContext(), attributes: { 'span.kind': reference.type }, }); } diff --git a/packages/opentelemetry-tracing/src/Tracer.ts b/packages/opentelemetry-tracing/src/Tracer.ts index 76553ee3606..15fef62dd84 100644 --- a/packages/opentelemetry-tracing/src/Tracer.ts +++ b/packages/opentelemetry-tracing/src/Tracer.ts @@ -81,7 +81,7 @@ export class Tracer implements api.Tracer { } const traceFlags = samplingDecision ? api.TraceFlags.SAMPLED - : api.TraceFlags.UNSAMPLED; + : api.TraceFlags.NONE; const spanContext = { traceId, spanId, traceFlags, traceState }; if (!samplingDecision) { this.logger.debug('Sampling is off, starting no recording span'); diff --git a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts index 6d3a5836f46..829f477070d 100644 --- a/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-tracing/test/BasicTracerProvider.test.ts @@ -172,6 +172,7 @@ describe('BasicTracerProvider', () => { setExtractedSpanContext(Context.ROOT_CONTEXT, { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, traceState: state, }) ); @@ -256,6 +257,7 @@ describe('BasicTracerProvider', () => { setExtractedSpanContext(Context.ROOT_CONTEXT, { traceId: '0', spanId: '0', + traceFlags: TraceFlags.SAMPLED, }) ); assert.ok(span instanceof Span); @@ -276,7 +278,7 @@ describe('BasicTracerProvider', () => { const context = span.context(); assert.ok(context.traceId.match(/[a-f0-9]{32}/)); assert.ok(context.spanId.match(/[a-f0-9]{16}/)); - assert.strictEqual(context.traceFlags, TraceFlags.UNSAMPLED); + assert.strictEqual(context.traceFlags, TraceFlags.NONE); assert.deepStrictEqual(context.traceState, undefined); span.end(); }); diff --git a/packages/opentelemetry-tracing/test/Span.test.ts b/packages/opentelemetry-tracing/test/Span.test.ts index 7c56dc5e713..573d58a0fbe 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 }, + { context: linkContext }, + { context: linkContext, attributes }, ]); span.end(); }); @@ -255,9 +264,9 @@ describe('Span', () => { SpanKind.CLIENT, undefined, [ - { spanContext }, + { context: linkContext }, { - spanContext, + context: 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, + context: linkContext, }, { attributes: { attr1: 'value', attr2: 123, attr3: true }, - spanContext, + context: linkContext, }, ]); diff --git a/packages/opentelemetry-tracing/test/export/SimpleSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/export/SimpleSpanProcessor.test.ts index ad4b3f6d514..572883b115a 100644 --- a/packages/opentelemetry-tracing/test/export/SimpleSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/export/SimpleSpanProcessor.test.ts @@ -63,7 +63,7 @@ describe('SimpleSpanProcessor', () => { const spanContext: SpanContext = { traceId: 'a3cda95b652f4a1592b449d5929fda1b', spanId: '5e0c63257de34c92', - traceFlags: TraceFlags.UNSAMPLED, + traceFlags: TraceFlags.NONE, }; const span = new Span( provider.getTracer('default'),