[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libnbd PATCH v3 17/22] ocaml: Add example for 64-bit extents
From: |
Eric Blake |
Subject: |
[libnbd PATCH v3 17/22] ocaml: Add example for 64-bit extents |
Date: |
Thu, 25 May 2023 08:01:03 -0500 |
Since our example program for 32-bit extents is inherently limited to
32-bit lengths, it is also worth demonstrating the 64-bit extent API,
including the difference in the array indexing being saner.
Signed-off-by: Eric Blake <eblake@redhat.com>
---
ocaml/examples/Makefile.am | 1 +
ocaml/examples/extents64.ml | 42 +++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+)
create mode 100644 ocaml/examples/extents64.ml
diff --git a/ocaml/examples/Makefile.am b/ocaml/examples/Makefile.am
index 28b4ab94..a4eb47a5 100644
--- a/ocaml/examples/Makefile.am
+++ b/ocaml/examples/Makefile.am
@@ -20,6 +20,7 @@ include $(top_srcdir)/subdir-rules.mk
ml_examples = \
asynch_copy.ml \
extents.ml \
+ extents64.ml \
get_size.ml \
open_qcow2.ml \
server_flags.ml \
diff --git a/ocaml/examples/extents64.ml b/ocaml/examples/extents64.ml
new file mode 100644
index 00000000..8ee7e218
--- /dev/null
+++ b/ocaml/examples/extents64.ml
@@ -0,0 +1,42 @@
+open Printf
+
+let () =
+ NBD.with_handle (
+ fun nbd ->
+ NBD.add_meta_context nbd "base:allocation";
+ NBD.connect_command nbd
+ ["nbdkit"; "-s"; "--exit-with-parent"; "-r";
+ "sparse-random"; "8G"];
+
+ (* Read the extents and print them. *)
+ let size = NBD.get_size nbd in
+ let cap =
+ match NBD.get_extended_headers_negotiated nbd with
+ | true -> size
+ | false -> 0x8000_0000_L in
+ let fetch_offset = ref 0_L in
+ while !fetch_offset < size do
+ let remaining = Int64.sub size !fetch_offset in
+ let fetch_size = min remaining cap in
+ NBD.block_status_64 nbd fetch_size !fetch_offset (
+ fun meta _ entries err ->
+ printf "nbd_block_status callback: meta=%s err=%d\n" meta !err;
+ if meta = "base:allocation" then (
+ printf "index\t%16s %16s %s\n" "offset" "length" "flags";
+ for i = 0 to Array.length entries - 1 do
+ let len = fst entries.(i)
+ and flags =
+ match snd entries.(i) with
+ | 0_L -> "data"
+ | 1_L -> "hole"
+ | 2_L -> "zero"
+ | 3_L -> "hole+zero"
+ | unknown -> sprintf "unknown (%Ld)" unknown in
+ printf "%d:\t%16Ld %16Ld %s\n" i !fetch_offset len flags;
+ fetch_offset := Int64.add !fetch_offset len
+ done;
+ );
+ 0
+ ) (* NBD.block_status *)
+ done
+ )
--
2.40.1
- [libnbd PATCH v3 09/22] block_status: Accept 64-bit extents during block status, (continued)
- [libnbd PATCH v3 09/22] block_status: Accept 64-bit extents during block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 21/22] api: Add nbd_can_block_status_payload(), Eric Blake, 2023/05/25
- [libnbd PATCH v3 19/22] api: Add nbd_[aio_]opt_extended_headers(), Eric Blake, 2023/05/25
- [libnbd PATCH v3 12/22] copy: Update nbdcopy to use 64-bit block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 03/22] protocol: Add definitions for extended headers, Eric Blake, 2023/05/25
- [libnbd PATCH v3 04/22] states: Prepare to send 64-bit requests, Eric Blake, 2023/05/25
- [libnbd PATCH v3 22/22] api: Add nbd_[aio_]block_status_filter(), Eric Blake, 2023/05/25
- [libnbd PATCH v3 11/22] api: Add several functions for controlling extended headers, Eric Blake, 2023/05/25
- [libnbd PATCH v3 20/22] interop: Add test of 64-bit block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 08/22] block_status: Track 64-bit extents internally, Eric Blake, 2023/05/25
- [libnbd PATCH v3 17/22] ocaml: Add example for 64-bit extents,
Eric Blake <=
- [libnbd PATCH v3 15/22] info: Update nbdinfo --map to use 64-bit block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 07/22] generator: Add struct nbd_extent in prep for 64-bit extents, Eric Blake, 2023/05/25
- [libnbd PATCH v3 13/22] dump: Update nbddump to use 64-bit block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 01/22] block_status: Refactor array storage, Eric Blake, 2023/05/25
- [libnbd PATCH v3 16/22] examples: Update copy-libev to use 64-bit block status, Eric Blake, 2023/05/25
- [libnbd PATCH v3 06/22] states: Break deadlock if server goofs on extended replies, Eric Blake, 2023/05/25
- [libnbd PATCH v3 10/22] api: Add [aio_]nbd_block_status_64, Eric Blake, 2023/05/25
- [libnbd PATCH v3 02/22] internal: Refactor layout of replies in sbuf, Eric Blake, 2023/05/25