[Libguestfs] [PATCH v3 04/13] v2v: factor out size checks
Richard W.M. Jones
rjones at redhat.com
Tue Oct 20 14:06:16 UTC 2015
On Tue, Oct 20, 2015 at 04:08:12PM +0300, Roman Kagan wrote:
> 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. *)
^ There's an extra blank line here, but don't worry about it, I will
fix this up myself.
> + 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 }
This looks like a straightforward refactoring, so ACK.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list