From 7c1eb2321bc893f90e1f844e7a6491362e9768ce Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 3 Mar 2026 17:46:30 -0500 Subject: [PATCH] fix self_trace by just relying on Trace_provider --- .../opentelemetry_client_cohttp_eio.ml | 3 ++- .../opentelemetry_client_cohttp_lwt.ml | 2 +- .../opentelemetry_client_ocurl_lwt.ml | 1 + src/client/self_trace.ml | 25 ++++--------------- src/client/self_trace.mli | 16 ++++++------ 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/client-cohttp-eio/opentelemetry_client_cohttp_eio.ml b/src/client-cohttp-eio/opentelemetry_client_cohttp_eio.ml index a094f1ac..a01eb67e 100644 --- a/src/client-cohttp-eio/opentelemetry_client_cohttp_eio.ml +++ b/src/client-cohttp-eio/opentelemetry_client_cohttp_eio.ml @@ -185,7 +185,8 @@ let setup_ ~sw ~config env : unit = config.log_level; Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () -> - "opentelemetry: cohttp-eio exporter installed") + "opentelemetry: cohttp-eio exporter installed"); + Opentelemetry_client.Self_trace.set_enabled config.self_trace let setup ?(config = Config.make ()) ?(enable = true) ~sw env = if enable && not config.sdk_disabled then setup_ ~sw ~config env diff --git a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml index a295782f..7bbb3430 100644 --- a/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml +++ b/src/client-cohttp-lwt/opentelemetry_client_cohttp_lwt.ml @@ -119,7 +119,7 @@ let setup_ ~config () : unit = Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () -> "opentelemetry: cohttp-lwt exporter installed"); - + Opentelemetry_client.Self_trace.set_enabled config.self_trace; () let setup ?(config = Config.make ()) ?(enable = true) () = diff --git a/src/client-ocurl-lwt/opentelemetry_client_ocurl_lwt.ml b/src/client-ocurl-lwt/opentelemetry_client_ocurl_lwt.ml index 2bd08c18..9c022828 100644 --- a/src/client-ocurl-lwt/opentelemetry_client_ocurl_lwt.ml +++ b/src/client-ocurl-lwt/opentelemetry_client_ocurl_lwt.ml @@ -94,6 +94,7 @@ let setup_ ~config () : Exporter.t = Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () -> "opentelemetry: ocurl-lwt exporter installed"); + Opentelemetry_client.Self_trace.set_enabled config.self_trace; exp diff --git a/src/client/self_trace.ml b/src/client/self_trace.ml index fa401ef6..0aac592a 100644 --- a/src/client/self_trace.ml +++ b/src/client/self_trace.ml @@ -2,27 +2,12 @@ open Common_ let enabled = Atomic.make false -let tracer = Atomic.make OTEL.Tracer.default - let[@inline] add_event (scope : OTEL.Span.t) ev = OTEL.Span.add_event scope ev -let set_tracer tr = Atomic.set tracer tr - -let dummy_trace_id_ = OTEL.Trace_id.dummy - -let dummy_span_id = OTEL.Span_id.dummy +let set_enabled b = Atomic.set enabled b let with_ ?kind ?attrs name f = - if Atomic.get enabled then ( - let tracer = Atomic.get tracer in - OTEL.Tracer.with_ ~tracer ?kind ?attrs name f - ) else ( - (* A new scope is needed here because it might be modified *) - let span : OTEL.Span.t = - OTEL.Span.make ~trace_id:dummy_trace_id_ ~id:dummy_span_id ~start_time:0L - ~end_time:0L name - in - f span - ) - -let set_enabled b = Atomic.set enabled b + if Atomic.get enabled then + OTEL.Tracer.with_ ~tracer:(OTEL.Trace_provider.get ()) ?kind ?attrs name f + else + f OTEL.Span.dummy diff --git a/src/client/self_trace.mli b/src/client/self_trace.mli index 2a9bb320..832ad76e 100644 --- a/src/client/self_trace.mli +++ b/src/client/self_trace.mli @@ -1,5 +1,7 @@ -(** Mini tracing module for OTEL itself (disabled if [config.self_trace=false]) -*) +(** Mini tracing module for OTEL itself. + + When enabled via {!set_enabled}, emits spans via the current + {!OTEL.Trace_provider}. Disabled by default. *) open Common_ @@ -11,12 +13,8 @@ val with_ : string -> (OTEL.Span.t -> 'a) -> 'a -(** A simple way to create spans to instrument parts of the OTEL SDK itself. *) - -val set_tracer : OTEL.Tracer.t -> unit -(** Set the tracer to use for self-tracing. We need to make sure it will not - lead to infinite loops (if the tracer itself is self-tracing, it might - invoke itself recursively, and so on). *) +(** Instrument a section of SDK code with a span. No-ops when disabled. *) val set_enabled : bool -> unit -(** Enable self tracing. A tracer must also be set. *) +(** Enable or disable self-tracing. When enabled, uses the current + {!OTEL.Trace_provider} to emit spans. *)