Skip to content
This repository was archived by the owner on Nov 10, 2022. It is now read-only.

Commit 071d33e

Browse files
authored
fix: set delegate after successful registration (#105)
Set the new TracerProvider as delegate in ProxyTracerProvider only if global registration was successful.
1 parent 7ca5a00 commit 071d33e

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/api/trace.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,15 @@ export class TraceAPI {
6363
* @returns true if the tracer provider was successfully registered, else false
6464
*/
6565
public setGlobalTracerProvider(provider: TracerProvider): boolean {
66-
this._proxyTracerProvider.setDelegate(provider);
67-
return registerGlobal(
66+
const success = registerGlobal(
6867
API_NAME,
6968
this._proxyTracerProvider,
7069
DiagAPI.instance()
7170
);
71+
if (success) {
72+
this._proxyTracerProvider.setDelegate(provider);
73+
}
74+
return success;
7275
}
7376

7477
/**

test/api/api.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,18 @@ describe('API', () => {
9393
assert.deepStrictEqual(span, dummySpan);
9494
});
9595

96+
it('should set delegate only on success', () => {
97+
assert.strictEqual(
98+
api.trace.setGlobalTracerProvider(new TestTracerProvider()),
99+
true
100+
);
101+
assert.strictEqual(
102+
api.trace.setGlobalTracerProvider(new NoopTracerProvider()),
103+
false
104+
);
105+
assert.ok(api.trace.getTracer('name') instanceof TestTracer);
106+
});
107+
96108
class TestTracer extends NoopTracer {
97109
override startSpan(name: string, options?: SpanOptions): Span {
98110
return dummySpan;

0 commit comments

Comments
 (0)