2011/5/24 Daniel P. Berrange <berrange(a)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