[libvirt] [PATCH 09/16] Implement migration v3 protocol in QEMU driver
Eric Blake
eblake at redhat.com
Thu May 12 03:30:33 UTC 2011
On 05/11/2011 03:09 AM, Daniel P. Berrange wrote:
> Implement the v3 migration protocol, which has two extra
> steps, 'begin' on the source host and 'confirm' on the
> source host. All other methods also gain both input and
> output cookies to allow bi-directional data passing at
> all stages.
>
> The QEMU peer2peer migration method gains another impl
> to provide the v3 migration. This finally allows migration
> cookies to work with tunnelled migration, which is required
> for Spice seemless migration & the lock manager transfer
s/seemless/seamless/
>
> * src/qemu/qemu_driver.c: Wire up migrate v3 APIs
> * src/qemu/qemu_migration.c, src/qemu/qemu_migration.h: Add
> begin & confirm methods, and peer2peer impl of v3
> ---
> src/qemu/qemu_driver.c | 318 +++++++++++++++++++++++++++++++++++++++-
> src/qemu/qemu_migration.c | 353 +++++++++++++++++++++++++++++++++++++++++++--
> src/qemu/qemu_migration.h | 17 ++-
> 3 files changed, 664 insertions(+), 24 deletions(-)
> +static int
> +qemuDomainMigrateConfirm3(virDomainPtr domain,
> + const char *cookiein,
> + int cookieinlen,
> + unsigned long flags,
> + int cancelled)
> +{
> + struct qemud_driver *driver = domain->conn->privateData;
> + virDomainObjPtr vm;
> + int ret = -1;
> +
> + virCheckFlags(VIR_MIGRATE_LIVE |
> + VIR_MIGRATE_PEER2PEER |
> + VIR_MIGRATE_TUNNELLED |
> + VIR_MIGRATE_PERSIST_DEST |
> + VIR_MIGRATE_UNDEFINE_SOURCE |
> + VIR_MIGRATE_PAUSED |
> + VIR_MIGRATE_NON_SHARED_DISK |
> + VIR_MIGRATE_NON_SHARED_INC, -1);
> +
> + /* Migration failed. Save the current error so nothing squashes it */
Spurious comment.
> @@ -1341,6 +1382,13 @@ static int doTunnelMigrate(struct qemud_driver *driver,
> goto cleanup;
> }
>
> + if (!(mig = qemuMigrationEatCookie(vm, cookiein, cookieinlen,
> + QEMU_MIGRATION_COOKIE_GRAPHICS)))
> + goto cleanup;
> +
> + if (qemuDomainMigrateGraphicsRelocate(driver, vm, mig) < 0)
> + VIR_WARN0("unable to provide data for graphics client relocation");
Rebase woes.
>
> +/* This is essentially a re-impl of virDomainMigrateVersion3
> + * from libvirt.c, but running in source libvirtd context,
> + * instead of client app context & also adding in tunnel
> + * handling */
> +static int doPeer2PeerMigrate3(struct qemud_driver *driver,
> + virConnectPtr sconn,
> + virConnectPtr dconn,
> + virDomainObjPtr vm,
> + const char *uri,
> + unsigned long flags,
> + const char *dname,
> + unsigned long resource)
> +{
> + virDomainPtr ddomain = NULL;
> + if (flags & VIR_MIGRATE_TUNNELLED) {
> + /*
> + * Tunnelled Migrate Version 2 does not support cookies
> + * due to missing parameters in the prepareTunnel() API.
> + */
> +
Too much copy-and-paste.
ACK with this squashed in:
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index 0650d44..eb50565 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -6107,8 +6107,6 @@ qemuDomainMigrateConfirm3(virDomainPtr domain,
VIR_MIGRATE_NON_SHARED_DISK |
VIR_MIGRATE_NON_SHARED_INC, -1);
- /* Migration failed. Save the current error so nothing squashes it */
-
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, domain->uuid);
if (!vm) {
diff --git i/src/qemu/qemu_migration.c w/src/qemu/qemu_migration.c
index ccb798f..ea30229 100644
--- i/src/qemu/qemu_migration.c
+++ w/src/qemu/qemu_migration.c
@@ -1387,7 +1387,7 @@ static int doTunnelMigrate(struct qemud_driver
*driver,
goto cleanup;
if (qemuDomainMigrateGraphicsRelocate(driver, vm, mig) < 0)
- VIR_WARN0("unable to provide data for graphics client relocation");
+ VIR_WARN("unable to provide data for graphics client relocation");
/* 3. start migration on source */
qemuDomainObjEnterMonitorWithDriver(driver, vm);
@@ -1456,8 +1456,8 @@ static int doTunnelMigrate(struct qemud_driver
*driver,
if (ret == 0 &&
qemuMigrationBakeCookie(mig, driver, vm, cookieout,
cookieoutlen, 0) < 0)
- VIR_WARN0("Unable to encode migration cookie");
-
+ VIR_WARN("Unable to encode migration cookie");
+y
cancel:
if (ret != 0 && virDomainObjIsActive(vm)) {
qemuDomainObjEnterMonitorWithDriver(driver, vm);
@@ -1652,11 +1652,6 @@ static int doPeer2PeerMigrate3(struct
qemud_driver *driver,
cookieout = NULL;
cookieoutlen = 0;
if (flags & VIR_MIGRATE_TUNNELLED) {
- /*
- * Tunnelled Migrate Version 2 does not support cookies
- * due to missing parameters in the prepareTunnel() API.
- */
-
if (!(st = virStreamNew(dconn, 0)))
goto cleanup;
--
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/20110511/5f5c4a0f/attachment-0001.sig>
More information about the libvir-list
mailing list