From 2a2f3ea5b2d956c89f038e3798ee110c970173e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Proust?= Date: Wed, 18 Feb 2026 14:27:55 +0100 Subject: [PATCH 1/4] compatibility with lwt.6 --- devkit.opam | 3 ++- lwt_engines.ml | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/devkit.opam b/devkit.opam index 25301de..993f641 100644 --- a/devkit.opam +++ b/devkit.opam @@ -17,7 +17,8 @@ depends: [ "ounit2" "camlzip" "libevent" {>= "0.8.0"} - "ocurl" {>= "0.7.2"} + "curl" {>= "0.10.0"} + "curl_lwt" "pcre2" {>= "8.0.3"} "trace" {>= "0.4"} "extunix" {>= "0.1.4"} diff --git a/lwt_engines.ml b/lwt_engines.ml index 3802e29..9cf06c4 100644 --- a/lwt_engines.ml +++ b/lwt_engines.ml @@ -30,6 +30,8 @@ method poll fds timeout = l end +type Lwt_engine.engine_id += Engine_id__Devkit_libevent + (** libevent-based engine for lwt *) class libevent = let once_block = Ev.[ONCE] in @@ -37,6 +39,8 @@ let once_nonblock = Ev.[ONCE;NONBLOCK] in object(self) inherit Lwt_engine.abstract + method id = Engine_id__Devkit_libevent + val events_ = Ev.init () val mutable pid = Unix.getpid () method events = From 54f1db0f420290fb0d4dc6fd7a0673930282991e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Proust?= Date: Wed, 18 Feb 2026 14:47:38 +0100 Subject: [PATCH 2/4] engine selection is based on lwt reporting its engine --- prelude.ml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/prelude.ml b/prelude.ml index ec457e2..c13e44a 100644 --- a/prelude.ml +++ b/prelude.ml @@ -61,6 +61,13 @@ let call_me_maybe f x = and poll is guaranteed to be available without the fd limitation. *) let () = - if not (Lwt_config._HAVE_LIBEV && Lwt_config.libev_default) then begin + match Lwt_engine.id () with + | Lwt_engine.Engine_id__libev _ -> () + | Lwt_engine.Engine_id__select -> + (* Otherwise, prefer poll over select, because select can only monitor fds up to 1024, + and poll is guaranteed to be available without the fd limitation. *) Lwt_engine.set @@ new Lwt_engines.poll - end + | Lwt_engine.Engine_id__poll -> () + | lwteng -> + eprintfn "Unknown Lwt engine (%s) in use, leaving as is" Obj.Extension_constructor.(name (of_val lwteng)); + () From 2a212e10b050cad70f4d8f264116f5fb6044462c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Proust?= Date: Wed, 18 Feb 2026 15:20:29 +0100 Subject: [PATCH 3/4] incompatible with lwt<6 --- devkit.opam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devkit.opam b/devkit.opam index 993f641..687e423 100644 --- a/devkit.opam +++ b/devkit.opam @@ -22,7 +22,7 @@ depends: [ "pcre2" {>= "8.0.3"} "trace" {>= "0.4"} "extunix" {>= "0.1.4"} - "lwt" {>= "5.7.0"} + "lwt" {>= "6.0.0"} "lwt_ppx" "base-bytes" "base-unix" From fb1cd3de61e529614fea8d14b5d8e4de860abe11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Proust?= Date: Thu, 19 Feb 2026 10:59:01 +0100 Subject: [PATCH 4/4] compat with recent otel/trace --- devkit.opam | 2 +- possibly_otel.real.ml | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/devkit.opam b/devkit.opam index 687e423..f3becd3 100644 --- a/devkit.opam +++ b/devkit.opam @@ -20,7 +20,7 @@ depends: [ "curl" {>= "0.10.0"} "curl_lwt" "pcre2" {>= "8.0.3"} - "trace" {>= "0.4"} + "trace" {>= "0.10"} "extunix" {>= "0.1.4"} "lwt" {>= "6.0.0"} "lwt_ppx" diff --git a/possibly_otel.real.ml b/possibly_otel.real.ml index f56d67c..ab6ef73 100644 --- a/possibly_otel.real.ml +++ b/possibly_otel.real.ml @@ -8,7 +8,7 @@ module Traceparent = struct let get_ambient ?explicit_span () = let* Scope.{ trace_id; span_id; _ } = Scope.get_ambient_scope () in let span_id = match explicit_span with - | Some {Trace_core.span; _} -> Opentelemetry_trace.Internal.otel_of_otrace span + | Some {Trace_core.span; _} -> Opentelemetry_trace.Conv.span_id_to_otel span | None -> span_id in Trace_context.Traceparent.to_value ~trace_id ~parent_id:span_id () @@ -17,10 +17,12 @@ end let enter_manual_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ?data name = match Scope.get_ambient_scope () with | None -> - Trace_core.enter_manual_toplevel_span ~__FUNCTION__ ~__FILE__ ~__LINE__ ?data name - | Some Scope.{ span_id; _ } -> + Trace_core.enter_manual_span ~parent:None ~__FUNCTION__ ~__FILE__ ~__LINE__ ?data name + | Some Scope.{ span_id; trace_id; _ } -> let otrace_espan = Trace_core.{ - span = Opentelemetry_trace.Internal.otrace_of_otel span_id; + span = Opentelemetry_trace.Conv.span_id_of_otel span_id; + trace_id = Opentelemetry_trace.Conv.trace_id_of_otel trace_id; meta = Trace_core.Meta_map.empty } in - Trace_core.enter_manual_sub_span ~parent:otrace_espan ~__FUNCTION__ ~__FILE__ ~__LINE__ ?data name + let parent = Some (Trace_core.ctx_of_span otrace_espan) in + Trace_core.enter_manual_span ~parent ~__FUNCTION__ ~__FILE__ ~__LINE__ ?data name