Skip to content

Commit c28abac

Browse files
authored
refactor(sdk-trace-base): make resource private and remove getActiveSpanProcessor API (#5192)
1 parent f3a6310 commit c28abac

File tree

11 files changed

+616
-434
lines changed

11 files changed

+616
-434
lines changed

CHANGELOG_NEXT.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* feat(sdk-metrics)!: drop `View` and `Aggregation` in favor of `ViewOptions` and `AggregationOption` [#4931](https://github.com/open-telemetry/opentelemetry-js/pull/4931) @pichlermarc
1616
* refactor(sdk-trace-base)!: remove `new Span` constructor in favor of `Tracer.startSpan` API [#5048](https://github.com/open-telemetry/opentelemetry-js/pull/5048) @david-luna
1717
* refactor(sdk-trace-base)!: remove `BasicTracerProvider.addSpanProcessor` API in favor of constructor options. [#5134](https://github.com/open-telemetry/opentelemetry-js/pull/5134) @david-luna
18+
* refactor(sdk-trace-base)!: make `resource` property private in `BasicTracerProvider` and remove `getActiveSpanProcessor` API. [#5192](https://github.com/open-telemetry/opentelemetry-js/pull/5192) @david-luna
1819

1920
### :rocket: (Enhancement)
2021

experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ describe('Node SDK', () => {
262262

263263
assert.ok(nodeTracerProvider instanceof NodeTracerProvider);
264264

265-
const spanProcessor = nodeTracerProvider.getActiveSpanProcessor() as any;
265+
const spanProcessor = nodeTracerProvider['activeSpanProcessor'] as any;
266266

267267
assert(
268268
spanProcessor.constructor.name === 'MultiSpanProcessor',
@@ -1117,7 +1117,7 @@ describe('setup exporter from env', () => {
11171117

11181118
assert(tracerProvider instanceof NodeTracerProvider);
11191119

1120-
const activeSpanProcessor = tracerProvider.getActiveSpanProcessor();
1120+
const activeSpanProcessor = tracerProvider['activeSpanProcessor'];
11211121

11221122
assert(activeSpanProcessor.constructor.name === 'MultiSpanProcessor');
11231123

packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,24 +68,24 @@ export class BasicTracerProvider implements TracerProvider {
6868

6969
private readonly _config: TracerConfig;
7070
private readonly _tracers: Map<string, Tracer> = new Map();
71+
private readonly _resource: IResource;
7172

7273
private activeSpanProcessor: MultiSpanProcessor;
73-
readonly resource: IResource;
7474

7575
constructor(config: TracerConfig = {}) {
7676
const mergedConfig = merge(
7777
{},
7878
loadDefaultConfig(),
7979
reconfigureLimits(config)
8080
);
81-
this.resource = mergedConfig.resource ?? Resource.empty();
81+
this._resource = mergedConfig.resource ?? Resource.empty();
8282

8383
if (mergedConfig.mergeResourceWithDefaults) {
84-
this.resource = Resource.default().merge(this.resource);
84+
this._resource = Resource.default().merge(this._resource);
8585
}
8686

8787
this._config = Object.assign({}, mergedConfig, {
88-
resource: this.resource,
88+
resource: this._resource,
8989
});
9090

9191
const spanProcessors: SpanProcessor[] = [];
@@ -116,7 +116,8 @@ export class BasicTracerProvider implements TracerProvider {
116116
new Tracer(
117117
{ name, version, schemaUrl: options?.schemaUrl },
118118
this._config,
119-
this
119+
this._resource,
120+
this.activeSpanProcessor
120121
)
121122
);
122123
}
@@ -125,10 +126,6 @@ export class BasicTracerProvider implements TracerProvider {
125126
return this._tracers.get(key)!;
126127
}
127128

128-
getActiveSpanProcessor(): SpanProcessor {
129-
return this.activeSpanProcessor;
130-
}
131-
132129
/**
133130
* Register this TracerProvider for use with the OpenTelemetry API.
134131
* Undefined values may be replaced with defaults, and

packages/opentelemetry-sdk-trace-base/src/Span.ts

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import { ReadableSpan } from './export/ReadableSpan';
5252
import { ExceptionEventName } from './enums';
5353
import { SpanProcessor } from './SpanProcessor';
5454
import { TimedEvent } from './TimedEvent';
55-
import { Tracer } from './Tracer';
5655
import { SpanLimits } from './types';
5756

5857
/**
@@ -61,6 +60,21 @@ import { SpanLimits } from './types';
6160
*/
6261
export type Span = APISpan & ReadableSpan;
6362

63+
interface SpanOptions {
64+
resource: IResource;
65+
scope: InstrumentationLibrary;
66+
context: Context;
67+
spanContext: SpanContext;
68+
name: string;
69+
kind: SpanKind;
70+
parentSpanId?: string;
71+
links?: Link[];
72+
startTime?: TimeInput;
73+
attributes?: Attributes;
74+
spanLimits: SpanLimits;
75+
spanProcessor: SpanProcessor;
76+
}
77+
6478
/**
6579
* This class represents a span.
6680
*/
@@ -99,44 +113,32 @@ export class SpanImpl implements Span {
99113
/**
100114
* Constructs a new SpanImpl instance.
101115
*/
102-
constructor(
103-
parentTracer: Tracer,
104-
context: Context,
105-
spanName: string,
106-
spanContext: SpanContext,
107-
kind: SpanKind,
108-
parentSpanId?: string,
109-
links: Link[] = [],
110-
startTime?: TimeInput,
111-
_deprecatedClock?: unknown, // keeping this argument even though it is unused to ensure backwards compatibility
112-
attributes?: Attributes
113-
) {
114-
this.name = spanName;
115-
this._spanContext = spanContext;
116-
this.parentSpanId = parentSpanId;
117-
this.kind = kind;
118-
this.links = links;
119-
116+
constructor(opts: SpanOptions) {
120117
const now = Date.now();
118+
119+
this._spanContext = opts.spanContext;
121120
this._performanceStartTime = otperformance.now();
122121
this._performanceOffset =
123122
now - (this._performanceStartTime + getTimeOrigin());
124-
this._startTimeProvided = startTime != null;
125-
126-
this.startTime = this._getTime(startTime ?? now);
127-
128-
this.resource = parentTracer.resource;
129-
this.instrumentationLibrary = parentTracer.instrumentationLibrary;
130-
this._spanLimits = parentTracer.getSpanLimits();
123+
this._startTimeProvided = opts.startTime != null;
124+
this._spanLimits = opts.spanLimits;
131125
this._attributeValueLengthLimit =
132126
this._spanLimits.attributeValueLengthLimit || 0;
133-
134-
if (attributes != null) {
135-
this.setAttributes(attributes);
127+
this._spanProcessor = opts.spanProcessor;
128+
129+
this.name = opts.name;
130+
this.parentSpanId = opts.parentSpanId;
131+
this.kind = opts.kind;
132+
this.links = opts.links || [];
133+
this.startTime = this._getTime(opts.startTime ?? now);
134+
this.resource = opts.resource;
135+
this.instrumentationLibrary = opts.scope;
136+
137+
if (opts.attributes != null) {
138+
this.setAttributes(opts.attributes);
136139
}
137140

138-
this._spanProcessor = parentTracer.getActiveSpanProcessor();
139-
this._spanProcessor.onStart(this, context);
141+
this._spanProcessor.onStart(this, opts.context);
140142
}
141143

142144
spanContext(): SpanContext {

packages/opentelemetry-sdk-trace-base/src/Tracer.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,14 @@ import {
2020
sanitizeAttributes,
2121
isTracingSuppressed,
2222
} from '@opentelemetry/core';
23-
import { IResource } from '@opentelemetry/resources';
24-
import { BasicTracerProvider } from './BasicTracerProvider';
2523
import { SpanImpl } from './Span';
2624
import { GeneralLimits, SpanLimits, TracerConfig } from './types';
2725
import { mergeConfig } from './utility';
2826
import { SpanProcessor } from './SpanProcessor';
2927
import { Sampler } from './Sampler';
3028
import { IdGenerator } from './IdGenerator';
3129
import { RandomIdGenerator } from './platform';
30+
import { IResource } from '@opentelemetry/resources';
3231

3332
/**
3433
* This class represents a basic tracer.
@@ -38,23 +37,27 @@ export class Tracer implements api.Tracer {
3837
private readonly _generalLimits: GeneralLimits;
3938
private readonly _spanLimits: SpanLimits;
4039
private readonly _idGenerator: IdGenerator;
41-
readonly resource: IResource;
4240
readonly instrumentationLibrary: InstrumentationLibrary;
4341

42+
private readonly _resource: IResource;
43+
private readonly _spanProcessor: SpanProcessor;
44+
4445
/**
4546
* Constructs a new Tracer instance.
4647
*/
4748
constructor(
4849
instrumentationLibrary: InstrumentationLibrary,
4950
config: TracerConfig,
50-
private _tracerProvider: BasicTracerProvider
51+
resource: IResource,
52+
spanProcessor: SpanProcessor
5153
) {
5254
const localConfig = mergeConfig(config);
5355
this._sampler = localConfig.sampler;
5456
this._generalLimits = localConfig.generalLimits;
5557
this._spanLimits = localConfig.spanLimits;
5658
this._idGenerator = config.idGenerator || new RandomIdGenerator();
57-
this.resource = _tracerProvider.resource;
59+
this._resource = resource;
60+
this._spanProcessor = spanProcessor;
5861
this.instrumentationLibrary = instrumentationLibrary;
5962
}
6063

@@ -138,18 +141,20 @@ export class Tracer implements api.Tracer {
138141
Object.assign(attributes, samplingResult.attributes)
139142
);
140143

141-
const span = new SpanImpl(
142-
this,
144+
const span = new SpanImpl({
145+
resource: this._resource,
146+
scope: this.instrumentationLibrary,
143147
context,
144-
name,
145148
spanContext,
146-
spanKind,
147-
parentSpanId,
149+
name,
150+
kind: spanKind,
148151
links,
149-
options.startTime,
150-
undefined,
151-
initAttributes
152-
);
152+
parentSpanId,
153+
attributes: initAttributes,
154+
startTime: options.startTime,
155+
spanProcessor: this._spanProcessor,
156+
spanLimits: this._spanLimits,
157+
});
153158
return span;
154159
}
155160

@@ -250,8 +255,4 @@ export class Tracer implements api.Tracer {
250255
getSpanLimits(): SpanLimits {
251256
return this._spanLimits;
252257
}
253-
254-
getActiveSpanProcessor(): SpanProcessor {
255-
return this._tracerProvider.getActiveSpanProcessor();
256-
}
257258
}

packages/opentelemetry-sdk-trace-base/test/common/BasicTracerProvider.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -665,8 +665,8 @@ describe('BasicTracerProvider', () => {
665665
const tracerProvider = new BasicTracerProvider();
666666
const tracer = tracerProvider.getTracer('default');
667667
const span = tracer.startSpan('my-span') as Span;
668-
assert.strictEqual(tracer.resource, tracerProvider.resource);
669-
assert.strictEqual(span.resource, tracerProvider.resource);
668+
assert.strictEqual(tracer['_resource'], tracerProvider['_resource']);
669+
assert.strictEqual(span.resource, tracerProvider['_resource']);
670670
});
671671

672672
it('should start a span with name and options', () => {
@@ -929,7 +929,7 @@ describe('BasicTracerProvider', () => {
929929
describe('.resource', () => {
930930
it('should use the default resource when no resource is provided', function () {
931931
const tracerProvider = new BasicTracerProvider();
932-
assert.deepStrictEqual(tracerProvider.resource, Resource.default());
932+
assert.deepStrictEqual(tracerProvider['_resource'], Resource.default());
933933
});
934934

935935
it('should not merge with defaults when flag is set to false', function () {
@@ -938,7 +938,7 @@ describe('BasicTracerProvider', () => {
938938
mergeResourceWithDefaults: false,
939939
resource: expectedResource,
940940
});
941-
assert.deepStrictEqual(tracerProvider.resource, expectedResource);
941+
assert.deepStrictEqual(tracerProvider['_resource'], expectedResource);
942942
});
943943

944944
it('should merge with defaults when flag is set to true', function () {
@@ -948,7 +948,7 @@ describe('BasicTracerProvider', () => {
948948
resource: providedResource,
949949
});
950950
assert.deepStrictEqual(
951-
tracerProvider.resource,
951+
tracerProvider['_resource'],
952952
Resource.default().merge(providedResource)
953953
);
954954
});
@@ -958,7 +958,7 @@ describe('BasicTracerProvider', () => {
958958
it('should trigger shutdown when manually invoked', () => {
959959
const tracerProvider = new BasicTracerProvider();
960960
const shutdownStub = sinon.stub(
961-
tracerProvider.getActiveSpanProcessor(),
961+
tracerProvider['activeSpanProcessor'],
962962
'shutdown'
963963
);
964964
tracerProvider.shutdown();

packages/opentelemetry-sdk-trace-base/test/common/MultiSpanProcessor.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('MultiSpanProcessor', () => {
6363
assert.strictEqual(processor1.spans.length, 0);
6464
span.end();
6565
assert.strictEqual(processor1.spans.length, 1);
66-
tracerProvider.getActiveSpanProcessor().shutdown();
66+
tracerProvider['activeSpanProcessor'].shutdown();
6767
});
6868

6969
it('should handle two span processor', async () => {
@@ -81,9 +81,6 @@ describe('MultiSpanProcessor', () => {
8181
assert.strictEqual(processor1.spans.length, 1);
8282
assert.strictEqual(processor1.spans.length, processor2.spans.length);
8383

84-
// await tracerProvider.getActiveSpanProcessor().shutdown();
85-
// assert.strictEqual(processor1.spans.length, 0);
86-
// assert.strictEqual(processor1.spans.length, processor2.spans.length);
8784
tracerProvider.shutdown().then(() => {
8885
assert.strictEqual(processor1.spans.length, 0);
8986
assert.strictEqual(processor1.spans.length, processor2.spans.length);

0 commit comments

Comments
 (0)