From fcd781107fc079c9263aa1f00bd17adb6bf92b5c Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Tue, 11 Feb 2025 10:09:27 -0800 Subject: [PATCH 01/11] Add parentSpanContext and remove parentSpanId. --- .../test/fetch.test.ts | 14 +++--- .../test/helper.ts | 4 +- .../test/protobuf-ts-utils.ts | 2 +- .../test/utils/assertionUtils.ts | 2 +- .../test/utils/assertSpan.ts | 4 +- .../test/xhr.test.ts | 8 +-- .../src/trace/internal-types.ts | 5 +- .../otlp-transformer/src/trace/internal.ts | 2 +- .../otlp-transformer/test/trace.test.ts | 26 +++++++--- .../shim-opencensus/test/ShimSpan.test.ts | 4 +- .../shim-opencensus/test/ShimTracer.test.ts | 6 +-- .../test/otel-sandwich.test.ts | 8 +-- .../src/transform.ts | 4 +- .../test/transform.test.ts | 6 ++- .../src/transform.ts | 2 +- .../test/common/transform.test.ts | 49 +++---------------- .../test/helper.ts | 6 ++- .../test/node/zipkin.test.ts | 18 +++++-- .../opentelemetry-sdk-trace-base/src/Span.ts | 6 +-- .../src/Tracer.ts | 4 +- .../src/export/ConsoleSpanExporter.ts | 2 +- .../src/export/ReadableSpan.ts | 2 +- .../test/common/BasicTracerProvider.test.ts | 2 +- .../test/common/Span.test.ts | 8 ++- .../test/common/Tracer.test.ts | 8 +-- .../export/InMemorySpanExporter.test.ts | 4 +- .../test/Shim.test.ts | 4 +- 27 files changed, 104 insertions(+), 106 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts index 628aefb988f..eee66caa676 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts @@ -400,7 +400,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -775,7 +775,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -1492,7 +1492,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -1542,7 +1542,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -1624,7 +1624,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -1723,7 +1723,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); @@ -1781,7 +1781,7 @@ describe('fetch', () => { const span: tracing.ReadableSpan = exportedSpans[0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan!.spanContext().spanId, 'parent span is not root span' ); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 28cfd349327..0e1e538a90e 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -622,7 +622,7 @@ export const runTests = ( ); assert.strictEqual( rootSpan.spanContext().spanId, - clientSpan.parentSpanId + clientSpan.parentSpanContext?.spanId ); } }) @@ -740,7 +740,7 @@ export const runTests = ( ); assert.strictEqual( rootSpan.spanContext().spanId, - clientSpan.parentSpanId + clientSpan.parentSpanContext?.spanId ); }); }); diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts index 95233aa52ec..893dbcd727e 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts @@ -103,6 +103,6 @@ export function assertExportedSpans( rootSpan?.spanContext().traceId, serverSpan.spanContext().traceId ); - assert.strictEqual(rootSpan?.spanContext().spanId, clientSpan.parentSpanId); + assert.strictEqual(rootSpan?.spanContext().spanId, clientSpan.parentSpanContext?.spanId); } } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts index ccc35cf7ad9..20ea94c7a80 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts @@ -99,7 +99,7 @@ export const assertPropagation = ( const targetSpanContext = incomingSpan.spanContext(); const sourceSpanContext = outgoingSpan.spanContext(); assert.strictEqual(targetSpanContext.traceId, sourceSpanContext.traceId); - assert.strictEqual(incomingSpan.parentSpanId, sourceSpanContext.spanId); + assert.strictEqual(incomingSpan.parentSpanContext?.spanId, sourceSpanContext.spanId); assert.strictEqual( targetSpanContext.traceFlags, sourceSpanContext.traceFlags diff --git a/experimental/packages/opentelemetry-instrumentation-http/test/utils/assertSpan.ts b/experimental/packages/opentelemetry-instrumentation-http/test/utils/assertSpan.ts index 24cac71298f..25ab861fb2e 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/test/utils/assertSpan.ts +++ b/experimental/packages/opentelemetry-instrumentation-http/test/utils/assertSpan.ts @@ -185,8 +185,8 @@ export const assertSpan = ( validations.component, ' must have http.scheme attribute' ); - assert.ok(typeof span.parentSpanId === 'string'); - assert.ok(isValidSpanId(span.parentSpanId)); + assert.ok(typeof span.parentSpanContext?.spanId === 'string'); + assert.ok(isValidSpanId(span.parentSpanContext.spanId)); } else if (validations.reqHeaders) { assert.ok(validations.reqHeaders[DummyPropagation.TRACE_CONTEXT_KEY]); assert.ok(validations.reqHeaders[DummyPropagation.SPAN_CONTEXT_KEY]); diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts index e2f74d48b74..82904f239d8 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts @@ -385,7 +385,7 @@ describe('xhr', () => { it('should create a span with correct root span', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan.spanContext().spanId, 'parent span is not root span' ); @@ -489,7 +489,7 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const parentSpan: tracing.ReadableSpan = exportSpy.args[1][0][0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, parentSpan.spanContext().spanId, 'parent span is not root span' ); @@ -1583,7 +1583,7 @@ describe('xhr', () => { it('should create a span with correct root span', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, rootSpan.spanContext().spanId, 'parent span is not root span' ); @@ -1687,7 +1687,7 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const parentSpan: tracing.ReadableSpan = exportSpy.args[1][0][0]; assert.strictEqual( - span.parentSpanId, + span.parentSpanContext?.spanId, parentSpan.spanContext().spanId, 'parent span is not root span' ); diff --git a/experimental/packages/otlp-transformer/src/trace/internal-types.ts b/experimental/packages/otlp-transformer/src/trace/internal-types.ts index 94e78072b27..0bf32906e42 100644 --- a/experimental/packages/otlp-transformer/src/trace/internal-types.ts +++ b/experimental/packages/otlp-transformer/src/trace/internal-types.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { SpanContext } from '@opentelemetry/api'; import { Fixed64, IInstrumentationScope, @@ -62,8 +63,8 @@ export interface ISpan { /** Span traceState */ traceState?: string | null; - /** Span parentSpanId */ - parentSpanId?: string | Uint8Array; + /** Span parentSpanContext */ + parentSpanContext?: SpanContext; /** Span name */ name: string; diff --git a/experimental/packages/otlp-transformer/src/trace/internal.ts b/experimental/packages/otlp-transformer/src/trace/internal.ts index da94baf7473..5f4ba3ad639 100644 --- a/experimental/packages/otlp-transformer/src/trace/internal.ts +++ b/experimental/packages/otlp-transformer/src/trace/internal.ts @@ -40,7 +40,7 @@ export function sdkSpanToOtlpSpan(span: ReadableSpan, encoder: Encoder): ISpan { return { traceId: encoder.encodeSpanContext(ctx.traceId), spanId: encoder.encodeSpanContext(ctx.spanId), - parentSpanId: encoder.encodeOptionalSpanContext(span.parentSpanId), + parentSpanContext: span.parentSpanContext, traceState: ctx.traceState?.serialize(), name: span.name, // Span kind is offset by 1 because the API does not define a value for unset diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index 7fa0be3674b..784904f4f72 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -77,7 +77,11 @@ function createExpectedSpanJson(options: OtlpEncodingOptions) { { traceId: traceId, spanId: spanId, - parentSpanId: parentSpanId, + parentSpanContext: { + spanId: parentSpanId, + traceId: traceId, + traceFlags: '01', + }, traceState: 'span=bar', name: 'span-name', kind: ESpanKind.SPAN_KIND_CLIENT, @@ -168,7 +172,11 @@ function createExpectedSpanProtobuf() { traceId: traceId, spanId: spanId, traceState: 'span=bar', - parentSpanId: parentSpanId, + parentSpanContext: { + spanId: parentSpanId, + traceId: traceId, + traceFlags: '01', + }, name: 'span-name', kind: ESpanKind.SPAN_KIND_CLIENT, links: [ @@ -244,7 +252,11 @@ describe('Trace', () => { isRemote: false, traceState: new TraceState('span=bar'), }), - parentSpanId: '0000000000000001', + parentSpanContext: { + spanId: '0000000000000001', + traceId: '', + traceFlags: TraceFlags.SAMPLED, + }, attributes: { 'string-attribute': 'some attribute value' }, duration: [1, 300000000], endTime: [1640715558, 642725388], @@ -330,25 +342,25 @@ describe('Trace', () => { }); it('serializes a span without a parent with useHex = true', () => { - (span as any).parentSpanId = undefined; + (span as any).parentSpanContext = undefined; const exportRequest = createExportTraceServiceRequest([span], { useHex: true, }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanId, + exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanContext?.spanId, undefined ); }); it('serializes a span without a parent with useHex = false', () => { - (span as any).parentSpanId = undefined; + (span as any).parentSpanContext = undefined; const exportRequest = createExportTraceServiceRequest([span], { useHex: false, }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanId, + exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanContext?.spanId, undefined ); }); diff --git a/experimental/packages/shim-opencensus/test/ShimSpan.test.ts b/experimental/packages/shim-opencensus/test/ShimSpan.test.ts index f8883cf10c0..b8c84ca5706 100644 --- a/experimental/packages/shim-opencensus/test/ShimSpan.test.ts +++ b/experimental/packages/shim-opencensus/test/ShimSpan.test.ts @@ -107,7 +107,7 @@ describe('ShimSpan', () => { assert.strictEqual(childSpan.name, 'span'); assert.deepStrictEqual( - childSpan.parentSpanId, + childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId ); }); @@ -120,7 +120,7 @@ describe('ShimSpan', () => { assert.strictEqual(childSpan.name, 'child'); assert.deepStrictEqual( - childSpan.parentSpanId, + childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId ); }); diff --git a/experimental/packages/shim-opencensus/test/ShimTracer.test.ts b/experimental/packages/shim-opencensus/test/ShimTracer.test.ts index d9cf64f0dc4..79b77933ac3 100644 --- a/experimental/packages/shim-opencensus/test/ShimTracer.test.ts +++ b/experimental/packages/shim-opencensus/test/ShimTracer.test.ts @@ -92,7 +92,7 @@ describe('ShimTracer', () => { otelSpans[0].spanContext().traceId, '9e7ecdc193765065fee1efe757fdd874' ); - assert.strictEqual(otelSpans[0].parentSpanId, '4bf6239d37d8b0f0'); + assert.strictEqual(otelSpans[0].parentSpanContext?.spanId, '4bf6239d37d8b0f0'); }); it('should set the span as root span in context', async () => { @@ -154,7 +154,7 @@ describe('ShimTracer', () => { parent.end(); }); assert.strictEqual( - childSpan.parentSpanId, + childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId ); }); @@ -171,7 +171,7 @@ describe('ShimTracer', () => { } ); }); - assert.strictEqual(childSpan.parentSpanId, rootSpan.spanContext().spanId); + assert.strictEqual(childSpan.parentSpanContext?.spanId, rootSpan.spanContext().spanId); }); }); diff --git a/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts b/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts index a1034bf081e..b7cf184d197 100644 --- a/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts +++ b/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts @@ -38,7 +38,7 @@ describe('OpenTelemetry sandwich', () => { childSpan.spanContext().traceId, parentSpan.spanContext().traceId ); - assert.strictEqual(childSpan.parentSpanId, parentSpan.spanContext().spanId); + assert.strictEqual(childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId); }); it('should maintain parent-child relationship for OC -> OTel', async () => { @@ -55,7 +55,7 @@ describe('OpenTelemetry sandwich', () => { childSpan.spanContext().traceId, parentSpan.spanContext().traceId ); - assert.strictEqual(childSpan.parentSpanId, parentSpan.spanContext().spanId); + assert.strictEqual(childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId); }); it('should maintain structure for OTel -> OC -> OTel', async () => { @@ -80,9 +80,9 @@ describe('OpenTelemetry sandwich', () => { parentSpan.spanContext().traceId ); assert.strictEqual( - middleSpan.parentSpanId, + middleSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId ); - assert.strictEqual(childSpan.parentSpanId, middleSpan.spanContext().spanId); + assert.strictEqual(childSpan.parentSpanContext?.spanId, middleSpan.spanContext().spanId); }); }); diff --git a/packages/opentelemetry-exporter-jaeger/src/transform.ts b/packages/opentelemetry-exporter-jaeger/src/transform.ts index 9a82e231407..20e5cffed89 100644 --- a/packages/opentelemetry-exporter-jaeger/src/transform.ts +++ b/packages/opentelemetry-exporter-jaeger/src/transform.ts @@ -43,8 +43,8 @@ export function spanToThrift(span: ReadableSpan): ThriftSpan { const traceId = span.spanContext().traceId.padStart(32, '0'); const traceIdHigh = traceId.slice(0, 16); const traceIdLow = traceId.slice(16); - const parentSpan = span.parentSpanId - ? Utils.encodeInt64(span.parentSpanId) + const parentSpan = span.parentSpanContext?.spanId + ? Utils.encodeInt64(span.parentSpanContext.spanId) : ThriftUtils.emptyBuffer; const tags = Object.keys(span.attributes).map( diff --git a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts index 2baaace92a1..38dd314ec2a 100644 --- a/packages/opentelemetry-exporter-jaeger/test/transform.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/transform.test.ts @@ -237,7 +237,11 @@ describe('transform', () => { code: api.SpanStatusCode.OK, }, attributes: {}, - parentSpanId: '3e0c63257de34c92', + parentSpanContext: { + traceId: 'a4cda95b652f4a1592b449d5929fda1b', + spanId: '3e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + }, links: [ { context: { diff --git a/packages/opentelemetry-exporter-zipkin/src/transform.ts b/packages/opentelemetry-exporter-zipkin/src/transform.ts index 06fbe5973a6..40543571237 100644 --- a/packages/opentelemetry-exporter-zipkin/src/transform.ts +++ b/packages/opentelemetry-exporter-zipkin/src/transform.ts @@ -43,7 +43,7 @@ export function toZipkinSpan( ): zipkinTypes.Span { const zipkinSpan: zipkinTypes.Span = { traceId: span.spanContext().traceId, - parentId: span.parentSpanId, + parentId: span.parentSpanContext?.spanId, name: span.name, id: span.spanContext().spanId, kind: ZIPKIN_SPAN_KIND_MAPPING[span.kind], diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index 0c78dbbcf87..15e37f621da 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -46,6 +46,11 @@ const resource = { 'telemetry.sdk.version': VERSION, }, } as unknown as IResource; +const parentSpanContext: api.SpanContext = { + traceId: '', + spanId: '5c1c63257de34c67', + traceFlags: api.TraceFlags.SAMPLED, +}; const parentId = '5c1c63257de34c67'; const spanContext: api.SpanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', @@ -66,7 +71,7 @@ function getSpan(options: Partial): ReadableSpan { endTime: options.endTime || endTime, duration: options.duration || duration, spanContext: () => spanContext, - parentSpanId: options.parentSpanId || parentId, + parentSpanContext: options.parentSpanContext || parentSpanContext.spanId, attributes: options.attributes || {}, events: options.events || [], status: options.status || { code: api.SpanStatusCode.UNSET }, @@ -136,42 +141,6 @@ describe('transform', () => { traceId: span.spanContext().traceId, }); }); - it("should skip parentSpanId if doesn't exist", () => { - const span = getSpan({ - parentSpanId: undefined, - }); - - const zipkinSpan = toZipkinSpan( - span, - 'my-service', - defaultStatusCodeTagName, - defaultStatusErrorTagName - ); - assert.deepStrictEqual(zipkinSpan, { - kind: 'SERVER', - annotations: undefined, - duration: Math.round( - hrTimeToMicroseconds(hrTimeDuration(span.startTime, span.endTime)) - ), - id: span.spanContext().spanId, - localEndpoint: { - serviceName: 'my-service', - }, - name: span.name, - parentId: undefined, - tags: { - [SEMRESATTRS_SERVICE_NAME]: 'zipkin-test', - cost: '112.12', - service: 'ui', - version: '1', - 'telemetry.sdk.language': 'nodejs', - 'telemetry.sdk.name': 'opentelemetry', - 'telemetry.sdk.version': VERSION, - }, - timestamp: hrTimeToMicroseconds(span.startTime), - traceId: span.spanContext().traceId, - }); - }); // SpanKind mapping tests [ { ot: api.SpanKind.CLIENT, zipkin: 'CLIENT' }, @@ -185,7 +154,6 @@ describe('transform', () => { } to Zipkin ${item.zipkin}`, () => { const span = getSpan({ kind: item.ot, - parentSpanId: undefined, }); const zipkinSpan = toZipkinSpan( span, @@ -224,7 +192,6 @@ describe('transform', () => { describe('_toZipkinTags', () => { it('should convert OpenTelemetry attributes to Zipkin tags', () => { const span = getSpan({ - parentSpanId: undefined, attributes: { key1: 'value1', key2: 'value2', @@ -250,7 +217,6 @@ describe('transform', () => { }); it('should map OpenTelemetry constructor attributes to a Zipkin tag', () => { const span = getSpan({ - parentSpanId: undefined, attributes: { key1: 'value1', key2: 'value2', @@ -277,7 +243,6 @@ describe('transform', () => { }); it('should map OpenTelemetry SpanStatus.code to a Zipkin tag', () => { const span = getSpan({ - parentSpanId: undefined, attributes: { key1: 'value1', key2: 'value2', @@ -305,7 +270,6 @@ describe('transform', () => { }); it('should map OpenTelemetry SpanStatus.message to a Zipkin tag', () => { const span = getSpan({ - parentSpanId: undefined, attributes: { key1: 'value1', key2: 'value2', @@ -337,7 +301,6 @@ describe('transform', () => { describe('_toZipkinAnnotations', () => { it('should convert OpenTelemetry events to Zipkin annotations', () => { const span = getSpan({ - parentSpanId: undefined, events: [ { name: 'my-event1', time: hrTime(Date.now()) }, { diff --git a/packages/opentelemetry-exporter-zipkin/test/helper.ts b/packages/opentelemetry-exporter-zipkin/test/helper.ts index 22fb84c8778..fb4d339f257 100644 --- a/packages/opentelemetry-exporter-zipkin/test/helper.ts +++ b/packages/opentelemetry-exporter-zipkin/test/helper.ts @@ -30,7 +30,11 @@ export const mockedReadableSpan: ReadableSpan = { traceFlags: TraceFlags.SAMPLED, }; }, - parentSpanId: '78a8915098864388', + parentSpanContext: { + spanId: '78a8915098864388', + traceId: '1f1008dc8e270e85c40a0d7c3939b278', + traceFlags: TraceFlags.SAMPLED, + }, startTime: [1574120165, 429803070], endTime: [1574120165, 438688070], ended: true, diff --git a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts index 357d9e01763..ff4062565b6 100644 --- a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts @@ -138,7 +138,11 @@ describe('Zipkin Exporter - node', () => { const span1: ReadableSpan = { name: 'my-span', kind: api.SpanKind.INTERNAL, - parentSpanId, + parentSpanContext: { + spanId: parentSpanId, + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + traceFlags: TraceFlags.NONE, + }, spanContext: () => { return { traceId: 'd4cda95b652f4a1592b449d5929fda1b', @@ -359,7 +363,11 @@ describe('Zipkin Exporter - node', () => { const span1: ReadableSpan = { name: 'my-span', kind: api.SpanKind.INTERNAL, - parentSpanId, + parentSpanContext: { + spanId: parentSpanId, + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + traceFlags: TraceFlags.NONE, + }, spanContext: () => ({ traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', @@ -454,7 +462,11 @@ describe('Zipkin Exporter - node', () => { const span1: ReadableSpan = { name: 'my-span', kind: api.SpanKind.INTERNAL, - parentSpanId, + parentSpanContext: { + spanId: parentSpanId, + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + traceFlags: TraceFlags.NONE, + }, spanContext: () => ({ traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', diff --git a/packages/opentelemetry-sdk-trace-base/src/Span.ts b/packages/opentelemetry-sdk-trace-base/src/Span.ts index 6098b47f179..ab3f3776ff9 100644 --- a/packages/opentelemetry-sdk-trace-base/src/Span.ts +++ b/packages/opentelemetry-sdk-trace-base/src/Span.ts @@ -67,7 +67,7 @@ interface SpanOptions { spanContext: SpanContext; name: string; kind: SpanKind; - parentSpanId?: string; + parentSpanContext?: SpanContext; links?: Link[]; startTime?: TimeInput; attributes?: Attributes; @@ -83,7 +83,7 @@ export class SpanImpl implements Span { // purposes but are not intended to be written-to directly. private readonly _spanContext: SpanContext; readonly kind: SpanKind; - readonly parentSpanId?: string; + readonly parentSpanContext?: SpanContext; readonly attributes: Attributes = {}; readonly links: Link[] = []; readonly events: TimedEvent[] = []; @@ -127,7 +127,7 @@ export class SpanImpl implements Span { this._spanProcessor = opts.spanProcessor; this.name = opts.name; - this.parentSpanId = opts.parentSpanId; + this.parentSpanContext = opts.parentSpanContext; this.kind = opts.kind; this.links = opts.links || []; this.startTime = this._getTime(opts.startTime ?? now); diff --git a/packages/opentelemetry-sdk-trace-base/src/Tracer.ts b/packages/opentelemetry-sdk-trace-base/src/Tracer.ts index 28f0e91adfa..011131d61d8 100644 --- a/packages/opentelemetry-sdk-trace-base/src/Tracer.ts +++ b/packages/opentelemetry-sdk-trace-base/src/Tracer.ts @@ -88,7 +88,6 @@ export class Tracer implements api.Tracer { const spanId = this._idGenerator.generateSpanId(); let traceId; let traceState; - let parentSpanId; if ( !parentSpanContext || !api.trace.isSpanContextValid(parentSpanContext) @@ -99,7 +98,6 @@ export class Tracer implements api.Tracer { // New child span. traceId = parentSpanContext.traceId; traceState = parentSpanContext.traceState; - parentSpanId = parentSpanContext.spanId; } const spanKind = options.kind ?? api.SpanKind.INTERNAL; @@ -149,7 +147,7 @@ export class Tracer implements api.Tracer { name, kind: spanKind, links, - parentSpanId, + parentSpanContext: parentSpanContext, attributes: initAttributes, startTime: options.startTime, spanProcessor: this._spanProcessor, diff --git a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts index 64033912543..148a2a81281 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts @@ -69,7 +69,7 @@ export class ConsoleSpanExporter implements SpanExporter { }, instrumentationScope: span.instrumentationScope, traceId: span.spanContext().traceId, - parentId: span.parentSpanId, + parentSpanContext: span.parentSpanContext, traceState: span.spanContext().traceState?.serialize(), name: span.name, id: span.spanContext().spanId, diff --git a/packages/opentelemetry-sdk-trace-base/src/export/ReadableSpan.ts b/packages/opentelemetry-sdk-trace-base/src/export/ReadableSpan.ts index 15b4ceff9c0..4183c1fc9f2 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/ReadableSpan.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/ReadableSpan.ts @@ -30,7 +30,7 @@ export interface ReadableSpan { readonly name: string; readonly kind: SpanKind; readonly spanContext: () => SpanContext; - readonly parentSpanId?: string; + readonly parentSpanContext?: SpanContext; readonly startTime: HrTime; readonly endTime: HrTime; readonly status: SpanStatus; diff --git a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts index d041060c4f6..3f32b0fb422 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts @@ -588,7 +588,7 @@ describe('BasicTracerProvider', () => { ) ); assert.ok(span instanceof SpanImpl); - assert.deepStrictEqual((span as Span).parentSpanId, undefined); + assert.deepStrictEqual((span as Span).parentSpanContext?.spanId, undefined); }); it('should start a span with name and with invalid spancontext', () => { diff --git a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts index 954b0aa6da6..24f5a192606 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts @@ -1005,14 +1005,18 @@ describe('Span', () => { spanContext, name: 'my-span', kind: SpanKind.INTERNAL, - parentSpanId: parentId, + parentSpanContext: { + spanId: parentId, + traceId: "", + traceFlags: TraceFlags.SAMPLED, + }, spanLimits: tracer.getSpanLimits(), spanProcessor: tracer['_spanProcessor'], }); assert.strictEqual(span.name, 'my-span'); assert.strictEqual(span.kind, SpanKind.INTERNAL); - assert.strictEqual(span.parentSpanId, parentId); + assert.strictEqual(span.parentSpanContext?.spanId, parentId); assert.strictEqual(span.spanContext().traceId, spanContext.traceId); assert.deepStrictEqual(span.status, { code: SpanStatusCode.UNSET, diff --git a/packages/opentelemetry-sdk-trace-base/test/common/Tracer.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/Tracer.test.ts index 6881fbf397b..36c51f7375e 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/Tracer.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/Tracer.test.ts @@ -234,7 +234,7 @@ describe('Tracer', () => { undefined, trace.setSpanContext(ROOT_CONTEXT, parent) ); - assert.strictEqual((span as Span).parentSpanId, parent.spanId); + assert.strictEqual((span as Span).parentSpanContext?.spanId, parent.spanId); assert.strictEqual(span.spanContext().traceId, parent.traceId); assert.strictEqual(span.spanContext().traceState, traceState); }); @@ -256,7 +256,7 @@ describe('Tracer', () => { undefined, trace.setSpanContext(ROOT_CONTEXT, parent) ); - assert.strictEqual((span as Span).parentSpanId, undefined); + assert.strictEqual((span as Span).parentSpanContext?.spanId, undefined); }); it('should pass the same context to sampler and spanprocessor', () => { @@ -282,7 +282,7 @@ describe('Tracer', () => { tp['_activeSpanProcessor'] ); const span = tracer.startSpan('a', {}, context) as Span; - assert.strictEqual(span.parentSpanId, parent.spanId); + assert.strictEqual(span.parentSpanContext?.spanId, parent.spanId); sinon.assert.calledOnceWithExactly( shouldSampleSpy, context, @@ -318,7 +318,7 @@ describe('Tracer', () => { tp['_activeSpanProcessor'] ); const span = tracer.startSpan('a', { root: true }, context) as Span; - assert.strictEqual(span.parentSpanId, undefined); + assert.strictEqual(span.parentSpanContext?.spanId, undefined); sinon.assert.calledOnce(shouldSampleSpy); sinon.assert.calledOnce(onStartSpy); const samplerContext = shouldSampleSpy.firstCall.args[0]; diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index e4a45731b7b..80c3717a174 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -63,8 +63,8 @@ describe('InMemorySpanExporter', () => { span2.spanContext().traceId, span3.spanContext().traceId ); - assert.strictEqual(span1.parentSpanId, span2.spanContext().spanId); - assert.strictEqual(span2.parentSpanId, span3.spanContext().spanId); + assert.strictEqual(span1.parentSpanContext?.spanId, span2.spanContext().spanId); + assert.strictEqual(span2.parentSpanContext?.spanId, span3.spanContext().spanId); }); it('should shutdown the exporter', () => { diff --git a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts index 11952d31e03..0823cb43180 100644 --- a/packages/opentelemetry-shim-opentracing/test/Shim.test.ts +++ b/packages/opentelemetry-shim-opentracing/test/Shim.test.ts @@ -226,7 +226,7 @@ describe('OpenTracing Shim', () => { childOf: span, }) as SpanShim; assert.strictEqual( - (childSpan.getSpan() as Span).parentSpanId, + (childSpan.getSpan() as Span).parentSpanContext?.spanId, context.toSpanId() ); assert.strictEqual( @@ -240,7 +240,7 @@ describe('OpenTracing Shim', () => { childOf: context, }) as SpanShim; assert.strictEqual( - (childSpan.getSpan() as Span).parentSpanId, + (childSpan.getSpan() as Span).parentSpanContext?.spanId, context.toSpanId() ); assert.strictEqual( From 6ec38f1c1cfab62079eba50003a81306e05e597b Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Tue, 11 Feb 2025 15:00:41 -0800 Subject: [PATCH 02/11] Fix lint and add changelog. --- CHANGELOG.md | 1 + .../test/protobuf-ts-utils.ts | 5 ++++- .../test/utils/assertionUtils.ts | 5 ++++- .../packages/otlp-transformer/test/trace.test.ts | 6 ++++-- .../shim-opencensus/test/ShimTracer.test.ts | 10 ++++++++-- .../shim-opencensus/test/otel-sandwich.test.ts | 15 ++++++++++++--- .../test/common/BasicTracerProvider.test.ts | 5 ++++- .../test/common/Span.test.ts | 2 +- .../common/export/InMemorySpanExporter.test.ts | 10 ++++++++-- 9 files changed, 46 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90f5b28b292..2325151d3a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se ### :boom: Breaking Change +* feat(sdk-trace-base): Add `parentSpanContext` and remove `parentSpanId` from `Span` and `ReadableSpan` [#5450](/~https://github.com/open-telemetry/opentelemetry-js/pull/5450) @JacksonWeber * feat(sdk-metrics)!: drop deprecated `type` field on `MetricDescriptor` [#5291](/~https://github.com/open-telemetry/opentelemetry-js/pull/5291) @chancancode * feat(sdk-metrics)!: drop deprecated `InstrumentDescriptor` type; use `MetricDescriptor` instead [#5277](/~https://github.com/open-telemetry/opentelemetry-js/pull/5266) @chancancode * feat(sdk-metrics)!: bump minimum version of `@opentelemetry/api` peer dependency to 1.9.0 [#5254](/~https://github.com/open-telemetry/opentelemetry-js/pull/5254) @chancancode diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts index 893dbcd727e..1e328a7d09b 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts @@ -103,6 +103,9 @@ export function assertExportedSpans( rootSpan?.spanContext().traceId, serverSpan.spanContext().traceId ); - assert.strictEqual(rootSpan?.spanContext().spanId, clientSpan.parentSpanContext?.spanId); + assert.strictEqual( + rootSpan?.spanContext().spanId, + clientSpan.parentSpanContext?.spanId + ); } } diff --git a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts index 20ea94c7a80..fa67861326b 100644 --- a/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts +++ b/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts @@ -99,7 +99,10 @@ export const assertPropagation = ( const targetSpanContext = incomingSpan.spanContext(); const sourceSpanContext = outgoingSpan.spanContext(); assert.strictEqual(targetSpanContext.traceId, sourceSpanContext.traceId); - assert.strictEqual(incomingSpan.parentSpanContext?.spanId, sourceSpanContext.spanId); + assert.strictEqual( + incomingSpan.parentSpanContext?.spanId, + sourceSpanContext.spanId + ); assert.strictEqual( targetSpanContext.traceFlags, sourceSpanContext.traceFlags diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index 784904f4f72..f386f6930a6 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -348,7 +348,8 @@ describe('Trace', () => { }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanContext?.spanId, + exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] + .parentSpanContext?.spanId, undefined ); }); @@ -360,7 +361,8 @@ describe('Trace', () => { }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0].parentSpanContext?.spanId, + exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] + .parentSpanContext?.spanId, undefined ); }); diff --git a/experimental/packages/shim-opencensus/test/ShimTracer.test.ts b/experimental/packages/shim-opencensus/test/ShimTracer.test.ts index 79b77933ac3..eb57136c01a 100644 --- a/experimental/packages/shim-opencensus/test/ShimTracer.test.ts +++ b/experimental/packages/shim-opencensus/test/ShimTracer.test.ts @@ -92,7 +92,10 @@ describe('ShimTracer', () => { otelSpans[0].spanContext().traceId, '9e7ecdc193765065fee1efe757fdd874' ); - assert.strictEqual(otelSpans[0].parentSpanContext?.spanId, '4bf6239d37d8b0f0'); + assert.strictEqual( + otelSpans[0].parentSpanContext?.spanId, + '4bf6239d37d8b0f0' + ); }); it('should set the span as root span in context', async () => { @@ -171,7 +174,10 @@ describe('ShimTracer', () => { } ); }); - assert.strictEqual(childSpan.parentSpanContext?.spanId, rootSpan.spanContext().spanId); + assert.strictEqual( + childSpan.parentSpanContext?.spanId, + rootSpan.spanContext().spanId + ); }); }); diff --git a/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts b/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts index b7cf184d197..67a6ef46d60 100644 --- a/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts +++ b/experimental/packages/shim-opencensus/test/otel-sandwich.test.ts @@ -38,7 +38,10 @@ describe('OpenTelemetry sandwich', () => { childSpan.spanContext().traceId, parentSpan.spanContext().traceId ); - assert.strictEqual(childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId); + assert.strictEqual( + childSpan.parentSpanContext?.spanId, + parentSpan.spanContext().spanId + ); }); it('should maintain parent-child relationship for OC -> OTel', async () => { @@ -55,7 +58,10 @@ describe('OpenTelemetry sandwich', () => { childSpan.spanContext().traceId, parentSpan.spanContext().traceId ); - assert.strictEqual(childSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId); + assert.strictEqual( + childSpan.parentSpanContext?.spanId, + parentSpan.spanContext().spanId + ); }); it('should maintain structure for OTel -> OC -> OTel', async () => { @@ -83,6 +89,9 @@ describe('OpenTelemetry sandwich', () => { middleSpan.parentSpanContext?.spanId, parentSpan.spanContext().spanId ); - assert.strictEqual(childSpan.parentSpanContext?.spanId, middleSpan.spanContext().spanId); + assert.strictEqual( + childSpan.parentSpanContext?.spanId, + middleSpan.spanContext().spanId + ); }); }); diff --git a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts index 3f32b0fb422..84c9b7b6455 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts @@ -588,7 +588,10 @@ describe('BasicTracerProvider', () => { ) ); assert.ok(span instanceof SpanImpl); - assert.deepStrictEqual((span as Span).parentSpanContext?.spanId, undefined); + assert.deepStrictEqual( + (span as Span).parentSpanContext?.spanId, + undefined + ); }); it('should start a span with name and with invalid spancontext', () => { diff --git a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts index 24f5a192606..9e33a97f3e0 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/Span.test.ts @@ -1007,7 +1007,7 @@ describe('Span', () => { kind: SpanKind.INTERNAL, parentSpanContext: { spanId: parentId, - traceId: "", + traceId: '', traceFlags: TraceFlags.SAMPLED, }, spanLimits: tracer.getSpanLimits(), diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index 80c3717a174..bf94ef01eab 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -63,8 +63,14 @@ describe('InMemorySpanExporter', () => { span2.spanContext().traceId, span3.spanContext().traceId ); - assert.strictEqual(span1.parentSpanContext?.spanId, span2.spanContext().spanId); - assert.strictEqual(span2.parentSpanContext?.spanId, span3.spanContext().spanId); + assert.strictEqual( + span1.parentSpanContext?.spanId, + span2.spanContext().spanId + ); + assert.strictEqual( + span2.parentSpanContext?.spanId, + span3.spanContext().spanId + ); }); it('should shutdown the exporter', () => { From 3aa6c308136e4f39aec9abf62cb97ab7ea5c9671 Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Wed, 12 Feb 2025 23:42:22 +0000 Subject: [PATCH 03/11] Fix Span vs. ISpan --- api/src/trace/span_context.ts | 6 +-- api/src/trace/spancontext-utils.ts | 3 +- .../src/trace/internal-types.ts | 5 +-- .../otlp-transformer/src/trace/internal.ts | 5 ++- .../otlp-transformer/test/trace.test.ts | 30 +++++-------- package-lock.json | 42 +++++++++---------- .../test/common/transform.test.ts | 8 ++-- .../src/Tracer.ts | 4 +- .../common/export/ConsoleSpanExporter.test.ts | 2 +- 9 files changed, 51 insertions(+), 54 deletions(-) diff --git a/api/src/trace/span_context.ts b/api/src/trace/span_context.ts index 9546a39aaf1..ace03d2861e 100644 --- a/api/src/trace/span_context.ts +++ b/api/src/trace/span_context.ts @@ -29,13 +29,13 @@ export interface SpanContext { * generated bytes, encoded as a 32 lowercase hex characters corresponding to * 128 bits. */ - traceId: string; + traceId: any; /** * 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; + spanId: any; /** * Only true if the SpanContext was propagated from a remote parent. */ @@ -50,7 +50,7 @@ export interface SpanContext { * * see {@link TraceFlags} for valid flag values. */ - traceFlags: number; + traceFlags: any; /** * Tracing-system-specific info to propagate. * diff --git a/api/src/trace/spancontext-utils.ts b/api/src/trace/spancontext-utils.ts index 1e22b24d980..2b58e5ab9c0 100644 --- a/api/src/trace/spancontext-utils.ts +++ b/api/src/trace/spancontext-utils.ts @@ -43,7 +43,8 @@ export function isValidSpanId(spanId: string): boolean { */ export function isSpanContextValid(spanContext: SpanContext): boolean { return ( - isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId) + isValidTraceId(spanContext.traceId as string) && + isValidSpanId(spanContext.spanId as string) ); } diff --git a/experimental/packages/otlp-transformer/src/trace/internal-types.ts b/experimental/packages/otlp-transformer/src/trace/internal-types.ts index 0bf32906e42..94e78072b27 100644 --- a/experimental/packages/otlp-transformer/src/trace/internal-types.ts +++ b/experimental/packages/otlp-transformer/src/trace/internal-types.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { SpanContext } from '@opentelemetry/api'; import { Fixed64, IInstrumentationScope, @@ -63,8 +62,8 @@ export interface ISpan { /** Span traceState */ traceState?: string | null; - /** Span parentSpanContext */ - parentSpanContext?: SpanContext; + /** Span parentSpanId */ + parentSpanId?: string | Uint8Array; /** Span name */ name: string; diff --git a/experimental/packages/otlp-transformer/src/trace/internal.ts b/experimental/packages/otlp-transformer/src/trace/internal.ts index 5f4ba3ad639..2cd9bfda5da 100644 --- a/experimental/packages/otlp-transformer/src/trace/internal.ts +++ b/experimental/packages/otlp-transformer/src/trace/internal.ts @@ -37,10 +37,13 @@ import { getOtlpEncoder } from '../common/utils'; export function sdkSpanToOtlpSpan(span: ReadableSpan, encoder: Encoder): ISpan { const ctx = span.spanContext(); const status = span.status; + const parentSpanId = span.parentSpanContext?.spanId + ? encoder.encodeSpanContext(span.parentSpanContext?.spanId) + : undefined; return { traceId: encoder.encodeSpanContext(ctx.traceId), spanId: encoder.encodeSpanContext(ctx.spanId), - parentSpanContext: span.parentSpanContext, + parentSpanId: parentSpanId, traceState: ctx.traceState?.serialize(), name: span.name, // Span kind is offset by 1 because the API does not define a value for unset diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index d18b6e9929d..05c68baca2a 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -26,6 +26,7 @@ import { createExportTraceServiceRequest } from '../src/trace/internal'; import { ProtobufTraceSerializer } from '../src/trace/protobuf'; import { JsonTraceSerializer } from '../src/trace/json'; import { hexToBinary } from '../src/common/hex-to-binary'; +import { ISpan } from '../src/trace/internal-types'; function createExpectedSpanJson(options: OtlpEncodingOptions) { const useHex = options.useHex ?? false; @@ -78,11 +79,7 @@ function createExpectedSpanJson(options: OtlpEncodingOptions) { { traceId: traceId, spanId: spanId, - parentSpanContext: { - spanId: parentSpanId, - traceId: traceId, - traceFlags: '01', - }, + parentSpanId: parentSpanId, traceState: 'span=bar', name: 'span-name', kind: ESpanKind.SPAN_KIND_CLIENT, @@ -173,11 +170,7 @@ function createExpectedSpanProtobuf() { traceId: traceId, spanId: spanId, traceState: 'span=bar', - parentSpanContext: { - spanId: parentSpanId, - traceId: traceId, - traceFlags: '01', - }, + parentSpanId: parentSpanId, name: 'span-name', kind: ESpanKind.SPAN_KIND_CLIENT, links: [ @@ -253,9 +246,10 @@ describe('Trace', () => { isRemote: false, traceState: new TraceState('span=bar'), }), + // parentSpanId: '0000000000000001', parentSpanContext: { spanId: '0000000000000001', - traceId: '', + traceId: '00000000000000000000000000000001', traceFlags: TraceFlags.SAMPLED, }, attributes: { 'string-attribute': 'some attribute value' }, @@ -343,27 +337,27 @@ describe('Trace', () => { }); it('serializes a span without a parent with useHex = true', () => { - (span as any).parentSpanContext = undefined; + (span as any).parentSpanContext.spanId = undefined; const exportRequest = createExportTraceServiceRequest([span], { useHex: true, }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] - .parentSpanContext?.spanId, + (exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] as ISpan) + .parentSpanId, undefined ); }); it('serializes a span without a parent with useHex = false', () => { - (span as any).parentSpanContext = undefined; + (span as any).parentSpanContext.spanId = undefined; const exportRequest = createExportTraceServiceRequest([span], { useHex: false, }); assert.ok(exportRequest); assert.strictEqual( - exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] - .parentSpanContext?.spanId, + (exportRequest.resourceSpans?.[0].scopeSpans[0].spans?.[0] as ISpan) + .parentSpanId, undefined ); }); @@ -462,7 +456,6 @@ describe('Trace', () => { root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.decode( serialized ); - const expected = createExpectedSpanProtobuf(); const decodedObj = root.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest.toObject( @@ -477,7 +470,6 @@ describe('Trace', () => { bytes: String, } ); - assert.deepStrictEqual(decodedObj, expected); }); diff --git a/package-lock.json b/package-lock.json index a229cbf653f..f5cc4ec3a7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -649,7 +649,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -1096,7 +1096,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -1739,7 +1739,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -2019,7 +2019,7 @@ "@types/semver": "7.5.8", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -2066,7 +2066,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -2361,7 +2361,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -3168,7 +3168,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.20", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -3674,7 +3674,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.20", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -29309,7 +29309,7 @@ "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -29641,7 +29641,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -30350,7 +30350,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -34019,7 +34019,7 @@ "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -34559,7 +34559,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -34774,7 +34774,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -35023,7 +35023,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -35149,7 +35149,7 @@ "@types/shimmer": "^1.2.0", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "codecov": "3.8.3", "cross-var": "1.1.0", @@ -35281,7 +35281,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -35481,7 +35481,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -36238,7 +36238,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.20", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -36795,7 +36795,7 @@ "@types/node": "18.6.5", "@types/sinon": "17.0.3", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", @@ -37024,7 +37024,7 @@ "@types/node": "18.6.5", "@types/sinon": "10.0.20", "@types/webpack-env": "1.16.3", - "babel-loader": "^9.2.1", + "babel-loader": "9.2.1", "babel-plugin-istanbul": "7.0.0", "cross-var": "1.1.0", "karma": "6.4.4", diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index 6dc28f2a472..cc3c39ca5ce 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -51,7 +51,7 @@ const parentSpanContext: api.SpanContext = { spanId: '5c1c63257de34c67', traceFlags: api.TraceFlags.SAMPLED, }; -const parentId = '5c1c63257de34c67'; +// const parentId = '5c1c63257de34c67'; const spanContext: api.SpanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', @@ -71,7 +71,7 @@ function getSpan(options: Partial): ReadableSpan { endTime: options.endTime || endTime, duration: options.duration || duration, spanContext: () => spanContext, - parentSpanContext: options.parentSpanContext || parentSpanContext.spanId, + parentSpanContext: options.parentSpanContext || parentSpanContext, attributes: options.attributes || {}, events: options.events || [], status: options.status || { code: api.SpanStatusCode.UNSET }, @@ -125,7 +125,7 @@ describe('transform', () => { serviceName: 'my-service', }, name: span.name, - parentId, + parentId: span.parentSpanContext?.spanId, tags: { key1: 'value1', key2: 'value2', @@ -172,7 +172,7 @@ describe('transform', () => { serviceName: 'my-service', }, name: span.name, - parentId: undefined, + parentId: span.parentSpanContext?.spanId, tags: { [SEMRESATTRS_SERVICE_NAME]: 'zipkin-test', cost: '112.12', diff --git a/packages/opentelemetry-sdk-trace-base/src/Tracer.ts b/packages/opentelemetry-sdk-trace-base/src/Tracer.ts index 011131d61d8..3bfee2d4f20 100644 --- a/packages/opentelemetry-sdk-trace-base/src/Tracer.ts +++ b/packages/opentelemetry-sdk-trace-base/src/Tracer.ts @@ -86,6 +86,7 @@ export class Tracer implements api.Tracer { const parentSpanContext = parentSpan?.spanContext(); const spanId = this._idGenerator.generateSpanId(); + let validParentSpanContext; let traceId; let traceState; if ( @@ -98,6 +99,7 @@ export class Tracer implements api.Tracer { // New child span. traceId = parentSpanContext.traceId; traceState = parentSpanContext.traceState; + validParentSpanContext = parentSpanContext; } const spanKind = options.kind ?? api.SpanKind.INTERNAL; @@ -147,7 +149,7 @@ export class Tracer implements api.Tracer { name, kind: spanKind, links, - parentSpanContext: parentSpanContext, + parentSpanContext: validParentSpanContext, attributes: initAttributes, startTime: options.startTime, spanProcessor: this._spanProcessor, diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts index 3390ea56afb..d89edd8d615 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts @@ -86,7 +86,7 @@ describe('ConsoleSpanExporter', () => { 'kind', 'links', 'name', - 'parentId', + 'parentSpanContext', 'resource', 'status', 'timestamp', From 29c282228f105f0e0468ccad198977332bfe5bfc Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Wed, 12 Feb 2025 23:50:43 +0000 Subject: [PATCH 04/11] Fix span context types. --- api/src/trace/span_context.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/trace/span_context.ts b/api/src/trace/span_context.ts index ace03d2861e..9546a39aaf1 100644 --- a/api/src/trace/span_context.ts +++ b/api/src/trace/span_context.ts @@ -29,13 +29,13 @@ export interface SpanContext { * generated bytes, encoded as a 32 lowercase hex characters corresponding to * 128 bits. */ - traceId: any; + 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: any; + spanId: string; /** * Only true if the SpanContext was propagated from a remote parent. */ @@ -50,7 +50,7 @@ export interface SpanContext { * * see {@link TraceFlags} for valid flag values. */ - traceFlags: any; + traceFlags: number; /** * Tracing-system-specific info to propagate. * From f597ae52818926acf06059a06ebd90ce495eb379 Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Wed, 12 Feb 2025 23:54:34 +0000 Subject: [PATCH 05/11] Remove unneeded typing --- api/src/trace/spancontext-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/trace/spancontext-utils.ts b/api/src/trace/spancontext-utils.ts index 2b58e5ab9c0..ab1554431a9 100644 --- a/api/src/trace/spancontext-utils.ts +++ b/api/src/trace/spancontext-utils.ts @@ -43,8 +43,8 @@ export function isValidSpanId(spanId: string): boolean { */ export function isSpanContextValid(spanContext: SpanContext): boolean { return ( - isValidTraceId(spanContext.traceId as string) && - isValidSpanId(spanContext.spanId as string) + isValidTraceId(spanContext.traceId) && + isValidSpanId(spanContext.spanId) ); } From f7c91f4160205e1cfa85fb845406eb326abdb1e3 Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Wed, 12 Feb 2025 23:56:34 +0000 Subject: [PATCH 06/11] Fix lint. --- api/src/trace/spancontext-utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/src/trace/spancontext-utils.ts b/api/src/trace/spancontext-utils.ts index ab1554431a9..1e22b24d980 100644 --- a/api/src/trace/spancontext-utils.ts +++ b/api/src/trace/spancontext-utils.ts @@ -43,8 +43,7 @@ export function isValidSpanId(spanId: string): boolean { */ export function isSpanContextValid(spanContext: SpanContext): boolean { return ( - isValidTraceId(spanContext.traceId) && - isValidSpanId(spanContext.spanId) + isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId) ); } From 45d3edbc0628f0aaba82bacfd12b1e3ba60f4bd6 Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Thu, 13 Feb 2025 00:03:23 +0000 Subject: [PATCH 07/11] add parentSpanId test. --- .../otlp-transformer/test/trace.test.ts | 1 - .../test/common/transform.test.ts | 37 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index 05c68baca2a..8006400c3e3 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -246,7 +246,6 @@ describe('Trace', () => { isRemote: false, traceState: new TraceState('span=bar'), }), - // parentSpanId: '0000000000000001', parentSpanContext: { spanId: '0000000000000001', traceId: '00000000000000000000000000000001', diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index cc3c39ca5ce..aa29a71e774 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -51,7 +51,6 @@ const parentSpanContext: api.SpanContext = { spanId: '5c1c63257de34c67', traceFlags: api.TraceFlags.SAMPLED, }; -// const parentId = '5c1c63257de34c67'; const spanContext: api.SpanContext = { traceId: 'd4cda95b652f4a1592b449d5929fda1b', spanId: '6e0c63257de34c92', @@ -140,6 +139,42 @@ describe('transform', () => { timestamp: hrTimeToMicroseconds(span.startTime), traceId: span.spanContext().traceId, }); + it("should skip parentSpanId if doesn't exist", () => { + const span = getSpan({ + parentSpanContext: undefined + }); + + const zipkinSpan = toZipkinSpan( + span, + 'my-service', + defaultStatusCodeTagName, + defaultStatusErrorTagName + ); + assert.deepStrictEqual(zipkinSpan, { + kind: 'SERVER', + annotations: undefined, + duration: Math.round( + hrTimeToMicroseconds(hrTimeDuration(span.startTime, span.endTime)) + ), + id: span.spanContext().spanId, + localEndpoint: { + serviceName: 'my-service', + }, + name: span.name, + parentId: undefined, + tags: { + [SEMRESATTRS_SERVICE_NAME]: 'zipkin-test', + cost: '112.12', + service: 'ui', + version: '1', + 'telemetry.sdk.language': 'nodejs', + 'telemetry.sdk.name': 'opentelemetry', + 'telemetry.sdk.version': VERSION, + }, + timestamp: hrTimeToMicroseconds(span.startTime), + traceId: span.spanContext().traceId, + }); + }); }); // SpanKind mapping tests [ From 1a4e6a73d16949788ee8eaae5edf2fdd17ebcde0 Mon Sep 17 00:00:00 2001 From: JacksonWeber Date: Thu, 13 Feb 2025 00:12:11 +0000 Subject: [PATCH 08/11] Fix lint. --- .../test/common/transform.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts index aa29a71e774..b800ce54a81 100644 --- a/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/common/transform.test.ts @@ -141,9 +141,9 @@ describe('transform', () => { }); it("should skip parentSpanId if doesn't exist", () => { const span = getSpan({ - parentSpanContext: undefined + parentSpanContext: undefined, }); - + const zipkinSpan = toZipkinSpan( span, 'my-service', From 7542f46a41b217a6e30158e63c3274c52001e209 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 13 Feb 2025 09:47:10 +0100 Subject: [PATCH 09/11] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b5858d27f4..3051eebe29a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,8 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se ### :boom: Breaking Change -* feat(sdk-trace-base): Add `parentSpanContext` and remove `parentSpanId` from `Span` and `ReadableSpan` [#5450](/~https://github.com/open-telemetry/opentelemetry-js/pull/5450) @JacksonWeber +* feat(sdk-trace-base)!: Add `parentSpanContext` and remove `parentSpanId` from `Span` and `ReadableSpan` [#5450](/~https://github.com/open-telemetry/opentelemetry-js/pull/5450) @JacksonWeber + * (user-facing): the SDK's `Span`s `parentSpanId` was replaced by `parentSpanContext`, to migrate to the new property, please replace `span.parentSpanId` -> `span.parentSpanContext?.spanId` * feat(sdk-metrics)!: drop deprecated `type` field on `MetricDescriptor` [#5291](/~https://github.com/open-telemetry/opentelemetry-js/pull/5291) @chancancode * feat(sdk-metrics)!: drop deprecated `InstrumentDescriptor` type; use `MetricDescriptor` instead [#5277](/~https://github.com/open-telemetry/opentelemetry-js/pull/5266) @chancancode * feat(sdk-metrics)!: bump minimum version of `@opentelemetry/api` peer dependency to 1.9.0 [#5254](/~https://github.com/open-telemetry/opentelemetry-js/pull/5254) @chancancode From a17f85fdb807553f8118932ba032e17e9dcf0da0 Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Thu, 13 Feb 2025 10:52:39 -0800 Subject: [PATCH 10/11] trash --- .../test/fixtures/regenerate.sh | 0 .../packages/otlp-grpc-exporter-base/test/certs/regenerate.sh | 0 integration-tests/tracecontext-integration-test.sh | 0 scripts/lint-semconv-deps.mjs | 0 scripts/semconv/changelog-gen.js | 0 scripts/semconv/generate.sh | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh mode change 100755 => 100644 experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh mode change 100755 => 100644 integration-tests/tracecontext-integration-test.sh mode change 100755 => 100644 scripts/lint-semconv-deps.mjs mode change 100755 => 100644 scripts/semconv/changelog-gen.js mode change 100755 => 100644 scripts/semconv/generate.sh diff --git a/experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh b/experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh old mode 100755 new mode 100644 diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh b/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh old mode 100755 new mode 100644 diff --git a/integration-tests/tracecontext-integration-test.sh b/integration-tests/tracecontext-integration-test.sh old mode 100755 new mode 100644 diff --git a/scripts/lint-semconv-deps.mjs b/scripts/lint-semconv-deps.mjs old mode 100755 new mode 100644 diff --git a/scripts/semconv/changelog-gen.js b/scripts/semconv/changelog-gen.js old mode 100755 new mode 100644 diff --git a/scripts/semconv/generate.sh b/scripts/semconv/generate.sh old mode 100755 new mode 100644 From f9611a6ebab8e06a6817b3e678bc4b0867282d31 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Tue, 18 Feb 2025 17:24:43 +0100 Subject: [PATCH 11/11] Revert "trash" This reverts commit a17f85fdb807553f8118932ba032e17e9dcf0da0. --- .../test/fixtures/regenerate.sh | 0 .../packages/otlp-grpc-exporter-base/test/certs/regenerate.sh | 0 integration-tests/tracecontext-integration-test.sh | 0 scripts/lint-semconv-deps.mjs | 0 scripts/semconv/changelog-gen.js | 0 scripts/semconv/generate.sh | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh mode change 100644 => 100755 experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh mode change 100644 => 100755 integration-tests/tracecontext-integration-test.sh mode change 100644 => 100755 scripts/lint-semconv-deps.mjs mode change 100644 => 100755 scripts/semconv/changelog-gen.js mode change 100644 => 100755 scripts/semconv/generate.sh diff --git a/experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh b/experimental/packages/opentelemetry-instrumentation-http/test/fixtures/regenerate.sh old mode 100644 new mode 100755 diff --git a/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh b/experimental/packages/otlp-grpc-exporter-base/test/certs/regenerate.sh old mode 100644 new mode 100755 diff --git a/integration-tests/tracecontext-integration-test.sh b/integration-tests/tracecontext-integration-test.sh old mode 100644 new mode 100755 diff --git a/scripts/lint-semconv-deps.mjs b/scripts/lint-semconv-deps.mjs old mode 100644 new mode 100755 diff --git a/scripts/semconv/changelog-gen.js b/scripts/semconv/changelog-gen.js old mode 100644 new mode 100755 diff --git a/scripts/semconv/generate.sh b/scripts/semconv/generate.sh old mode 100644 new mode 100755