Skip to content

Merge feature/perf to master #5760

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 83 commits into from
Jul 10, 2024
Merged
Show file tree
Hide file tree
Changes from 81 commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
172392f
xe-xentrace: fix binary location
edwintorok Jun 1, 2022
d324e6c
scripts/xentrace: detect host CPU spikes and dump xentrace
edwintorok Jun 1, 2022
bfe78bd
CA_388624: fix(C SDK): fix build failure with recent GCC
edwintorok Feb 7, 2024
0008395
build: add sdk-build-c Makefile rule to test building C SDK locally
edwintorok Feb 7, 2024
ed13f12
gen_api: generate an all_<enum> for enum types
edwintorok Jan 4, 2024
5bcbd3b
fix(Host.set_numa_affinity_policy): be consistent about accepting mix…
edwintorok Jan 11, 2024
36dfce6
test(record_util): make a copy to test for backwards compatibility
edwintorok Feb 16, 2024
f209e3e
test(record_util): add tests for all enums
edwintorok Jan 4, 2024
0605d24
Merge pull request #5349 from edwintorok/private/edvint/record_util_test
edwintorok Feb 16, 2024
1fdb4ba
redo_log: report redo log as broken if we cannot find the block device
edwintorok Feb 16, 2024
819ccac
Merge pull request #5436 from edwintorok/private/edvint/sdk-fix-c-build
psafont Mar 4, 2024
5d3d7a9
CA-389506: fix platform:nested_virt typo
edwintorok Mar 5, 2024
794e401
Merge remote-tracking branch 'upstream/master' into feature/perf
edwintorok Mar 20, 2024
d43572c
Merge pull request #5523 from edwintorok/feature/perf
psafont Mar 21, 2024
6381d72
CA-381119: use JsonRPC V2 for error replies
edwintorok Mar 20, 2024
91529cf
XenAPI.py: use correct type for 'verbose' and 'allow_none' with Python3
edwintorok Mar 27, 2024
500a1f7
XenAPI: suppress pytype false positives
edwintorok Mar 27, 2024
53a7a15
remove XenAPI.py from pytype expected to fail list
edwintorok Mar 26, 2024
0254e53
CP-48623: use persistent unix socket connection for SM to XAPI commun…
edwintorok Mar 26, 2024
db19b10
CP-48623: avoid querying the API version, it is not used
edwintorok Mar 26, 2024
81fb164
CP-48623: avoid 4 additional API calls after each SM login
edwintorok Mar 26, 2024
107f23c
Merge pull request #5533 from edwintorok/private/edvint/xenapi
edwintorok Mar 28, 2024
3a95d00
Merge pull request #5524 from edwintorok/private/edvint/jsonrpc2
edwintorok Apr 15, 2024
560ff8c
Merge pull request #5485 from edwintorok/private/edvint/nv
edwintorok Apr 15, 2024
c9bb1f2
Merge pull request #5459 from edwintorok/private/edvint/redo_report
edwintorok Apr 15, 2024
4c29a1e
[maintenance]: disable implicit transitive deps
edwintorok Feb 15, 2024
0278742
fix(dune): avoid "module unavailable" errors when running dune build …
edwintorok Jan 29, 2024
514f136
CP-47001: [xapi-fdcaps]: dune plumbing for new library
edwintorok Dec 13, 2023
4c26824
CP-47001: [xapi-fd-test]: dune plumbing for a new test framework
edwintorok Dec 13, 2023
5b0ac7b
CP-47001: [xapi-fdcaps]: add -principal flag
edwintorok Dec 15, 2023
a975edf
CP-47001: [xapi-fdcaps]: optional coverage support
edwintorok Dec 15, 2023
89e95b4
CP-47001: [xapi-fdcaps]: add properties module and tests
edwintorok Dec 20, 2023
fd68005
CP-47001: [xapi-fdcaps]: add operations module and tests
edwintorok Dec 20, 2023
b1c757b
CP-47001: [xapi-fdcaps]: wrap more Unix operations
edwintorok Dec 21, 2023
4da756c
CP-47001: [xapi-fdcaps] runtime tests for read-write properties
edwintorok Dec 22, 2023
43026be
CP-47001: [xapi-fdcaps-test]: add observations module
edwintorok Dec 22, 2023
908f5a0
CP-47001: [xapi-fdcaps-test]: add generate module
edwintorok Dec 22, 2023
78ec02f
CP-47001: [unixext-test]: add quickcheck-style test
edwintorok Dec 22, 2023
de2613e
CP-47001: Add unit tests for threadext
snwoods Feb 14, 2023
8ef9fa5
CP-47001: [unixext-test]: add test for Unixext.proxy
edwintorok Jan 30, 2024
801bb4f
Unix.time_limited_write: fix timeout behaviour on >64KiB writes/reads
edwintorok Nov 21, 2023
319b82b
Unix.time_limited_{read,write}: replace select with Polly
edwintorok Nov 21, 2023
8736e5d
add Unixext.time_limited_single_read
edwintorok Nov 28, 2023
b093542
CP-32622: replace select with Thread.delay
edwintorok Nov 21, 2023
bcae6f5
CP-32622: Delay: replace select with time_limited_read
edwintorok Nov 21, 2023
1c374c2
CP-32622: replace select in proxy with polly
edwintorok Jan 26, 2024
3f9472c
CP-32622: move new libraries to proper subdir
edwintorok Apr 15, 2024
0669a9d
Merge pull request #4726 from xapi-project/private/edvint/xentrace
psafont Apr 19, 2024
22d20ed
IH-543: Add IPMI DCMI based power reading rrdd plugin
edwintorok Apr 12, 2024
374aa42
Merge remote-tracking branch 'upstream/master' into feature/perf
edwintorok Apr 22, 2024
916b6e0
fixup! scripts/xentrace: detect host CPU spikes and dump xentrace
edwintorok Apr 22, 2024
7c23f8e
Merge pull request #5582 from edwintorok/feature/perf
robhoes Apr 23, 2024
51e3159
Merge pull request #5561 from edwintorok/private/edvint/dcmi
edwintorok Apr 26, 2024
4ef091d
Merge remote-tracking branch 'upstream/feature/perf' into private/edv…
edwintorok May 9, 2024
e0eeb72
Merge pull request #5402 from edwintorok/private/edvint/merge-stdext2…
edwintorok May 14, 2024
015526c
Merge remote-tracking branch 'upstream/master' into feature/perf
edwintorok May 14, 2024
089cbb0
Merge pull request #5629 from edwintorok/feature/perf
edwintorok May 20, 2024
374b5dc
CP-32622: Use Unix.sleepf for sleeps instead of select
snwoods Jan 4, 2023
760641f
CP-47536: drop Unix.select in newcli
edwintorok May 10, 2024
bf4c8e7
Merge pull request #5640 from edwintorok/private/edvint/epoll-lowrisk
edwintorok May 21, 2024
f3ca4b0
CP-47536: test for Buf_io timeouts
edwintorok May 23, 2024
d4e1c0b
[maintenance]: quicktest: add the ability to run without XAPI
edwintorok Mar 10, 2023
1e5e5f3
CP-47536: add ezxenstore quicktest
edwintorok May 29, 2024
c6b1dcd
Merge pull request #5657 from edwintorok/private/edvint/epoll2-pr
edwintorok Jun 10, 2024
fb8c966
Merge remote-tracking branch 'upstream/master' into feature/perf
edwintorok Jun 17, 2024
738b662
Merge pull request #5693 from edwintorok/feature/perf
psafont Jun 17, 2024
923581b
master_connection: log why we failed to connect
edwintorok Jun 11, 2024
3500e5a
xapi.conf: introduce test_open
edwintorok May 30, 2024
12f4b05
xapi_main: enable backtraces earlier to get backtraces from early sta…
edwintorok Jun 19, 2024
3d6151b
Merge pull request #5704 from edwintorok/private/edvint/epoll3.0-pr
psafont Jun 19, 2024
491c199
Merge remote-tracking branch 'xsu/master' into feature/perf
edwintorok Jun 25, 2024
27bb64a
Merge remote-tracking branch 'xsu/master' into feature/perf
edwintorok Jun 26, 2024
547d762
fixup! xapi.conf: introduce test_open
edwintorok Jun 26, 2024
f4b32bc
Merge pull request #5741 from edwintorok/feature/perf
edwintorok Jun 26, 2024
c460360
fix(XenAPI.py): fix pylint warning
edwintorok Jul 1, 2024
84c2ba6
fix(XenAPI.py): fix pylint warning
edwintorok Jul 1, 2024
2d3bae4
Merge remote-tracking branch 'upstream/master' into feature/perf
edwintorok Jul 2, 2024
c060abf
Merge pull request #5761 from edwintorok/feature/perf
psafont Jul 2, 2024
3d12e7c
Merge remote-tracking branch 'xsu/master' into feature/perf-update
edwintorok Jul 3, 2024
d957dce
Merge remote-tracking branch 'xsu/master' into feature/perf-update
edwintorok Jul 4, 2024
ce17da2
Merge pull request #5766 from edwintorok/feature/perf-update
edwintorok Jul 4, 2024
4c49af7
Merge remote-tracking branch 'xsu/master' into feature/perf
edwintorok Jul 10, 2024
e3d84de
Merge pull request #5804 from edwintorok/feature/perf
robhoes Jul 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ _build/
*.bak
*.native
.merlin
_coverage/
*.install
*.swp
compile_flags.txt
Expand Down
9 changes: 8 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ JOBS = $(shell getconf _NPROCESSORS_ONLN)
PROFILE=release
OPTMANDIR ?= $(OPTDIR)/man/man1/

