[libvirt] [PATCH 2/2] qemu: Add pre-migration hook

Eric Blake eblake at redhat.com
Wed Feb 29 00:04:29 UTC 2012


On 02/28/2012 02:49 PM, Jiri Denemark wrote:
> This hook is called during the Prepare phase on destination host and may
> be used for changing domain XML.
> ---
>  docs/hooks.html.in        |   35 +++++++++++++++++++++++------------
>  src/qemu/qemu_migration.c |   40 ++++++++++++++++++++++++++++++++++++++++
>  src/util/hooks.c          |    3 ++-
>  src/util/hooks.h          |    1 +
>  4 files changed, 66 insertions(+), 13 deletions(-)
> 
> diff --git a/docs/hooks.html.in b/docs/hooks.html.in
> index 890359e..6c82c6d 100644
> --- a/docs/hooks.html.in
> +++ b/docs/hooks.html.in
> @@ -120,6 +120,16 @@
>          called again, <span class="since">since 0.9.0</span>, to allow
>          any additional resource cleanup:<br/>
>          <pre>/etc/libvirt/hooks/qemu guest_name release end -</pre></li>
> +      <li><span class="since">Since 0.9.11</span>, the qemu hook script
> +        is also called at the beginning of incoming migration. It is called
> +        as: <pre>/etc/libvirt/hooks/qemu guest_name migrate begin -</pre>
> +        with domain XML sent to standard input of the script. In this case,
> +        the script acts as a filter and is supposed to modify the domain
> +        XML and print it out on its standard output. Empty output is
> +        identical to copying the input XML without changing it. In case the
> +        script returns failure or the output XML is not valid, incoming
> +        migration will be canceled. This hook may be used to, e.g., change

I think this reads better as:

s/used to, e.g., change/used, e.g., to change/

> +        location of disk images for incoming domains.</li>
>      </ul>
>  
>      <h5><a name="lxc">/etc/libvirt/hooks/lxc</a></h5>
> @@ -161,19 +171,20 @@
>         source and destination hosts:</p>
>      <ol>
>        <li>At the beginning of the migration, the <i>qemu</i> hook script on
> -          the <b>destination</b> host is executed with the "start"
> -          operation.<br/><br/></li>
> -      <li>If this hook script returns indicating success (error code 0), the
> -          migration continues.  Any other return code indicates failure, and
> -          the migration is aborted.<br/><br/></li>
> -      <li>The QEMU guest is then migrated to the destination host.<br/>
> -          <br/></li>
> +          the <b>destination</b> host is executed with the "migrate"
> +          operation.</li>
> +      <li>Before QEMU process is spawned, the two operations ("prepare" and
> +          "start") called for domain start are executed on
> +          <b>destination</b> host.</li>
> +      <li>If any of these hook script executions returns indicating success
> +          (error code 0), the migration continues.  Any other return code
> +          indicates failure, and the migration is aborted.</li>

This reads awkwardly - it makes it sound like 'prepare' exiting with 0
makes the overall operation succeed even if 'start' exits with non-zero.
 I'd change it to:

If both of these hook script executions exit successfully (exit status
0), the migration continues.  Any other exit code indicates failure, and
the migration is aborted.

> @@ -1150,6 +1152,43 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
>              goto cleanup;
>      }
>  
> +    /* Let migration hook filter domain XML */
> +    if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
> +        char *xml = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE);
> +        int hookret;
> +
> +        hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, def->name,
> +                              VIR_HOOK_QEMU_OP_MIGRATE, VIR_HOOK_SUBOP_BEGIN,
> +                              NULL, xml, &xmlout);

Needs to check for xml being NULL on OOM before virHookCall.

ACK with those issues fixed.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120228/90712776/attachment-0001.sig>


More information about the libvir-list mailing list