setup ambient context in lwt/eio client setups

This commit is contained in:
Simon Cruanes 2025-12-17 16:13:41 -05:00
parent 942a56c879
commit bf7eaa97bd
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
10 changed files with 21 additions and 11 deletions

View file

@ -23,17 +23,11 @@ open struct
let tid = Thread.id @@ Thread.self () in let tid = Thread.id @@ Thread.self () in
let ctx_ref = let ctx_ref =
try Int_map.find tid (Atomic.get self.m) Opentelemetry_util.Util_atomic.update_cas self.m @@ fun m ->
try Int_map.find tid m, m
with Not_found -> with Not_found ->
let r = ref Context.empty in let r = ref Context.empty in
while r, Int_map.add tid r m
let m = Atomic.get self.m in
let m' = Int_map.add tid r m in
not (Atomic.compare_and_set self.m m m')
do
()
done;
r
in in
let old_ctx = !ctx_ref in let old_ctx = !ctx_ref in

View file

@ -14,6 +14,7 @@
threads threads
(re_export opentelemetry.ambient-context.core) (re_export opentelemetry.ambient-context.core)
(re_export opentelemetry.atomic) (re_export opentelemetry.atomic)
(re_export opentelemetry.util)
(select (select
default_.ml default_.ml
from from

View file

@ -8,6 +8,7 @@
(re_export opentelemetry) (re_export opentelemetry)
(re_export opentelemetry-client) (re_export opentelemetry-client)
(re_export opentelemetry-client.sync) (re_export opentelemetry-client.sync)
opentelemetry.ambient-context.eio
(re_export eio) (re_export eio)
(re_export eio.core) (re_export eio.core)
(re_export eio.unix) (re_export eio.unix)

View file

@ -180,6 +180,8 @@ let create_exporter ?(config = Config.make ()) ~sw ~env () =
let create_backend = create_exporter let create_backend = create_exporter
let setup_ ~sw ?config env : unit = let setup_ ~sw ?config env : unit =
Opentelemetry_ambient_context.set_current_storage
Opentelemetry_ambient_context_eio.storage;
let exp = create_exporter ?config ~sw ~env () in let exp = create_exporter ?config ~sw ~env () in
Main_exporter.set exp Main_exporter.set exp

View file

@ -120,6 +120,7 @@ let create_exporter ?(config = Config.make ()) () =
let create_backend = create_exporter let create_backend = create_exporter
let setup_ ?config () : unit = let setup_ ?config () : unit =
Opentelemetry_client_lwt.Util_ambient_context.setup_ambient_context ();
let exp = create_exporter ?config () in let exp = create_exporter ?config () in
Main_exporter.set exp; Main_exporter.set exp;
() ()

View file

@ -91,6 +91,7 @@ let create_exporter ?(config = Config.make ()) () =
let create_backend = create_exporter let create_backend = create_exporter
let setup_ ?config () : Exporter.t = let setup_ ?config () : Exporter.t =
Opentelemetry_client_lwt.Util_ambient_context.setup_ambient_context ();
let exp = create_exporter ?config () in let exp = create_exporter ?config () in
Main_exporter.set exp; Main_exporter.set exp;
exp exp

View file

@ -16,6 +16,8 @@
opentelemetry.emitter opentelemetry.emitter
(re_export opentelemetry.core) (re_export opentelemetry.core)
(re_export opentelemetry) (re_export opentelemetry)
(re_export opentelemetry.ambient-context)
opentelemetry.ambient-context.lwt
(re_export opentelemetry-client) (re_export opentelemetry-client)
(re_export lwt) (re_export lwt)
threads threads

View file

@ -0,0 +1,4 @@
(** Setup Lwt as the ambient context *)
let setup_ambient_context () =
Opentelemetry_ambient_context.set_current_storage
Opentelemetry_ambient_context_lwt.storage

View file

@ -2,8 +2,7 @@
(name opentelemetry_lwt) (name opentelemetry_lwt)
(public_name opentelemetry-lwt) (public_name opentelemetry-lwt)
(synopsis "Lwt frontend for opentelemetry") (synopsis "Lwt frontend for opentelemetry")
(preprocess
(pps lwt_ppx))
(libraries (libraries
(re_export lwt) (re_export lwt)
opentelemetry.ambient-context.lwt
(re_export opentelemetry))) (re_export opentelemetry)))

View file

@ -1,5 +1,10 @@
include Opentelemetry include Opentelemetry
(** Setup Lwt as the ambient context *)
let setup_ambient_context () =
Opentelemetry_ambient_context.set_current_storage
Opentelemetry_ambient_context_lwt.storage
module Main_exporter = struct module Main_exporter = struct
include Main_exporter include Main_exporter