From 1168dd3b921746ba2ae576786d7fadd2348d8db9 Mon Sep 17 00:00:00 2001 From: Daniel Dyla Date: Fri, 25 Sep 2020 10:54:20 -0400 Subject: [PATCH] chore: disallow null attribute values --- packages/opentelemetry-api/src/trace/attributes.ts | 4 +--- packages/opentelemetry-api/src/trace/span.ts | 2 +- packages/opentelemetry-tracing/src/Span.ts | 9 ++------- packages/opentelemetry-tracing/test/Span.test.ts | 2 -- 4 files changed, 4 insertions(+), 13 deletions(-) diff --git a/packages/opentelemetry-api/src/trace/attributes.ts b/packages/opentelemetry-api/src/trace/attributes.ts index 0628a4d6f53..ea45f96131a 100644 --- a/packages/opentelemetry-api/src/trace/attributes.ts +++ b/packages/opentelemetry-api/src/trace/attributes.ts @@ -15,12 +15,10 @@ */ export interface Attributes { - [attributeKey: string]: AttributeValue; + [attributeKey: string]: AttributeValue | undefined; } export type AttributeValue = - | undefined - | null | string | number | boolean diff --git a/packages/opentelemetry-api/src/trace/span.ts b/packages/opentelemetry-api/src/trace/span.ts index fc5a4a1c259..59cafea2df2 100644 --- a/packages/opentelemetry-api/src/trace/span.ts +++ b/packages/opentelemetry-api/src/trace/span.ts @@ -49,7 +49,7 @@ export interface Span { * @param key the key for this attribute. * @param value the value for this attribute. */ - setAttribute(key: string, value: AttributeValue): this; + setAttribute(key: string, value?: AttributeValue): this; /** * Sets attributes to the span. diff --git a/packages/opentelemetry-tracing/src/Span.ts b/packages/opentelemetry-tracing/src/Span.ts index 5bfafc64993..8669f899dc6 100644 --- a/packages/opentelemetry-tracing/src/Span.ts +++ b/packages/opentelemetry-tracing/src/Span.ts @@ -88,9 +88,9 @@ export class Span implements api.Span, ReadableSpan { return this.spanContext; } - setAttribute(key: string, value: AttributeValue): this; + setAttribute(key: string, value?: AttributeValue): this; setAttribute(key: string, value: unknown): this { - if (this._isSpanEnded()) return this; + if (value == null || this._isSpanEnded()) return this; if (key.length === 0) { this._logger.warn(`Invalid attribute key: ${key}`); return this; @@ -100,11 +100,6 @@ export class Span implements api.Span, ReadableSpan { return this; } - if (value == null) { - delete this.attributes[key]; - return this; - } - if ( Object.keys(this.attributes).length >= this._traceParams.numberOfAttributesPerSpan! diff --git a/packages/opentelemetry-tracing/test/Span.test.ts b/packages/opentelemetry-tracing/test/Span.test.ts index 49708b1625a..6a9b2e6f3ef 100644 --- a/packages/opentelemetry-tracing/test/Span.test.ts +++ b/packages/opentelemetry-tracing/test/Span.test.ts @@ -182,9 +182,7 @@ describe('Span', () => { const span = new Span(tracer, name, spanContext, SpanKind.CLIENT); span.setAttribute('overwrite', 'initial value'); - span.setAttribute('remove', 'initial value'); span.setAttribute('overwrite', 'overwritten value'); - span.setAttribute('remove', null); assert.deepStrictEqual(span.attributes, { overwrite: 'overwritten value',