diff --git a/packages/opentelemetry-context-zone-peer-dep/src/ZoneContextManager.ts b/packages/opentelemetry-context-zone-peer-dep/src/ZoneContextManager.ts index 16c159dbc6..93ce9e1c6c 100644 --- a/packages/opentelemetry-context-zone-peer-dep/src/ZoneContextManager.ts +++ b/packages/opentelemetry-context-zone-peer-dep/src/ZoneContextManager.ts @@ -113,7 +113,7 @@ export class ZoneContextManager implements ContextManager { * @param context A context (span) to be bind with Zone */ private _createZone(zoneName: string, context: unknown): Zone { - return Zone.root.fork({ + return Zone.current.fork({ name: zoneName, properties: { [ZONE_CONTEXT_KEY]: context, diff --git a/packages/opentelemetry-context-zone-peer-dep/test/ZoneContextManager.test.ts b/packages/opentelemetry-context-zone-peer-dep/test/ZoneContextManager.test.ts index 9712a7bf1c..905348005c 100644 --- a/packages/opentelemetry-context-zone-peer-dep/test/ZoneContextManager.test.ts +++ b/packages/opentelemetry-context-zone-peer-dep/test/ZoneContextManager.test.ts @@ -199,6 +199,23 @@ describe('ZoneContextManager', () => { }); }); }); + + it('should fork new zone from active one', () => { + const context = Context.ROOT_CONTEXT; + const rootZone = Zone.current; + contextManager.with(context, () => { + const zone1 = Zone.current; + assert.ok(zone1.parent === rootZone); + contextManager.with(context, () => { + const zone2 = Zone.current; + contextManager.with(context, () => { + const zone3 = Zone.current; + assert.ok(zone3.parent === zone2); + }); + assert.ok(zone2.parent === zone1); + }); + }); + }); }); describe('.bind(function)', () => {