Skip to content

Commit 8ffb27c

Browse files
committed
vhd_tool_wrapper: Add parse_header to determine allocated blocks
Vhd_tool_wrapper.run_vhd_tool is hardcoded to read the progress percentage printed by vhd-tool, so use Qcow_tool_wrapper.run_qcow_tool to run vhd-tool since it's generic enough to allow that. Signed-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>
1 parent e413177 commit 8ffb27c

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

ocaml/xapi/qcow_tool_wrapper.ml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,21 @@ let read_header qcow_path =
6262
(fun () -> Unix.close pipe_writer) ;
6363
pipe_reader
6464

65-
let parse_header qcow_path =
66-
let pipe_reader = read_header qcow_path in
65+
let read_vhd_header path =
66+
let vhd_tool = !Xapi_globs.vhd_tool in
67+
let args = ["read_headers"; path] in
68+
let pipe_reader, pipe_writer = Unix.pipe ~cloexec:true () in
69+
70+
let progress_cb _ = () in
71+
Xapi_stdext_pervasives.Pervasiveext.finally
72+
(fun () -> run_qcow_tool vhd_tool progress_cb args ~output_fd:pipe_writer)
73+
(fun () -> Unix.close pipe_writer) ;
74+
pipe_reader
75+
76+
let parse_header pipe_reader =
6777
let ic = Unix.in_channel_of_descr pipe_reader in
6878
let buf = Buffer.create 4096 in
69-
let json = Yojson.Basic.from_channel ~buf ~fname:"qcow_header.json" ic in
79+
let json = Yojson.Basic.from_channel ~buf ~fname:"header.json" ic in
7080
In_channel.close ic ;
7181
let cluster_size =
7282
1 lsl Yojson.Basic.Util.(member "cluster_bits" json |> to_int)
@@ -76,6 +86,14 @@ let parse_header qcow_path =
7686
in
7787
(cluster_size, cluster_list)
7888

89+
let parse_qcow_header qcow_path =
90+
let pipe_reader = read_header qcow_path in
91+
parse_header pipe_reader
92+
93+
let parse_vhd_header qcow_path =
94+
let pipe_reader = read_vhd_header qcow_path in
95+
parse_header pipe_reader
96+
7997
let send ?relative_to (progress_cb : int -> unit) (unix_fd : Unix.file_descr)
8098
(path : string) (_size : Int64.t) =
8199
let qcow_of_device =

ocaml/xapi/qcow_tool_wrapper.mli

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,6 @@ val send :
2424
-> int64
2525
-> unit
2626

27-
val parse_header : string -> int * int list
27+
val parse_vhd_header : string -> int * int list
28+
29+
val parse_qcow_header : string -> int * int list

ocaml/xapi/vhd_tool_wrapper.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ let receive progress_cb format protocol (s : Unix.file_descr)
112112
in
113113
run_vhd_tool progress_cb args s s' path
114114

115+
let parse_header = Qcow_tool_wrapper.parse_vhd_header
116+
115117
let send progress_cb ?relative_to (protocol : string) (dest_format : string)
116118
(s : Unix.file_descr) (path : string) (size : Int64.t) (prefix : string) =
117119
let vhd_of_device =

0 commit comments

Comments
 (0)