feat: lwt backend

This commit is contained in:
Simon Cruanes 2024-09-06 09:43:56 -04:00
parent faa0808034
commit 1bcea95ed9
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
7 changed files with 59 additions and 47 deletions

View file

@ -29,20 +29,26 @@
ptime ptime
hmap hmap
atomic atomic
(thread-local-storage (and (>= 0.2) (< 0.3))) (thread-local-storage
(and
(>= 0.2)
(< 0.3)))
(odoc :with-doc) (odoc :with-doc)
(alcotest :with-test) (alcotest :with-test)
(pbrt (pbrt
(and (>= 3.0) (< 4.0))) (and
(>= 3.0)
(< 4.0)))
(ocaml-lsp-server :with-dev-setup) (ocaml-lsp-server :with-dev-setup)
(ocamlformat (ocamlformat
(and (and
:with-dev-setup :with-dev-setup
(>= 0.24) (>= 0.24)
(< 0.25)))) (< 0.25))))
(depopts trace) (depopts trace lwt eio)
(conflicts (conflicts
(trace (< 0.7))) (trace
(< 0.7)))
(tags (tags
(instrumentation tracing opentelemetry datadog jaeger))) (instrumentation tracing opentelemetry datadog jaeger)))

View file

@ -17,14 +17,15 @@ depends: [
"ocaml" {>= "4.08"} "ocaml" {>= "4.08"}
"ptime" "ptime"
"hmap" "hmap"
"ambient-context" "atomic"
"thread-local-storage" {>= "0.2" & < "0.3"}
"odoc" {with-doc} "odoc" {with-doc}
"alcotest" {with-test} "alcotest" {with-test}
"pbrt" {>= "3.0" & < "4.0"} "pbrt" {>= "3.0" & < "4.0"}
"ocaml-lsp-server" {with-dev-setup} "ocaml-lsp-server" {with-dev-setup}
"ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"} "ocamlformat" {with-dev-setup & >= "0.24" & < "0.25"}
] ]
depopts: ["trace"] depopts: ["trace" "lwt" "eio"]
conflicts: [ conflicts: [
"trace" {< "0.7"} "trace" {< "0.7"}
] ]

View file

@ -1,35 +0,0 @@
module Hmap = Ambient_context.Hmap
let _internal_key : Hmap.t Lwt.key = Lwt.new_key ()
let ( let* ) = Option.bind
module M = struct
let name = "Storage_lwt"
let[@inline] get_map () = Lwt.get _internal_key
let[@inline] with_map m cb = Lwt.with_value _internal_key (Some m) cb
let create_key = Hmap.Key.create
let get k =
let* context = get_map () in
Hmap.find k context
let with_binding k v cb =
let new_context =
match get_map () with
| None -> Hmap.singleton k v
| Some old_context -> Hmap.add k v old_context
in
with_map new_context cb
let without_binding k cb =
let new_context =
match get_map () with
| None -> Hmap.empty
| Some old_context -> Hmap.rem k old_context
in
with_map new_context cb
end
let storage () : Ambient_context.storage = (module M)

View file

@ -0,0 +1,7 @@
(library
(name opentelemetry_ambient_context_lwt)
(public_name opentelemetry.ambient-context.lwt)
(optional) ; lwt
(synopsis
"Storage backend for ambient-context using Lwt's sequence-associated storage")
(libraries lwt opentelemetry.ambient-context thread-local-storage))

View file

@ -1,6 +0,0 @@
(library
(name ambient_context_lwt)
(synopsis
"Storage backend for ambient-context using Lwt's sequence-associated storage")
(public_name ambient-context-lwt)
(libraries lwt ambient-context ambient-context.tls))

View file

@ -0,0 +1,37 @@
open struct
let _internal_key : Hmap.t Lwt.key = Lwt.new_key ()
let ( let* ) = Option.bind
end
module M = struct
let name = "Storage_lwt"
let[@inline] get_map () = Lwt.get _internal_key
let[@inline] with_map m cb = Lwt.with_value _internal_key (Some m) cb
let create_key = Hmap.Key.create
let get k =
let* context = get_map () in
Hmap.find k context
let with_binding k v cb =
let new_context =
match get_map () with
| None -> Hmap.singleton k v
| Some old_context -> Hmap.add k v old_context
in
with_map new_context cb
let without_binding k cb =
let new_context =
match get_map () with
| None -> Hmap.empty
| Some old_context -> Hmap.rem k old_context
in
with_map new_context cb
end
let storage () : Opentelemetry_ambient_context.storage = (module M)

View file

@ -0,0 +1,2 @@
val storage : unit -> Opentelemetry_ambient_context.storage
(** Storage using Lwt keys *)