[Libguestfs] [PATCH 6/8] v2v: -o rhv-upload: collect disks UUIDs right after copy
Richard W.M. Jones
rjones at redhat.com
Tue Sep 17 10:38:00 UTC 2019
On Mon, Sep 16, 2019 at 07:13:49PM +0200, Pino Toscano wrote:
> Instead of waiting for the completion of the nbdkit transfers to get the
> UUIDs of the disks, use the new #disk_copied hook to do that after each
> disk is copied.
>
> This has almost no behaviour on rhv-upload, except for the --no-copy
> mode:
> - previously it used to hit the 5 minute timeout while waiting for the
> finalization of the first disk
> - now it asserts on the different number of collected UUIDs vs the
> actual targets; at the moment there is nothing else that can be done,
> as this assumption is needed e.g. when creating the OVF file
> ---
> v2v/output_rhv_upload.ml | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml
> index 5599ef2c2..0952af188 100644
> --- a/v2v/output_rhv_upload.ml
> +++ b/v2v/output_rhv_upload.ml
> @@ -227,6 +227,8 @@ object
> val mutable rhv_storagedomain_uuid = None
> (* The cluster UUID. *)
> val mutable rhv_cluster_uuid = None
> + (* List of disk UUIDs. *)
> + val mutable disks_uuids = []
>
> method precheck () =
> Python_script.error_unless_python_interpreter_found ();
> @@ -374,23 +376,21 @@ If the messages above are not sufficient to diagnose the problem then add the
> TargetURI ("json:" ^ JSON.string_of_doc json_params)
> ) overlays
>
> - method create_metadata source targets _ guestcaps inspect target_firmware =
> - (* Get the UUIDs of each disk image. These files are written
> - * out by the nbdkit plugins on successful finalization of the
> + method disk_copied t i nr_disks =
> + (* Get the UUID of the disk image. This file is written
> + * out by the nbdkit plugin on successful finalization of the
> * transfer.
> *)
> - let nr_disks = List.length targets in
> - let image_uuids =
> - List.mapi (
> - fun i t ->
> - let id = t.target_overlay.ov_source.s_disk_id in
> - let diskid_file = diskid_file_of_id id in
> - if not (wait_for_file diskid_file finalization_timeout) then
> - error (f_"transfer of disk %d/%d failed, see earlier error messages")
> - (i+1) nr_disks;
> - let diskid = read_whole_file diskid_file in
> - diskid
> - ) targets in
> + let id = t.target_overlay.ov_source.s_disk_id in
> + let diskid_file = diskid_file_of_id id in
> + if not (wait_for_file diskid_file finalization_timeout) then
> + error (f_"transfer of disk %d/%d failed, see earlier error messages")
> + (i+1) nr_disks;
> + let diskid = read_whole_file diskid_file in
> + disks_uuids <- disks_uuids @ [diskid];
> +
> + method create_metadata source targets _ guestcaps inspect target_firmware =
> + assert (List.length disks_uuids = List.length targets);
>
> (* The storage domain UUID. *)
> let sd_uuid =
> @@ -406,7 +406,7 @@ If the messages above are not sufficient to diagnose the problem then add the
> let ovf =
> Create_ovf.create_ovf source targets guestcaps inspect
> target_firmware output_alloc
> - sd_uuid image_uuids vol_uuids vm_uuid
> + sd_uuid disks_uuids vol_uuids vm_uuid
> OVirt in
> let ovf = DOM.doc_to_string ovf in
This is certainly cleaner than the existing code, so the change in
behaviour for --no-copy isn't important (and it's still an error in
either case), therefore:
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