On Mon, Sep 30, 2013 at 03:55:21 +0000, Wangyufei (A) wrote: > From 6c2de34432db674072231ad66c9e8a0a600ede8a Mon Sep 17 00:00:00 2001 > From: WangYufei <james.wangyu...@huawei.com> > 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 libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list