.PHONY: build clean test doc python format install uninstall
.PHONY: build clean test doc python format install uninstall coverage

# if we have XAPI_VERSION set then set it in dune-project so we use that version number instead of the one obtained from git
# this is typically used when we're not building from a git repo
Expand All @@ -20,6 +20,11 @@ build:
check:
dune build @check -j $(JOBS)

coverage:
dune runtest --instrument-with bisect_ppx --force --profile=$(RELEASE) -j $(JOBS)
bisect-ppx-report html
bisect-ppx-report summary --per-file

clean:
dune clean

Expand Down Expand Up @@ -57,6 +62,7 @@ TEST_TIMEOUT=600
TEST_TIMEOUT2=1200
test:
ulimit -S -t $(TEST_TIMEOUT); \
ulimit -n 2048; \
(sleep $(TEST_TIMEOUT) && ps -ewwlyF --forest)& \
PSTREE_SLEEP_PID=$$!; \
trap "kill $${PSTREE_SLEEP_PID}" INT TERM EXIT; \
Expand Down Expand Up @@ -206,6 +212,7 @@ install: build doc sdk doc-json
install -D -m 755 _build/install/default/bin/xcp-rrdd-iostat $(DESTDIR)$(LIBEXECDIR)/xcp-rrdd-plugins/xcp-rrdd-iostat
install -D -m 755 _build/install/default/bin/xcp-rrdd-squeezed $(DESTDIR)$(LIBEXECDIR)/xcp-rrdd-plugins/xcp-rrdd-squeezed
install -D -m 755 _build/install/default/bin/xcp-rrdd-xenpm $(DESTDIR)$(LIBEXECDIR)/xcp-rrdd-plugins/xcp-rrdd-xenpm
install -D -m 755 _build/install/default/bin/xcp-rrdd-dcmi $(DESTDIR)$(LIBEXECDIR)/xcp-rrdd-plugins/xcp-rrdd-dcmi
install -D -m 644 ocaml/xcp-rrdd/bugtool-plugin/rrdd-plugins.xml $(DESTDIR)$(ETCXENDIR)/bugtool/xcp-rrdd-plugins.xml
install -D -m 644 ocaml/xcp-rrdd/bugtool-plugin/rrdd-plugins/stuff.xml $(DESTDIR)$(ETCXENDIR)/bugtool/xcp-rrdd-plugins/stuff.xml
install -D -m 755 ocaml/xcp-rrdd/bin/rrdp-scripts/sysconfig-rrdd-plugins $(DESTDIR)/etc/sysconfig/xcp-rrdd-plugins
Expand Down
11 changes: 11 additions & 0 deletions dune-project
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
(formatting (enabled_for ocaml))
(using menhir 2.0)

