@@ -170,6 +170,7 @@ export function init(opts: OpenTelemetryInitOptions = {}): void {
170170 let registeredProvider : NodeTracerProviderType | undefined ;
171171 let unregisterFastifyConfig : ( ( ) => void ) | undefined ;
172172 let unregisterWorkerShutdownHook : ( ( ) => void ) | undefined ;
173+ let ownsOpenTelemetryGlobals = false ;
173174
174175 try {
175176 /* eslint-disable @typescript-eslint/no-require-imports, global-require --
@@ -219,8 +220,6 @@ export function init(opts: OpenTelemetryInitOptions = {}): void {
219220 spanProcessors : [ spanProcessor ] ,
220221 } ) ;
221222
222- configureOpenTelemetryDiagnostics ( loadedOtelApi ) ;
223-
224223 if ( opts . fastify ) {
225224 /* eslint-disable @typescript-eslint/no-require-imports, global-require */
226225 const { registerInstrumentations } =
@@ -285,15 +284,21 @@ export function init(opts: OpenTelemetryInitOptions = {}): void {
285284 }
286285 } ) ;
287286 installedAdapters . subSpan = setupSubSpan ( subSpanImpl ) ;
287+ } else {
288+ message (
289+ '[OpenTelemetry] tracing integration was not installed because another tracing integration is ' +
290+ 'active; skipping OpenTelemetry sub-spans.' ,
291+ ) ;
288292 }
289293 }
290294
291295 try {
292296 provider . register ( ) ;
293297 setOpenTelemetryTracerProvider ( provider ) ;
294298 registeredProvider = provider ;
299+ ownsOpenTelemetryGlobals = true ;
300+ configureOpenTelemetryDiagnostics ( loadedOtelApi ) ;
295301 } catch ( err ) {
296- disableOpenTelemetryGlobals ( loadedOtelApi ) ;
297302 installedAdapters = resetInstalledTracingAdapters ( installedAdapters ) ;
298303 // When opts.fastify is enabled, OpenTelemetry does not expose a public
299304 // rollback API for module patches applied by registerInstrumentations().
@@ -310,6 +315,7 @@ export function init(opts: OpenTelemetryInitOptions = {}): void {
310315 if ( getOpenTelemetryTracerProvider ( ) === provider ) {
311316 setOpenTelemetryTracerProvider ( null ) ;
312317 disableOpenTelemetryGlobals ( loadedOtelApi ) ;
318+ ownsOpenTelemetryGlobals = false ;
313319 installedAdapters = resetInstalledTracingAdapters ( installedAdapters ) ;
314320 }
315321 } finally {
@@ -333,11 +339,15 @@ export function init(opts: OpenTelemetryInitOptions = {}): void {
333339 } catch ( err ) {
334340 unregisterFastifyConfig ?.( ) ;
335341 unregisterWorkerShutdownHook ?.( ) ;
336- if ( registeredProvider && getOpenTelemetryTracerProvider ( ) === registeredProvider ) {
342+ if (
343+ ownsOpenTelemetryGlobals &&
344+ registeredProvider &&
345+ otelApi &&
346+ getOpenTelemetryTracerProvider ( ) === registeredProvider
347+ ) {
337348 setOpenTelemetryTracerProvider ( null ) ;
338- }
339- if ( otelApi ) {
340349 disableOpenTelemetryGlobals ( otelApi ) ;
350+ ownsOpenTelemetryGlobals = false ;
341351 }
342352 installedAdapters = resetInstalledTracingAdapters ( installedAdapters ) ;
343353 message ( `[OpenTelemetry] init failed: ${ String ( err ) } ` ) ;
0 commit comments