[libvirt] [PATCH v2 06/11] qemu_migration: Introduce qemuMigrationStartNBDServer
li guang
lig.fnst at cn.fujitsu.com
Tue Dec 18 08:06:32 UTC 2012
在 2012-12-10一的 20:27 +0100,Michal Privoznik写道:
> 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_driver.c | 8 +++---
> src/qemu/qemu_migration.c | 59 +++++++++++++++++++++++++++++++++++---------
> src/qemu/qemu_migration.h | 6 +++-
> 3 files changed, 55 insertions(+), 18 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index e099c5c..dfb6f9f 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -9698,7 +9698,7 @@ qemuDomainMigratePrepareTunnel(virConnectPtr dconn,
>
> ret = qemuMigrationPrepareTunnel(driver, dconn,
> NULL, 0, NULL, NULL, /* No cookies in v2 */
> - st, dname, dom_xml);
> + st, dname, dom_xml, flags);
>
> cleanup:
> qemuDriverUnlock(driver);
> @@ -9758,7 +9758,7 @@ qemuDomainMigratePrepare2(virConnectPtr dconn,
> ret = qemuMigrationPrepareDirect(driver, dconn,
> NULL, 0, NULL, NULL, /* No cookies */
> uri_in, uri_out,
> - dname, dom_xml);
> + dname, dom_xml, flags);
>
> cleanup:
> qemuDriverUnlock(driver);
> @@ -9995,7 +9995,7 @@ qemuDomainMigratePrepare3(virConnectPtr dconn,
> cookiein, cookieinlen,
> cookieout, cookieoutlen,
> uri_in, uri_out,
> - dname, dom_xml);
> + dname, dom_xml, flags);
>
> cleanup:
> qemuDriverUnlock(driver);
> @@ -10040,7 +10040,7 @@ qemuDomainMigratePrepareTunnel3(virConnectPtr dconn,
> ret = qemuMigrationPrepareTunnel(driver, dconn,
> cookiein, cookieinlen,
> cookieout, cookieoutlen,
> - st, dname, dom_xml);
> + st, dname, dom_xml, flags);
support offline migration patch
(commit 347a712ab19b33867efc1e58bcd2f3219271cd3f)
has done these add flags changes
> qemuDriverUnlock(driver);
>
> cleanup:
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 8c1e873..d785e75 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -1078,6 +1078,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;
> +}
> +
> +
> /* 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
> @@ -1584,7 +1607,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
> const char *dname,
> const char *dom_xml,
> const char *migrateFrom,
> - virStreamPtr st)
> + virStreamPtr st,
> + unsigned long flags)
> {
> virDomainDefPtr def = NULL;
> virDomainObjPtr vm = NULL;
> @@ -1728,9 +1752,17 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
> VIR_DEBUG("Received no lockstate");
> }
>
> - /* dummy place holder for real work */
> - nbdPort = 0;
> - cookie_flags |= 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;
> + }
> + cookie_flags |= QEMU_MIGRATION_COOKIE_NBD;
> + }
>
> if (qemuMigrationBakeCookie(mig, driver, vm, nbdPort,
> cookieout, cookieoutlen, cookie_flags) < 0) {
> @@ -1800,21 +1832,23 @@ qemuMigrationPrepareTunnel(virQEMUDriverPtr driver,
> int *cookieoutlen,
> virStreamPtr st,
> const char *dname,
> - const char *dom_xml)
> + const char *dom_xml,
> + unsigned long flags)
> {
> 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)
> */
> ret = qemuMigrationPrepareAny(driver, dconn, cookiein, cookieinlen,
> cookieout, cookieoutlen, dname, dom_xml,
> - "stdio", st);
> + "stdio", st, flags);
> return ret;
> }
>
> @@ -1829,7 +1863,8 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
> const char *uri_in,
> char **uri_out,
> const char *dname,
> - const char *dom_xml)
> + const char *dom_xml,
> + unsigned long flags)
> {
> static int port = 0;
> int this_port;
> @@ -1840,10 +1875,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".
> *
> @@ -1925,7 +1960,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
>
> ret = qemuMigrationPrepareAny(driver, dconn, cookiein, cookieinlen,
> cookieout, cookieoutlen, dname, dom_xml,
> - migrateFrom, NULL);
> + migrateFrom, NULL, flags);
> cleanup:
> VIR_FREE(hostname);
> if (ret != 0)
> diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h
> index 62e39a0..c961866 100644
> --- a/src/qemu/qemu_migration.h
> +++ b/src/qemu/qemu_migration.h
> @@ -97,7 +97,8 @@ int qemuMigrationPrepareTunnel(virQEMUDriverPtr driver,
> int *cookieoutlen,
> virStreamPtr st,
> const char *dname,
> - const char *dom_xml);
> + const char *dom_xml,
> + unsigned long flags);
>
> int qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
> virConnectPtr dconn,
> @@ -108,7 +109,8 @@ int qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
> const char *uri_in,
> char **uri_out,
> const char *dname,
> - const char *dom_xml);
> + const char *dom_xml,
> + unsigned long flags);
>
> int qemuMigrationPerform(virQEMUDriverPtr driver,
> virConnectPtr conn,
--
regards!
li guang
More information about the libvir-list
mailing list