[libvirt] [PATCH 02/16] Introduce yet another migration version in API.

Eric Blake eblake at redhat.com
Thu Apr 21 21:31:20 UTC 2011


On 04/21/2011 10:32 AM, Daniel P. Berrange wrote:
> Migration just seems togo from bad to worse. We already had to

s/togo/to go/

> 
> This patch attempts to introduce a version 3 that uses the
> improved 5 step sequence
> 
>  *  Src: Begin
>           - Generate XML to pass to dst
>           - Generate optional cookie to pass to dst
> 
>  *  Dst: Prepare
>           - Get ready to accept incoming VM
>           - Generate optional cookie to pass to src
> 
>  *  Src: Perform
>           - Start migration and wait for send completion
>           - Generate optional cookie to pass to dst
> 
>  *  Dst: Finish
>           - Wait for recv completion and check status
>           - Kill off VM if failed, resume if success
>           - Generate optional cookie to pass to src
> 
>  *  Src: Confirm
>           - Kill off VM if success, resume if failed

I think we've covered that this is a reasonable idiom in other threads.
 At least, I can't think of anything else to add.

> 
> The API is designed to allow both input and output cookies
> in all methods where applicable. This lets us pass around
> arbitrary extra driver specific data between src & dst during
> migration. Combined with the extra 'Begin' method this lets
> us pass lease information from source to dst at the start of
> migration
> 
> Moving the killing of the source VM out of Perform and
> into Confirm, means we can now recover if the dst host
> can't successfully Finish receiving migration data.

I think this also opens the gate to allowing the destination side
gracefully abort the receive job, although I'm not sure if your patch
series got to that point, yet.

> + *  Src: Begin
> + *        - Generate XML to pass to dst
> + *        - Generate optional cookie to pass to dst
> + *
> + *  Dst: Prepare
> + *        - Get ready to accept incoming VM
> + *        - Generate optional cookie to pass to src
> + *
> + *  Src: Perform
> + *        - Start migration and wait for send completion
> + *        - Generate optional cookie to pass to dst
> + *
> + *  Dst: Finish
> + *        - Wait for recv completion and check status
> + *        - Kill off VM if failed, resume if success
> + *        - Generate optional cookie to pass to src
> + *
> + *  Src: Confirm
> + *        - Kill off VM if success, resume if failed
> + *
> + */
>  
> +/*
> + * Not for public use.  This function is part of the internal
> + * implementation of migration in the remote case.
> + */
> +char *
> +virDomainMigrateBegin3(virDomainPtr domain,
> +                       char **cookieout,
> +                       int *cookieoutlen,
> +                       unsigned long flags,
> +                       const char *dname,
> +                       unsigned long bandwidth)
> +{
> +    virConnectPtr conn;
> +
> +    VIR_DOMAIN_DEBUG(domain, "cookieout=%p, cookieoutlen=%p, "
> +                     "flags=%lu, dname=%s, bandwidth=%lu",
> +                     cookieout, cookieoutlen, flags,
> +                     NULLSTR(dname), bandwidth);
> +
> +    virResetLastError();
> +
> +    if (!VIR_IS_CONNECTED_DOMAIN (domain)) {

I noticed spacing is funny here [s/DOMAIN (/DOMAIN(/].  Didn't look
closely for it elsewhere.

> +++ b/src/libvirt_private.syms
> @@ -547,6 +547,12 @@ virDomainMigratePerform;
>  virDomainMigratePrepare2;
>  virDomainMigratePrepare;
>  virDomainMigratePrepareTunnel;
> +virDomainMigrateBegin3;
> +virDomainMigratePrepare3;
> +virDomainMigratePrepareTunnel3;
> +virDomainMigratePerform3;
> +virDomainMigrateFinish3;
> +virDomainMigrateConfirm3;

For consistency, sort these lines alphabetically amongst the other
functions.

You missed stubs for src/libxl/libxl_driver.c.

ACK with those nits fixed.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

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


More information about the libvir-list mailing list