[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