[libvirt] [PATCH 01/16] Introduce yet another migration version in API.
Eric Blake
eblake at redhat.com
Wed May 11 23:13:31 UTC 2011
On 05/11/2011 03:09 AM, Daniel P. Berrange wrote:
> Migration just seems togo from bad to worse. We already had to
s/togo/to go/
> introduce a second migration protocol when adding the QEMU driver,
> since the one from Xen was insufficiently flexible to cope with
> passing the data the QEMU driver required.
>
> @@ -643,6 +712,12 @@ struct _virDriver {
> virDrvQemuDomainMonitorCommand qemuDomainMonitorCommand;
> virDrvDomainOpenConsole domainOpenConsole;
> virDrvDomainInjectNMI domainInjectNMI;
> + virDrvDomainMigrateBegin3 domainMigrateBegin3;
> + virDrvDomainMigratePrepare3 domainMigratePrepare3;
> + virDrvDomainMigratePrepareTunnel3 domainMigratePrepareTunnel3;
> + virDrvDomainMigratePerform3 domainMigratePerform3;
> + virDrvDomainMigrateFinish3 domainMigrateFinish3;
> + virDrvDomainMigrateConfirm3 domainMigrateConfirm3;
Should we group these callbacks next door to their version2 counterparts
to make it easier to find all the migration callbacks next to one
another? Up to you; I didn't do it below...
> @@ -3691,6 +3898,7 @@ virDomainMigrate (virDomainPtr domain,
> return NULL;
> }
>
> + VIR_DEBUG0("Using peer2peer migration");
Recent patch flurry means this won't compile. Isn't rebasing fun? :)
> +int
> +virDomainMigratePerform3(virDomainPtr domain,
> + const char *cookiein,
> + int cookieinlen,
> + char **cookieout,
> + int *cookieoutlen,
> + const char *uri,
> + unsigned long flags,
> + const char *dname,
> + unsigned long bandwidth)
> +{
> + virConnectPtr conn;
> +
> + VIR_DOMAIN_DEBUG(domain, "cookiein=%p, cookieinlen=%d, cookieout=%p, cookieoutlen=%p,"
> + "uri=%s, flags=%lu, dname=%s, bandwidth=%lu",
> + cookiein, cookieinlen, cookieout, cookieoutlen,
> + uri, flags, NULLSTR(dname), bandwidth);
Oh my; 10 arguments. You broke my < 10-argument assumption in one blow :)
> +
> + virResetLastError();
> +
> + if (!VIR_IS_CONNECT (dconn)) {
Still some spaces before ( if you want to clean that up.
ACK with this squashed in:
diff --git i/src/libvirt.c w/src/libvirt.c
index ec888b2..aa72fb3 100644
--- i/src/libvirt.c
+++ w/src/libvirt.c
@@ -312,15 +312,17 @@ static struct gcry_thread_cbs virTLSThreadImpl = {
};
/* Helper macros to implement VIR_DOMAIN_DEBUG using just C99. This
- * assumes you pass fewer than 10 arguments to VIR_DOMAIN_DEBUG, but
+ * assumes you pass fewer than 15 arguments to VIR_DOMAIN_DEBUG, but
* can easily be expanded if needed.
*
* Note that gcc provides extensions of "define a(b...) b" or
* "define a(b,...) b,##__VA_ARGS__" as a means of eliding a comma
* when no var-args are present, but we don't want to require gcc.
*/
-#define VIR_ARG10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10
-#define VIR_HAS_COMMA(...) VIR_ARG10(__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1,
1, 0)
+#define VIR_ARG15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
+ _11, _12, _13, _14, _15, ...) _15
+#define VIR_HAS_COMMA(...) \
+ VIR_ARG15(__VA_ARGS__, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
/* Form the name VIR_DOMAIN_DEBUG_[01], then call that macro,
* according to how many arguments are present. Two-phase due to
@@ -3439,7 +3441,7 @@ virDomainMigrateVersion1 (virDomainPtr domain,
ddomain = dconn->driver->domainMigrateFinish
(dconn, dname, cookie, cookielen, uri, flags);
else
- ddomain = virDomainLookupByName (dconn, dname);
+ ddomain = virDomainLookupByName(dconn, dname);
done:
VIR_FREE (uri_out);
@@ -3930,14 +3932,14 @@ virDomainMigrate (virDomainPtr domain,
return NULL;
}
- VIR_DEBUG0("Using peer2peer migration");
+ VIR_DEBUG("Using peer2peer migration");
if (virDomainMigratePeer2Peer(domain, flags, dname, uri ?
uri : dstURI, bandwidth) < 0) {
VIR_FREE(dstURI);
goto error;
}
VIR_FREE(dstURI);
- ddomain = virDomainLookupByName (dconn, dname ? dname :
domain->name);
+ ddomain = virDomainLookupByName(dconn, dname ? dname :
domain->name);
} else {
/* This driver does not support peer to peer migration */
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
@@ -3955,19 +3957,19 @@ virDomainMigrate (virDomainPtr domain,
VIR_DRV_FEATURE_MIGRATION_V3) &&
VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
VIR_DRV_FEATURE_MIGRATION_V3)) {
- VIR_DEBUG0("Using migration protocol 3");
+ VIR_DEBUG("Using migration protocol 3");
ddomain = virDomainMigrateVersion3(domain, dconn, flags,
dname, uri, bandwidth);
} else if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver,
domain->conn,
VIR_DRV_FEATURE_MIGRATION_V2) &&
VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
VIR_DRV_FEATURE_MIGRATION_V2)) {
- VIR_DEBUG0("Using migration protocol 2");
+ VIR_DEBUG("Using migration protocol 2");
ddomain = virDomainMigrateVersion2(domain, dconn, flags,
dname, uri, bandwidth);
} else if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver,
domain->conn,
VIR_DRV_FEATURE_MIGRATION_V1) &&
VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
VIR_DRV_FEATURE_MIGRATION_V1)) {
- VIR_DEBUG0("Using migration protocol 1");
+ VIR_DEBUG("Using migration protocol 1");
ddomain = virDomainMigrateVersion1(domain, dconn, flags,
dname, uri, bandwidth);
} else {
/* This driver does not support any migration method */
@@ -4122,7 +4124,7 @@ virDomainMigratePrepare (virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
@@ -4135,9 +4137,9 @@ virDomainMigratePrepare (virConnectPtr dconn,
if (dconn->driver->domainMigratePrepare) {
int ret;
- ret = dconn->driver->domainMigratePrepare (dconn, cookie,
cookielen,
- uri_in, uri_out,
- flags, dname,
bandwidth);
+ ret = dconn->driver->domainMigratePrepare(dconn, cookie, cookielen,
+ uri_in, uri_out,
+ flags, dname, bandwidth);
if (ret < 0)
goto error;
return ret;
@@ -4218,7 +4220,7 @@ virDomainMigrateFinish (virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return NULL;
@@ -4231,9 +4233,9 @@ virDomainMigrateFinish (virConnectPtr dconn,
if (dconn->driver->domainMigrateFinish) {
virDomainPtr ret;
- ret = dconn->driver->domainMigrateFinish (dconn, dname,
- cookie, cookielen,
- uri, flags);
+ ret = dconn->driver->domainMigrateFinish(dconn, dname,
+ cookie, cookielen,
+ uri, flags);
if (!ret)
goto error;
return ret;
@@ -4269,7 +4271,7 @@ virDomainMigratePrepare2 (virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
@@ -4282,10 +4284,10 @@ virDomainMigratePrepare2 (virConnectPtr dconn,
if (dconn->driver->domainMigratePrepare2) {
int ret;
- ret = dconn->driver->domainMigratePrepare2 (dconn, cookie,
cookielen,
- uri_in, uri_out,
- flags, dname,
bandwidth,
- dom_xml);
+ ret = dconn->driver->domainMigratePrepare2(dconn, cookie,
cookielen,
+ uri_in, uri_out,
+ flags, dname, bandwidth,
+ dom_xml);
if (ret < 0)
goto error;
return ret;
@@ -4317,7 +4319,7 @@ virDomainMigrateFinish2 (virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return NULL;
@@ -4330,10 +4332,10 @@ virDomainMigrateFinish2 (virConnectPtr dconn,
if (dconn->driver->domainMigrateFinish2) {
virDomainPtr ret;
- ret = dconn->driver->domainMigrateFinish2 (dconn, dname,
- cookie, cookielen,
- uri, flags,
- retcode);
+ ret = dconn->driver->domainMigrateFinish2(dconn, dname,
+ cookie, cookielen,
+ uri, flags,
+ retcode);
if (!ret)
goto error;
return ret;
@@ -4474,7 +4476,7 @@ virDomainMigratePrepare3(virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
@@ -4643,7 +4645,7 @@ virDomainMigrateFinish3(virConnectPtr dconn,
virResetLastError();
- if (!VIR_IS_CONNECT (dconn)) {
+ if (!VIR_IS_CONNECT(dconn)) {
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
virDispatchError(NULL);
return -1;
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110511/86d03fe3/attachment-0001.sig>
More information about the libvir-list
mailing list