(cram enable)
(implicit_transitive_deps false)
(generate_opam_files true)

(name "xapi")
Expand Down Expand Up @@ -518,6 +520,8 @@ This package provides an Lwt compatible interface to the library.")
base-unix
(odoc :with-doc)
(xapi-stdext-pervasives (= :version))
(mtime :with-test)
(xapi-stdext-unix (= :version))
)
)

Expand All @@ -527,12 +531,19 @@ This package provides an Lwt compatible interface to the library.")
(authors "Jonathan Ludlam")
(depends
(ocaml (>= 4.12.0))
(alcotest :with-test)
base-unix
(bisect_ppx :with-test)
(fd-send-recv (>= 2.0.0))
fmt
(mtime (and (>= 2.0.0) :with-test))
(logs :with-test)
(qcheck-core (and (>= 0.21.2) :with-test))
(odoc :with-doc)
xapi-backtrace
unix-errno
(xapi-stdext-pervasives (= :version))
polly
)
)

Expand Down
1 change: 1 addition & 0 deletions ocaml/database/dune
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
xapi-datamodel
xapi-log
(re_export xapi-schema)
xapi-idl.updates
xapi-stdext-encodings
xapi-stdext-pervasives
xapi-stdext-std
Expand Down
6 changes: 2 additions & 4 deletions ocaml/database/master_connection.ml
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ let do_db_xml_rpc_persistent_with_reopen ~host:_ ~path (req : string) :
!Db_globs.permanent_master_failure_retry_interval ;
Thread.delay !Db_globs.permanent_master_failure_retry_interval ;
!Db_globs.restart_fn ()
| e -> (
| e ->
error "Caught %s" (Printexc.to_string e) ;
(* RPC failed - there's no way we can recover from this so try reopening connection every 2s + backoff delay *)
( match !my_connection with
Expand Down Expand Up @@ -322,9 +322,7 @@ let do_db_xml_rpc_persistent_with_reopen ~host:_ ~path (req : string) :
debug "%s: Sleep interrupted, retrying master connection now"
__FUNCTION__ ;
update_backoff_delay () ;
try open_secure_connection () with _ -> ()
(* oh well, maybe nextime... *)
)
D.log_and_ignore_exn open_secure_connection
done ;
!result

Expand Down
3 changes: 2 additions & 1 deletion ocaml/database/redo_log.ml
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,8 @@ let startup log =
) ;
match !(log.device) with
| None ->
D.info "Could not find block device"
D.info "Could not find block device" ;
broken log
| Some device ->
D.info "Using block device at %s" device ;
(* Check that the block device exists *)
Expand Down
1 change: 1 addition & 0 deletions ocaml/forkexecd/lib/dune
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
fd-send-recv
rpclib.core
rpclib.json
rpclib.xml
uuid
xapi-backtrace
xapi-log
Expand Down
2 changes: 1 addition & 1 deletion ocaml/forkexecd/test/dune
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(executable
(modes exe)
(name fe_test)
(libraries forkexec uuid xapi-stdext-unix))
(libraries forkexec uuid xapi-stdext-unix fd-send-recv))

