Skip to content

Commit aac3f56

Browse files
vmarchauddyladan
andauthored
feat(node-tracer): use AsyncLocalStorageContextManager by default starting Node 14.8 #1511 (#1525)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent f731c65 commit aac3f56

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

packages/opentelemetry-node/src/NodeTracerProvider.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
17+
import {
18+
AsyncHooksContextManager,
19+
AsyncLocalStorageContextManager,
20+
} from '@opentelemetry/context-async-hooks';
1821
import {
1922
BasicTracerProvider,
2023
SDKRegistrationConfig,
2124
} from '@opentelemetry/tracing';
2225
import { DEFAULT_INSTRUMENTATION_PLUGINS, NodeTracerConfig } from './config';
2326
import { PluginLoader, Plugins } from './instrumentation/PluginLoader';
27+
import * as semver from 'semver';
2428

2529
/**
2630
* Register this TracerProvider for use with the OpenTelemetry API.
@@ -53,7 +57,10 @@ export class NodeTracerProvider extends BasicTracerProvider {
5357

5458
register(config: SDKRegistrationConfig = {}) {
5559
if (config.contextManager === undefined) {
56-
config.contextManager = new AsyncHooksContextManager();
60+
const ContextManager = semver.gte(process.version, '14.8.0')
61+
? AsyncLocalStorageContextManager
62+
: AsyncHooksContextManager;
63+
config.contextManager = new ContextManager();
5764
config.contextManager.enable();
5865
}
5966

packages/opentelemetry-node/test/registration.test.ts

+11-7
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@ import {
2121
trace,
2222
ProxyTracerProvider,
2323
} from '@opentelemetry/api';
24-
import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
24+
import {
25+
AsyncHooksContextManager,
26+
AsyncLocalStorageContextManager,
27+
} from '@opentelemetry/context-async-hooks';
2528
import { NoopContextManager } from '@opentelemetry/context-base';
2629
import { CompositePropagator } from '@opentelemetry/core';
2730
import * as assert from 'assert';
2831
import { NodeTracerProvider } from '../src';
32+
import * as semver from 'semver';
33+
34+
const DefaultContextManager = semver.gte(process.version, '14.8.0')
35+
? AsyncLocalStorageContextManager
36+
: AsyncHooksContextManager;
2937

3038
describe('API registration', () => {
3139
beforeEach(() => {
@@ -38,9 +46,7 @@ describe('API registration', () => {
3846
const tracerProvider = new NodeTracerProvider();
3947
tracerProvider.register();
4048

41-
assert.ok(
42-
context['_getContextManager']() instanceof AsyncHooksContextManager
43-
);
49+
assert.ok(context['_getContextManager']() instanceof DefaultContextManager);
4450
assert.ok(
4551
propagation['_getGlobalPropagator']() instanceof CompositePropagator
4652
);
@@ -96,9 +102,7 @@ describe('API registration', () => {
96102
propagation['_getGlobalPropagator']() instanceof NoopTextMapPropagator
97103
);
98104

99-
assert.ok(
100-
context['_getContextManager']() instanceof AsyncHooksContextManager
101-
);
105+
assert.ok(context['_getContextManager']() instanceof DefaultContextManager);
102106

103107
const apiTracerProvider = trace.getTracerProvider();
104108
assert.ok(apiTracerProvider instanceof ProxyTracerProvider);

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

+10-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ import {
2626
trace,
2727
ProxyTracerProvider,
2828
} from '@opentelemetry/api';
29-
import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks';
29+
import {
30+
AsyncHooksContextManager,
31+
AsyncLocalStorageContextManager,
32+
} from '@opentelemetry/context-async-hooks';
3033
import { NoopContextManager } from '@opentelemetry/context-base';
3134
import { CompositePropagator } from '@opentelemetry/core';
3235
import { ConsoleMetricExporter, MeterProvider } from '@opentelemetry/metrics';
@@ -81,6 +84,10 @@ const mockedIdentityResponse = {
8184
};
8285
const mockedHostResponse = 'my-hostname';
8386

87+
const DefaultContextManager = semver.gte(process.version, '14.8.0')
88+
? AsyncLocalStorageContextManager
89+
: AsyncHooksContextManager;
90+
8491
describe('Node SDK', () => {
8592
before(() => {
8693
// Disable attempted load of default plugins
@@ -127,7 +134,7 @@ describe('Node SDK', () => {
127134
assert.ok(metrics.getMeterProvider() instanceof NoopMeterProvider);
128135

129136
assert.ok(
130-
context['_getContextManager']() instanceof AsyncHooksContextManager
137+
context['_getContextManager']() instanceof DefaultContextManager
131138
);
132139
assert.ok(
133140
propagation['_getGlobalPropagator']() instanceof CompositePropagator
@@ -151,7 +158,7 @@ describe('Node SDK', () => {
151158
assert.ok(metrics.getMeterProvider() instanceof NoopMeterProvider);
152159

153160
assert.ok(
154-
context['_getContextManager']() instanceof AsyncHooksContextManager
161+
context['_getContextManager']() instanceof DefaultContextManager
155162
);
156163
assert.ok(
157164
propagation['_getGlobalPropagator']() instanceof CompositePropagator

0 commit comments

Comments
 (0)