Skip to content

Commit 90afa28

Browse files
feat(sdk-*)!: align merge resource behavior with spec (#5219)
Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
1 parent 8dc74e6 commit 90afa28

File tree

13 files changed

+11
-120
lines changed

13 files changed

+11
-120
lines changed

Diff for: experimental/packages/opentelemetry-sdk-node/src/sdk.ts

+1-7
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ export class NodeSDK {
210210

211211
private _resource: IResource;
212212
private _resourceDetectors: Array<Detector | DetectorSync>;
213-
private _mergeResourceWithDefaults: boolean;
214213

215214
private _autoDetectResources: boolean;
216215

@@ -245,9 +244,7 @@ export class NodeSDK {
245244

246245
this._configuration = configuration;
247246

248-
this._resource = configuration.resource ?? new Resource({});
249-
this._mergeResourceWithDefaults =
250-
configuration.mergeResourceWithDefaults ?? true;
247+
this._resource = configuration.resource ?? Resource.default();
251248
this._autoDetectResources = configuration.autoDetectResources ?? true;
252249
if (!this._autoDetectResources) {
253250
this._resourceDetectors = [];
@@ -370,7 +367,6 @@ export class NodeSDK {
370367
this._tracerProvider = new NodeTracerProvider({
371368
...this._configuration,
372369
resource: this._resource,
373-
mergeResourceWithDefaults: this._mergeResourceWithDefaults,
374370
spanProcessors,
375371
});
376372

@@ -388,7 +384,6 @@ export class NodeSDK {
388384
if (this._loggerProviderConfig) {
389385
const loggerProvider = new LoggerProvider({
390386
resource: this._resource,
391-
mergeResourceWithDefaults: this._mergeResourceWithDefaults,
392387
});
393388

394389
for (const logRecordProcessor of this._loggerProviderConfig
@@ -417,7 +412,6 @@ export class NodeSDK {
417412
resource: this._resource,
418413
views: this._meterProviderConfig?.views ?? [],
419414
readers: readers,
420-
mergeResourceWithDefaults: this._mergeResourceWithDefaults,
421415
});
422416

423417
this._meterProvider = meterProvider;

Diff for: experimental/packages/opentelemetry-sdk-node/src/types.ts

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ export interface NodeSDKConfiguration {
4040
instrumentations: (Instrumentation | Instrumentation[])[];
4141
resource: IResource;
4242
resourceDetectors: Array<Detector | DetectorSync>;
43-
mergeResourceWithDefaults?: boolean;
4443
sampler: Sampler;
4544
serviceName?: string;
4645
/** @deprecated use spanProcessors instead*/

Diff for: experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ describe('Node SDK', () => {
942942
const resource = sdk['_resource'];
943943
await resource.waitForAsyncAttributes?.();
944944

945-
assert.deepStrictEqual(resource, Resource.empty());
945+
assert.deepStrictEqual(resource, Resource.default());
946946
await sdk.shutdown();
947947
});
948948
});

Diff for: experimental/packages/sdk-logs/src/LoggerProvider.ts

+1-16
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,13 @@ import { LoggerProviderSharedState } from './internal/LoggerProviderSharedState'
2828

2929
export const DEFAULT_LOGGER_NAME = 'unknown';
3030

31-
function prepareResource(
32-
mergeWithDefaults: boolean,
33-
providedResource: Resource | undefined
34-
) {
35-
const resource = providedResource ?? Resource.empty();
36-
37-
if (mergeWithDefaults) {
38-
return Resource.default().merge(resource);
39-
}
40-
return resource;
41-
}
42-
4331
export class LoggerProvider implements logsAPI.LoggerProvider {
4432
private _shutdownOnce: BindOnceFuture<void>;
4533
private readonly _sharedState: LoggerProviderSharedState;
4634

4735
constructor(config: LoggerProviderConfig = {}) {
4836
const mergedConfig = merge({}, loadDefaultConfig(), config);
49-
const resource = prepareResource(
50-
mergedConfig.mergeResourceWithDefaults,
51-
config.resource
52-
);
37+
const resource = config.resource ?? Resource.default();
5338
this._sharedState = new LoggerProviderSharedState(
5439
resource,
5540
mergedConfig.forceFlushTimeoutMillis,

Diff for: experimental/packages/sdk-logs/src/config.ts

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export function loadDefaultConfig() {
3131
attributeCountLimit: getEnv().OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT,
3232
},
3333
includeTraceContext: true,
34-
mergeResourceWithDefaults: true,
3534
};
3635
}
3736

Diff for: experimental/packages/sdk-logs/src/types.ts

-6
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ export interface LoggerProviderConfig {
2828

2929
/** Log Record Limits*/
3030
logRecordLimits?: LogRecordLimits;
31-
32-
/**
33-
* Merge resource with {@link Resource.default()}?
34-
* Default: {@code true}
35-
*/
36-
mergeResourceWithDefaults?: boolean;
3731
}
3832

3933
export interface LogRecordLimits {

Diff for: experimental/packages/sdk-logs/test/common/LoggerProvider.test.ts

+1-25
Original file line numberDiff line numberDiff line change
@@ -63,39 +63,15 @@ describe('LoggerProvider', () => {
6363
assert.deepStrictEqual(resource, Resource.default());
6464
});
6565

66-
it('should fallback to default resource attrs', () => {
67-
const passedInResource = new Resource({ foo: 'bar' });
68-
const provider = new LoggerProvider({ resource: passedInResource });
69-
const { resource } = provider['_sharedState'];
70-
assert.deepStrictEqual(
71-
resource,
72-
Resource.default().merge(passedInResource)
73-
);
74-
});
75-
76-
it('should not merge with default resource attrs when flag is set to false', function () {
66+
it('should not have default resource if passed', function () {
7767
const passedInResource = new Resource({ foo: 'bar' });
7868
const provider = new LoggerProvider({
7969
resource: passedInResource,
80-
mergeResourceWithDefaults: false,
8170
});
8271
const { resource } = provider['_sharedState'];
8372
assert.deepStrictEqual(resource, passedInResource);
8473
});
8574

86-
it('should merge with default resource attrs when flag is set to true', function () {
87-
const passedInResource = new Resource({ foo: 'bar' });
88-
const provider = new LoggerProvider({
89-
resource: passedInResource,
90-
mergeResourceWithDefaults: true,
91-
});
92-
const { resource } = provider['_sharedState'];
93-
assert.deepStrictEqual(
94-
resource,
95-
Resource.default().merge(passedInResource)
96-
);
97-
});
98-
9975
it('should have default forceFlushTimeoutMillis if not pass', () => {
10076
const provider = new LoggerProvider();
10177
const sharedState = provider['_sharedState'];

Diff for: packages/opentelemetry-sdk-trace-base/src/BasicTracerProvider.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,7 @@ export class BasicTracerProvider implements TracerProvider {
7878
loadDefaultConfig(),
7979
reconfigureLimits(config)
8080
);
81-
this._resource = mergedConfig.resource ?? Resource.empty();
82-
83-
if (mergedConfig.mergeResourceWithDefaults) {
84-
this._resource = Resource.default().merge(this._resource);
85-
}
81+
this._resource = mergedConfig.resource ?? Resource.default();
8682

8783
this._config = Object.assign({}, mergedConfig, {
8884
resource: this._resource,

Diff for: packages/opentelemetry-sdk-trace-base/src/config.ts

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ export function loadDefaultConfig() {
5353
env.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
5454
attributePerLinkCountLimit: env.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT,
5555
},
56-
mergeResourceWithDefaults: true,
5756
};
5857
}
5958

Diff for: packages/opentelemetry-sdk-trace-base/src/types.ts

-6
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,6 @@ export interface TracerConfig {
3535
/** Span Limits */
3636
spanLimits?: SpanLimits;
3737

38-
/**
39-
* Merge resource with {@link Resource.default()}?
40-
* Default: {@code true}
41-
**/
42-
mergeResourceWithDefaults?: boolean;
43-
4438
/** Resource associated with trace telemetry */
4539
resource?: IResource;
4640

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

+2-15
Original file line numberDiff line numberDiff line change
@@ -932,25 +932,12 @@ describe('BasicTracerProvider', () => {
932932
assert.deepStrictEqual(tracerProvider['_resource'], Resource.default());
933933
});
934934

935-
it('should not merge with defaults when flag is set to false', function () {
936-
const expectedResource = new Resource({ foo: 'bar' });
937-
const tracerProvider = new BasicTracerProvider({
938-
mergeResourceWithDefaults: false,
939-
resource: expectedResource,
940-
});
941-
assert.deepStrictEqual(tracerProvider['_resource'], expectedResource);
942-
});
943-
944-
it('should merge with defaults when flag is set to true', function () {
935+
it('should use not use the default if resource passed', function () {
945936
const providedResource = new Resource({ foo: 'bar' });
946937
const tracerProvider = new BasicTracerProvider({
947-
mergeResourceWithDefaults: true,
948938
resource: providedResource,
949939
});
950-
assert.deepStrictEqual(
951-
tracerProvider['_resource'],
952-
Resource.default().merge(providedResource)
953-
);
940+
assert.deepStrictEqual(tracerProvider['_resource'], providedResource);
954941
});
955942
});
956943

Diff for: packages/sdk-metrics/src/MeterProvider.ts

+1-25
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,6 @@ export interface MeterProviderOptions {
3636
resource?: IResource;
3737
views?: ViewOptions[];
3838
readers?: MetricReader[];
39-
/**
40-
* Merge resource with {@link Resource.default()}?
41-
* Default: {@code true}
42-
*/
43-
mergeResourceWithDefaults?: boolean;
44-
}
45-
46-
/**
47-
* @param mergeWithDefaults
48-
* @param providedResource
49-
*/
50-
function prepareResource(
51-
mergeWithDefaults: boolean,
52-
providedResource: Resource | undefined
53-
) {
54-
const resource = providedResource ?? Resource.empty();
55-
56-
if (mergeWithDefaults) {
57-
return Resource.default().merge(resource);
58-
}
59-
return resource;
6039
}
6140

6241
/**
@@ -68,10 +47,7 @@ export class MeterProvider implements IMeterProvider {
6847

6948
constructor(options?: MeterProviderOptions) {
7049
this._sharedState = new MeterProviderSharedState(
71-
prepareResource(
72-
options?.mergeResourceWithDefaults ?? true,
73-
options?.resource
74-
)
50+
options?.resource ?? Resource.default()
7551
);
7652
if (options?.views != null && options.views.length > 0) {
7753
for (const viewOption of options.views) {

Diff for: packages/sdk-metrics/test/MeterProvider.test.ts

+3-11
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,13 @@ describe('MeterProvider', () => {
6868
assert.deepStrictEqual(resourceMetrics.resource, Resource.default());
6969
});
7070

71-
it('should not merge with defaults when flag is set to false', async function () {
71+
it('should use the resource passed in constructor', async function () {
7272
const reader = new TestMetricReader();
7373
const expectedResource = new Resource({ foo: 'bar' });
7474

7575
const meterProvider = new MeterProvider({
7676
readers: [reader],
7777
resource: expectedResource,
78-
mergeResourceWithDefaults: false,
7978
});
8079

8180
// Create meter and instrument, otherwise nothing will export
@@ -88,14 +87,10 @@ describe('MeterProvider', () => {
8887
assert.deepStrictEqual(resourceMetrics.resource, expectedResource);
8988
});
9089

91-
it('should merge with defaults when flag is set to true', async function () {
90+
it('should use default resource if not passed in constructor', async function () {
9291
const reader = new TestMetricReader();
93-
const providedResource = new Resource({ foo: 'bar' });
94-
9592
const meterProvider = new MeterProvider({
9693
readers: [reader],
97-
resource: providedResource,
98-
mergeResourceWithDefaults: true,
9994
});
10095

10196
// Create meter and instrument, otherwise nothing will export
@@ -105,10 +100,7 @@ describe('MeterProvider', () => {
105100

106101
// Perform collection.
107102
const { resourceMetrics } = await reader.collect();
108-
assert.deepStrictEqual(
109-
resourceMetrics.resource,
110-
Resource.default().merge(providedResource)
111-
);
103+
assert.deepStrictEqual(resourceMetrics.resource, Resource.default());
112104
});
113105
});
114106

0 commit comments

Comments
 (0)