
2011/5/24 Daniel P. Berrange <berrange@redhat.com>:
The virDomainMigratePerform3 currently has a single URI parameter whose meaning varies. It is either
- A QEMU migration URI (normal migration) - A libvirtd connection URI (peer2peer migration)
Unfortunately when using peer2peer migration, without also using tunnelled migration, it is possible that both URIs are required.
This adds a second URI parameter to the virDomainMigratePerform3 method, to cope with this scenario. Each parameter how has a fixed meaning.
NB, there is no way to actually take advantage of this yet, since virDomainMigrate/virDomainMigrateToURI do not have any way to provide the 2 separate URIs
* daemon/remote.c, src/remote/remote_driver.c, src/remote/remote_protocol.x, src/remote_protocol-structs: Add the second URI parameter to perform3 message * src/driver.h, src/libvirt.c, src/libvirt_internal.h: Add the second URI parameter to Perform3 method * src/libvirt_internal.h, src/qemu/qemu_migration.c, src/qemu/qemu_migration.h: Update to handle URIs correctly --- daemon/remote.c | 13 +++++++++++-- src/driver.h | 2 ++ src/libvirt.c | 37 +++++++++++++++++++++++++------------ src/libvirt_internal.h | 6 ++++-- src/qemu/qemu_driver.c | 12 ++++++++++-- src/qemu/qemu_migration.c | 26 +++++++++++++++++--------- src/qemu/qemu_migration.h | 1 + src/remote/remote_driver.c | 8 ++++++-- src/remote/remote_protocol.x | 6 ++++-- src/remote_protocol-structs | 1 + 10 files changed, 81 insertions(+), 31 deletions(-)
diff --git a/src/libvirt.c b/src/libvirt.c index 7b7323e..2b2c1fd 100644 --- a/src/libvirt.c +++ b/src/libvirt.c
@@ -4766,10 +4778,10 @@ virDomainMigratePerform3(virDomainPtr domain, virConnectPtr conn;
VIR_DOMAIN_DEBUG(domain, "xmlin=%s cookiein=%p, cookieinlen=%d, " - "cookieout=%p, cookieoutlen=%p, " + "cookieout=%p, cookieoutlen=%p, dconnuri=%s, " "uri=%s, flags=%lu, dname=%s, bandwidth=%lu", NULLSTR(xmlin), cookiein, cookieinlen, - cookieout, cookieoutlen, + cookieout, cookieoutlen, NULLSTR(dconnuri), uri, flags, NULLSTR(dname), bandwidth);
uri can be NULL here, can't it? So this should use NULLSTR(uri) instead of plain uri.
@@ -4817,15 +4829,16 @@ virDomainMigrateFinish3(virConnectPtr dconn, int cookieinlen, char **cookieout, int *cookieoutlen, + const char *dconnuri, const char *uri, unsigned long flags, int cancelled, virDomainPtr *newdom) { VIR_DEBUG("dconn=%p, dname=%s, cookiein=%p, cookieinlen=%d, cookieout=%p," - "cookieoutlen=%p, uri=%s, flags=%lu, retcode=%d newdom=%p", + "cookieoutlen=%p, dconnuri=%s, uri=%s, flags=%lu, retcode=%d newdom=%p", dconn, NULLSTR(dname), cookiein, cookieinlen, cookieout, - cookieoutlen, uri, flags, cancelled, newdom); + cookieoutlen, NULLSTR(dconnuri), NULLSTR(uri), flags, cancelled, newdom);
virResetLastError();
Here it's correct.
diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index c7c1932..3144271 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -161,7 +161,8 @@ int virDomainMigratePerform3(virDomainPtr dom, int cookieinlen, char **cookieout, int *cookieoutlen, - const char *uri, + const char *dconnuri, /* libvirtd URI if Peer2Peer, NULL otherwise */ + const char *uri, /* VM Migration URI */ unsigned long flags, const char *dname, unsigned long resource); @@ -172,7 +173,8 @@ int virDomainMigrateFinish3(virConnectPtr dconn, int cookieinlen, char **cookieout, int *cookieoutlen, - const char *uri, + const char *dconnuri, /* libvirtd URI if Peer2Peer, NULL otherwise */ + const char *uri, /* VM Migration URI */ unsigned long flags, int cancelled, /* Kill the dst VM */ virDomainPtr *newdom);
Maybe state in this comments that uri is NULL in the Peer2Peer case, just for clarity.
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 971f53a..014e5ac 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -1510,6 +1510,7 @@ struct remote_domain_migrate_perform3_args { u_int cookie_in_len; char * cookie_in_val; } cookie_in; + remote_string dconnuri; remote_nonnull_string uri; uint64_t flags; remote_string dname;
As uri is now optional you need to change its type from remote_nonnull_string to remote_string here and in remote_domain_migrate_finish3_args. And you need to add remote_string dconnuri to remote_domain_migrate_finish3_args to satisfy make syntax-check. ACK, with this nits fixed. Matthias