(rule
(alias runtest)
Expand Down
13 changes: 13 additions & 0 deletions ocaml/idl/ocaml_backend/gen_api.ml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,19 @@ let gen_non_record_type tys =
t
| ty :: t ->
let alias = OU.alias_of_ty ty in
let accu =
match ty with
| DT.Enum (name, cs) ->
sprintf "let all_%s = [%s]" name
(cs
|> List.map fst
|> List.map OU.constructor_of
|> String.concat "; "
)
:: accu
| _ ->
accu
in
if List.mem_assoc alias overrides then
aux
(sprintf "type %s = %s\n%s\n" alias (OU.ocaml_of_ty ty)
Expand Down
2 changes: 1 addition & 1 deletion ocaml/libs/clock/dune
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@
(names test_date test_timer)
(package clock)
(modules test_date test_timer)
(libraries alcotest clock fmt mtime ptime qcheck-core qcheck-core.runner)
(libraries alcotest clock fmt mtime mtime.clock.os ptime qcheck-core qcheck-core.runner)
)
6 changes: 4 additions & 2 deletions ocaml/libs/ezxenstore/core/dune
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
logs
threads
uuidm
xenstore_transport
xenstore.unix)
(re_export xenstore)
(re_export xenstore_transport)
threads.posix
(re_export xenstore.unix))
)
4 changes: 2 additions & 2 deletions ocaml/libs/ezxenstore/lib/dune
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(public_name ezxenstore)
(wrapped false)
(libraries
ezxenstore_core
ezxenstore_watch
(re_export ezxenstore_core)
(re_export ezxenstore_watch)
)
)
2 changes: 1 addition & 1 deletion ocaml/libs/ezxenstore/lib_test/dune
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
(name main)
(package ezxenstore)
(deps main.exe)
(libraries cmdliner ezxenstore xenstore_transport)
(libraries cmdliner ezxenstore xenstore_transport xenstore xenstore.unix)
)
5 changes: 4 additions & 1 deletion ocaml/libs/ezxenstore/watch/dune
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@
(wrapped false)
(libraries
ezxenstore_core
xenctrl)
xenctrl
uuidm
threads.posix
)
)
81 changes: 81 additions & 0 deletions ocaml/libs/http-lib/bufio_test.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
open QCheck2
open Xapi_fd_test

