diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index a4071de14f..4a2abad384 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -13,6 +13,8 @@ All notable changes to experimental packages in this project will be documented ### :bug: (Bug Fix) +* fix(sdk-node): register context manager if no tracer options are provided [#4781](https://github.com/open-telemetry/opentelemetry-js/pull/4781) @pichlermarc + ### :books: (Refine Doc) ### :house: (Internal) diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index d26ffea4ef..7cb02a2120 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -247,7 +247,10 @@ export class NodeSDK { } tracerProvider.register({ - contextManager: this._tracerProviderConfig?.contextManager, + contextManager: + this._tracerProviderConfig?.contextManager ?? + // _tracerProviderConfig may be undefined if trace-specific settings are not provided - fall back to raw config + this._configuration?.contextManager, propagator: this._tracerProviderConfig?.textMapPropagator, }); diff --git a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts index 22e1794ccc..12cf964f20 100644 --- a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts +++ b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -325,6 +325,22 @@ describe('Node SDK', () => { await sdk.shutdown(); delete env.OTEL_TRACES_EXPORTER; }); + + it('should register a context manager if only a context manager is provided', async () => { + // arrange + const expectedContextManager = new AsyncHooksContextManager(); + const sdk = new NodeSDK({ + contextManager: expectedContextManager, + }); + + // act + sdk.start(); + + // assert + const actualContextManager = context['_getContextManager'](); + assert.equal(actualContextManager, expectedContextManager); + await sdk.shutdown(); + }); }); async function waitForNumberOfMetrics(