diff --git a/src/trace/dune b/src/trace/dune index c0ec819c..9606e2a5 100644 --- a/src/trace/dune +++ b/src/trace/dune @@ -3,4 +3,4 @@ (public_name opentelemetry.trace) (synopsis "Use opentelemetry as a collector for trace") (optional) - (libraries ambient-context ambient-context.tls trace.core opentelemetry)) + (libraries opentelemetry.ambient-context trace.core opentelemetry)) diff --git a/src/trace/opentelemetry_trace.ml b/src/trace/opentelemetry_trace.ml index 81afd5f9..643d96a1 100644 --- a/src/trace/opentelemetry_trace.ml +++ b/src/trace/opentelemetry_trace.ml @@ -1,6 +1,6 @@ module Otel = Opentelemetry module Otrace = Trace_core (* ocaml-trace *) -module TLS = Ambient_context_tls.TLS +module TLS = Thread_local_storage open struct let spf = Printf.sprintf @@ -75,9 +75,14 @@ module Internal = struct let create () : t = { tbl = Active_span_tbl.create 32 } - let tls : t TLS.t = TLS.create () + let k_tls : t TLS.t = TLS.create () - let[@inline] get () : t = TLS.get_or_create tls ~create + let[@inline] get () : t = + try TLS.get_exn k_tls + with TLS.Not_set -> + let self = create () in + TLS.set k_tls self; + self end let otrace_of_otel (id : Otel.Span_id.t) : int64 = diff --git a/src/trace/opentelemetry_trace.mli b/src/trace/opentelemetry_trace.mli index c01a92ae..08349608 100644 --- a/src/trace/opentelemetry_trace.mli +++ b/src/trace/opentelemetry_trace.mli @@ -1,6 +1,6 @@ module Otel := Opentelemetry module Otrace := Trace_core -module TLS := Ambient_context_tls.TLS +module TLS := Thread_local_storage (** [opentelemetry.trace] implements a {!Trace_core.Collector} for {{:https://v3.ocaml.org/p/trace} ocaml-trace}. @@ -176,7 +176,7 @@ module Internal : sig val create : unit -> t - val tls : t TLS.t + val k_tls : t TLS.t val get : unit -> t end