let print_timeout = string_of_float

let expect_string ~expected ~actual =
if not (String.equal expected actual) then
Test.fail_reportf "Data sent and observed do not match: %S <> %S" expected
actual

let expect_amount ~expected observation =
let open Observations in
let actual = String.length observation.data in
if expected <> actual then
Test.fail_reportf
"Amount of data available and transferred does not match: %d <> %d;@,%a"
expected actual pp observation

let test_buf_io =
let timeouts = Generate.timeouts in
let gen = Gen.tup2 Generate.t timeouts
and print = Print.tup2 Generate.print print_timeout in
Test.make ~name:__FUNCTION__ ~print gen @@ fun (behaviour, timeout) ->
let timeout_span = Mtime.Span.of_float_ns (timeout *. 1e9) |> Option.get in
(* Format.eprintf "Testing %s@." (print (behaviour, timeout)); *)
if behaviour.kind <> Unix.S_SOCK then
QCheck2.assume_fail () ;
(* we only support sockets for this function *)
let test_elapsed = ref Mtime.Span.zero in
let test wrapped_fd =
let fd = Xapi_fdcaps.Operations.For_test.unsafe_fd_exn wrapped_fd in
let bio = Buf_io.of_fd fd in
let dt = Mtime_clock.counter () in
let finally () = test_elapsed := Mtime_clock.count dt in
Fun.protect ~finally (fun () ->
Buf_io.really_input_buf bio behaviour.size ~timeout
)
in
(*Printf.eprintf "testing: %s\n%!" (print (behaviour, timeout)) ;*)
let observations, result =
let buf = String.init behaviour.size (fun i -> Char.chr (i mod 255)) in
Generate.run_ro behaviour buf ~f:test
in
let () =
let open Observations in
let elapsed = !test_elapsed in
let timeout_extra =
Mtime.Span.(add (timeout_span :> Mtime.Span.t) @@ (500 * ms))
in
if Mtime.Span.compare elapsed timeout_extra > 0 then
Test.fail_reportf
"Function duration significantly exceeds timeout: %a > %.6f; %s"
Mtime.Span.pp elapsed timeout
(Fmt.to_to_string Fmt.(option pp) observations.Observations.write) ;
(* Format.eprintf "Result: %a@." (Fmt.option Observations.pp) observations.write;*)
match (observations, result) with
| {write= Some write; _}, Ok actual ->
expect_amount ~expected:(String.length actual) write ;
expect_string ~expected:write.data ~actual
| {write= Some _; _}, Error (`Exn_trap (Buf_io.Timeout, _)) ->
let elapsed = !test_elapsed in
if Mtime.Span.compare elapsed timeout_span < 0 then
Test.fail_reportf "Timed out earlier than requested: %a < %a"
Mtime.Span.pp elapsed Mtime.Span.pp timeout_span
| ( {write= Some write; _}
, Error (`Exn_trap (Unix.Unix_error (Unix.EPIPE, _, _), _)) ) ->
if String.length write.data = behaviour.size then
Test.fail_reportf
"Transferred exact amount, shouldn't have tried to send more: %d"
behaviour.size
| {write= None; _}, _ ->
()
| _, Error (`Exn_trap (e, bt)) ->
Printexc.raise_with_backtrace e bt
in
true

let () =
(* avoid SIGPIPE *)
let (_ : Sys.signal_behavior) = Sys.signal Sys.sigpipe Sys.Signal_ignore in
QCheck_base_runner.run_tests_main [test_buf_io]
Empty file.
33 changes: 32 additions & 1 deletion ocaml/libs/http-lib/dune
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
(public_name http-lib)
(modes best)
(wrapped false)
(modules (:standard \ http_svr http_proxy server_io http_test radix_tree_test test_client test_server))
(modules (:standard \ http_svr http_proxy server_io http_test radix_tree_test test_client test_server bufio_test))
(preprocess (per_module ((pps ppx_deriving_rpc) Http)))
(libraries
astring
base64
fmt
ipaddr
mtime
mtime.clock.os
Expand All @@ -19,6 +20,7 @@
stunnel
threads.posix
uuid
uri
xapi-backtrace
xapi-consts.xapi_version
xapi-idl.updates
Expand All @@ -40,8 +42,10 @@
(libraries
astring
http_lib
ipaddr
polly
threads.posix
uri
xapi-log
xapi-stdext-pervasives
xapi-stdext-threads
Expand All @@ -57,10 +61,37 @@
(libraries
alcotest
dune-build-info
fmt
http_lib
)
)

(test
(name bufio_test)
(package http-lib)
(modes (best exe))
(modules bufio_test)
(libraries
fmt
mtime
mtime.clock
mtime.clock.os
rresult
http_lib
qcheck-core
qcheck-core.runner
xapi_fd_test
)
; use fixed seed to avoid causing random failures in CI and package builds
(action (run %{test} -v -bt --seed 42))
)

(rule
(alias stresstest)
; use default random seed on stresstests
(action (run %{dep:bufio_test.exe} -v -bt))
)

(executable
(modes exe)
(name test_client)
Expand Down
2 changes: 1 addition & 1 deletion ocaml/libs/sexpr/test/dune
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
(name test_sexpr)
(package sexpr)
(modules test_sexpr)
(libraries sexpr astring rresult qcheck-core alcotest threads))
(libraries sexpr astring rresult qcheck-core alcotest threads.posix))
2 changes: 1 addition & 1 deletion ocaml/libs/stunnel/stunnel.ml
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ let rec retry f = function
try f ()
with Stunnel_initialisation_failed ->
(* Leave a few seconds between each attempt *)
ignore (Unix.select [] [] [] 3.) ;
Thread.delay 3. ;
retry f (n - 1)
)

Expand Down
7 changes: 5 additions & 2 deletions ocaml/libs/tracing/dune
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(library
(name tracing)
(modules tracing)
(libraries re uri xapi-log xapi-stdext-threads)
(libraries re uri xapi-log xapi-stdext-threads threads.posix)
(public_name xapi-tracing))

(library
Expand All @@ -15,7 +15,10 @@
ptime.clock.os
rpclib.core
rpclib.json
result
rresult
tracing
threads.posix
uri
xapi-log
xapi-open-uri
Expand All @@ -29,4 +32,4 @@
(name test_tracing)
(modules test_tracing)
(package xapi-tracing)
(libraries tracing alcotest uuid))
(libraries tracing alcotest fmt uuid xapi-log))
Loading
Loading