[libvirt] [PATCH v2.1 06/11] qemu_migration: Introduce qemuMigrationStartNBDServer

Jiri Denemark jdenemar at redhat.com
Thu Jan 17 23:14:11 UTC 2013


On Fri, Jan 11, 2013 at 17:52:18 +0100, Michal Privoznik wrote:
> This is a stub internal API just for now. Its purpose
> in life is to start NBD server and feed it with all
> domain disks. When adding a disk to NBD server, it
> is addressed via its alias (id= param on qemu command line).
> ---
>  src/qemu/qemu_migration.c | 46 +++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 39 insertions(+), 7 deletions(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 6fa4ad6..ccf223e 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -1087,6 +1087,29 @@ error:
>      return NULL;
>  }
>  
> +/**
> + * qemuMigrationStartNBDServer:
> + * @driver: qemu driver
> + * @vm: domain
> + * @nbdPort: which port is NBD server listening to
> + *
> + * Starts NBD server. This is a newer method to copy
> + * storage during migration than using 'blk' and 'inc'
> + * arguments in 'migrate' monitor command.
> + * Error is reported here.
> + *
> + * Returns 0 on success, -1 otherwise.
> + */
> +static int
> +qemuMigrationStartNBDServer(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
> +                            virDomainObjPtr vm ATTRIBUTE_UNUSED,
> +                            int *nbdPort ATTRIBUTE_UNUSED)
> +{
> +    /* do nothing for now */
> +    return 0;

Just squash 8/11 into this patch.

> +}
> +
> +
>  /* Validate whether the domain is safe to migrate.  If vm is NULL,
>   * then this is being run in the v2 Prepare stage on the destination
>   * (where we only have the target xml); if vm is provided, then this
> @@ -1799,9 +1822,17 @@ done:
>      else
>          cookieFlags = QEMU_MIGRATION_COOKIE_GRAPHICS;
>  
> -    /* dummy place holder for real work */
> -    nbdPort = 0;
> -    cookieFlags |= QEMU_MIGRATION_COOKIE_NBD;
> +    if ((flags & VIR_MIGRATE_NON_SHARED_INC ||
> +         flags & VIR_MIGRATE_NON_SHARED_DISK) &&
> +        mig->nbd && qemuCapsGet(priv->caps, QEMU_CAPS_NBD_SERVER)) {
> +        /* both source and destination qemus support nbd-server-*
> +         * commands and user requested disk copy. Use the new ones */
> +        if (qemuMigrationStartNBDServer(driver, vm, &nbdPort) < 0) {
> +            /* error already reported */
> +            goto endjob;
> +        }
> +        cookieFlags |= QEMU_MIGRATION_COOKIE_NBD;
> +    }

As I said earlier, this code should refuse using NBD in case of
tunnelled migration.

>  
>      if (qemuMigrationBakeCookie(mig, driver, vm, nbdPort,
>                                  cookieout, cookieoutlen, cookieFlags) < 0) {
> @@ -1879,9 +1910,10 @@ qemuMigrationPrepareTunnel(virQEMUDriverPtr driver,
>      int ret;
>  
>      VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, "
> -              "cookieout=%p, cookieoutlen=%p, st=%p, dname=%s, dom_xml=%s",
> +              "cookieout=%p, cookieoutlen=%p, st=%p, dname=%s, dom_xml=%s "
> +              "flags=%lx",
>                driver, dconn, NULLSTR(cookiein), cookieinlen,
> -              cookieout, cookieoutlen, st, NULLSTR(dname), dom_xml);
> +              cookieout, cookieoutlen, st, NULLSTR(dname), dom_xml, flags);
>  
>      /* QEMU will be started with -incoming stdio (which qemu_command might
>       * convert to exec:cat or fd:n)
> @@ -1915,10 +1947,10 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
>  
>      VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, "
>                "cookieout=%p, cookieoutlen=%p, uri_in=%s, uri_out=%p, "
> -              "dname=%s, dom_xml=%s",
> +              "dname=%s, dom_xml=%s flags=%lx",
>                driver, dconn, NULLSTR(cookiein), cookieinlen,
>                cookieout, cookieoutlen, NULLSTR(uri_in), uri_out,
> -              NULLSTR(dname), dom_xml);
> +              NULLSTR(dname), dom_xml, flags);
>  
>      /* The URI passed in may be NULL or a string "tcp://somehostname:port".
>       *

These two hunks are unrelated and may be pushed separately, ACK to them.

Jirka




More information about the libvir-list mailing list