[Libguestfs] [PATCH v3 04/13] v2v: factor out size checks

Roman Kagan rkagan at virtuozzo.com
Tue Oct 20 13:08:12 UTC 2015


Factor the size checks out to separate functions.

Signed-off-by: Roman Kagan <rkagan at virtuozzo.com>
---
 v2v/v2v.ml | 53 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 25 deletions(-)

diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 4257b8d..a2b6f52 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -80,32 +80,9 @@ let rec main () =
   message (f_"Inspecting the overlay");
   let inspect = inspect_source g root_choice in
 
-  (* The guest free disk space check and the target free space
-   * estimation both require statvfs information from mountpoints, so
-   * get that information first.
-   *)
-  let mpstats = List.map (
-    fun (dev, path) ->
-      let statvfs = g#statvfs path in
-      let vfs = g#vfs_type dev in
-      { mp_dev = dev; mp_path = path; mp_statvfs = statvfs; mp_vfs = vfs }
-  ) (g#mountpoints ()) in
-
-  if verbose () then (
-    (* This is useful for debugging speed / fstrim issues. *)
-    printf "mpstats:\n";
-    List.iter (print_mpstat Pervasives.stdout) mpstats
-  );
-
-  (* Check there is enough free space to perform conversion. *)
-  message (f_"Checking for sufficient free disk space in the guest");
+  let mpstats = get_mpstats g in
   check_free_space mpstats;
-
-  (* Estimate space required on target for each disk.  Note this is a max. *)
-  message (f_"Estimating space required on target for each disk");
-  let targets = estimate_target_size mpstats targets in
-
-  output#check_target_free_space source targets;
+  check_target_free_space mpstats source targets output;
 
   (* Conversion. *)
   let guestcaps =
@@ -594,11 +571,29 @@ and inspect_source g root_choice =
   if verbose () then printf "%s%!" (string_of_inspect inspect);
   inspect
 
+and get_mpstats g =
+  (* Collect statvfs information from the guest mountpoints. *)
+  let mpstats = List.map (
+    fun (dev, path) ->
+      let statvfs = g#statvfs path in
+      let vfs = g#vfs_type dev in
+      { mp_dev = dev; mp_path = path; mp_statvfs = statvfs; mp_vfs = vfs }
+  ) (g#mountpoints ()) in
+
+  if verbose () then (
+    (* This is useful for debugging speed / fstrim issues. *)
+    printf "mpstats:\n";
+    List.iter (print_mpstat Pervasives.stdout) mpstats
+  );
+
+  mpstats
+
 (* Conversion can fail if there is no space on the guest filesystems
  * (RHBZ#1139543).  To avoid this situation, check there is some
  * headroom.  Mainly we care about the root filesystem.
  *)
 and check_free_space mpstats =
+  message (f_"Checking for sufficient free disk space in the guest");
   List.iter (
     fun { mp_path = mp;
           mp_statvfs = { G.bfree = bfree; blocks = blocks; bsize = bsize } } ->
@@ -816,6 +811,14 @@ and estimate_target_size mpstats targets =
     targets
   )
 
+and check_target_free_space mpstats source targets output =
+
+  (* Estimate space required on target for each disk.  Note this is a max. *)
+  message (f_"Estimating space required on target for each disk");
+  let targets = estimate_target_size mpstats targets in
+
+  output#check_target_free_space source targets
+
 (* Update the target_actual_size field in the target structure. *)
 and actual_target_size target =
   { target with target_actual_size = du target.target_file }
-- 
2.4.3




More information about the Libguestfs mailing list