Daniel P. Berrange wrote:
Ah, now I understand why you were having trouble with this.
With this patch, the flow of control is logically
virDomainMigrate(src, dst, uri)
+- virDomainMigratePrepare(dst)
+- virDomainMigratePerform(src, uri)
| +- dst2 = virConnectOpen(uri)
| +- virDomainMigratePrepareTunnel(dst2)
| +- while (1)
| | +- virStreamSend(dst2, data)
| +- virConnectClose(uri)
+- virDomainMigrateFinish(dst)
If we remember the requirement from the libvirt-qpid guys, which is
to remove the need for an application to pass in the destination
handle, this scheme won't work because 'dst' will be NULL.
To cope with that requirement we'd need the logical flow to be
virDomainMigrate(src, NULL, uri)
+- virDomainMigratePerform(src, uri)
+- dst = virConnectOpen(uri)
+- virDomainMigratePrepare(dst)
+- virDomainMigratePrepareTunnel(dst)
+- while (1)
| +- virStreamSend(dst, data)
+- virDomainMigrateFinish(dst)
+- virConnectClose(uri)
At which point, having separate virDomainMigratePrepare vs
virDomainMigratePrepareTunnel is overkill & might as well
just have virDomainMigratePrepareTunnel, which does all
the virDomainMigratePrepare logic itself, avoiding the need
to pass a TCP port around in virDomainObjPtr.
OK, now I think I see your logic, and it makes sense. I'll convert my code over
to this sort of logic (which should be pretty easy), and then report back.
--
Chris Lalancette