On Mon, Sep 30, 2013 at 03:55:21 +0000, Wangyufei (A) wrote:
> From 6c2de34432db674072231ad66c9e8a0a600ede8a Mon Sep 17 00:00:00 2001
> From: WangYufei <[email protected]>
> Date: Mon, 30 Sep 2013 11:48:43 +0800
> Subject: [PATCH] qemu_migrate: Fix assign the same port when migrating
> concurrently
>
> When we migrate vms concurrently, there's a chance that libvirtd on
> destination assign the same port for different migrations, which will lead to
> migration failed during migration prepare phase on destination. So we use
> virPortAllocator here to solve the problem.
>
...
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index e8bc04d..9437b5a 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -688,6 +688,11 @@ qemuStateInitialize(bool privileged,
> cfg->webSocketPortMax)) == NULL)
> goto error;
>
> + if ((qemu_driver->migrationPorts =
> + virPortAllocatorNew(QEMU_MIGRATION_PORT_MIN,
> + QEMU_MIGRATION_PORT_MAX)) == NULL)
> + goto error;
> +
Hmm, I guess we could make the port range configurable, but that's a
separate thing.
> if (qemuSecurityInit(qemu_driver) < 0)
> goto error;
>
> @@ -994,6 +999,7 @@ qemuStateCleanup(void) {
> virObjectUnref(qemu_driver->domains);
> virObjectUnref(qemu_driver->remotePorts);
> virObjectUnref(qemu_driver->webSocketPorts);
> + virObjectUnref(qemu_driver->migrationPorts);
>
> virObjectUnref(qemu_driver->xmlopt);
>
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 3a1aab7..82d90bf 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
...
> @@ -2600,8 +2600,11 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver,
> cleanup:
> virURIFree(uri);
> VIR_FREE(hostname);
> - if (ret != 0)
> + if (ret != 0) {
> VIR_FREE(*uri_out);
> + virPortAllocatorRelease(driver->migrationPorts,
> + (unsigned short)this_port);
> + }
> return ret;
> }
I'm afraid we will also need to release the port once the migration is
done. qemuMigrationPrepareCleanup and qemuMigrationFinish are the places
where we should handle this.
Jirka
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list