[libvirt] [PATCH v3 09/14] migration: refactor: refactor parameter compatibility checks

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Fri Sep 18 15:05:47 UTC 2015


Move virDomainMigrateUnmanagedProto* expected params list check into
function itself and use common virTypedParamsCheck for this purpose.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
---
 src/libvirt-domain.c |   56 ++++++++++++++++++++-----------------------------
 1 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index f87a22d..abed9d6 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -3322,30 +3322,31 @@ virDomainMigrateUnmanagedProto2(virDomainPtr domain,
                                 int nparams,
                                 unsigned int flags)
 {
+    /* uri parameter is added for direct case */
+    const char *compatParams[] = { VIR_MIGRATE_PARAM_DEST_NAME,
+                                   VIR_MIGRATE_PARAM_BANDWIDTH,
+                                   VIR_MIGRATE_PARAM_URI };
     const char *uri = NULL;
     const char *miguri = NULL;
     const char *dname = NULL;
-    const char *xmlin = NULL;
     unsigned long long bandwidth = 0;
 
+    if (!virTypedParamsCheck(params, nparams, compatParams,
+                             ARRAY_CARDINALITY(compatParams))) {
+        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+                       _("Migration does not support some of parameters."));
+        return -1;
+    }
+
     if (virTypedParamsGetString(params, nparams,
                                 VIR_MIGRATE_PARAM_URI, &miguri) < 0 ||
         virTypedParamsGetString(params, nparams,
                                 VIR_MIGRATE_PARAM_DEST_NAME, &dname) < 0 ||
-        virTypedParamsGetString(params, nparams,
-                                VIR_MIGRATE_PARAM_DEST_XML, &xmlin) < 0 ||
         virTypedParamsGetULLong(params, nparams,
                                 VIR_MIGRATE_PARAM_BANDWIDTH, &bandwidth) < 0) {
         return -1;
     }
 
-    if (xmlin) {
-        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
-                       _("Unable to change target guest XML during "
-                         "migration"));
-        return -1;
-    }
-
     if (flags & VIR_MIGRATE_PEER2PEER) {
         if (miguri) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -3369,11 +3370,22 @@ virDomainMigrateUnmanagedProto3(virDomainPtr domain,
                                 int nparams,
                                 unsigned int flags)
 {
+    const char *compatParams[] = { VIR_MIGRATE_PARAM_URI,
+                                   VIR_MIGRATE_PARAM_DEST_NAME,
+                                   VIR_MIGRATE_PARAM_DEST_XML,
+                                   VIR_MIGRATE_PARAM_BANDWIDTH };
     const char *miguri = NULL;
     const char *dname = NULL;
     const char *xmlin = NULL;
     unsigned long long bandwidth = 0;
 
+    if (!virTypedParamsCheck(params, nparams, compatParams,
+                             ARRAY_CARDINALITY(compatParams))) {
+        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+                       _("Migration does not support some of parameters."));
+        return -1;
+    }
+
     if (virTypedParamsGetString(params, nparams,
                                 VIR_MIGRATE_PARAM_URI, &miguri) < 0 ||
         virTypedParamsGetString(params, nparams,
@@ -4462,12 +4474,6 @@ virDomainMigrateToURI3(virDomainPtr domain,
                        unsigned int nparams,
                        unsigned int flags)
 {
-    bool compat;
-    const char *compatParams[] = { VIR_MIGRATE_PARAM_URI,
-                                   VIR_MIGRATE_PARAM_DEST_NAME,
-                                   VIR_MIGRATE_PARAM_DEST_XML,
-                                   VIR_MIGRATE_PARAM_BANDWIDTH };
-
     VIR_DOMAIN_DEBUG(domain, "dconnuri=%s, params=%p, nparms=%u flags=%x",
                      NULLSTR(dconnuri), params, nparams, flags);
     VIR_TYPED_PARAMS_DEBUG(params, nparams);
@@ -4482,9 +4488,6 @@ virDomainMigrateToURI3(virDomainPtr domain,
                              VIR_MIGRATE_NON_SHARED_INC,
                              error);
 
-    compat = virTypedParamsCheck(params, nparams, compatParams,
-                                 ARRAY_CARDINALITY(compatParams));
-
     if (flags & VIR_MIGRATE_PEER2PEER) {
         if (!VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn,
                                       VIR_DRV_FEATURE_MIGRATION_P2P)) {
@@ -4500,17 +4503,11 @@ virDomainMigrateToURI3(virDomainPtr domain,
             if (virDomainMigratePeer2PeerParams(domain, dconnuri, params,
                                                 nparams, flags) < 0)
                 goto error;
-        } else if (compat) {
+        } else {
             VIR_DEBUG("Using peer2peer migration");
             if (virDomainMigrateUnmanagedParams(domain, dconnuri, params,
                                                 nparams, flags) < 0)
                 goto error;
-        } else {
-            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
-                           _("Peer-to-peer migration with extensible "
-                             "parameters is not supported but extended "
-                             "parameters were passed"));
-            goto error;
         }
     } else {
         if (!VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn,
@@ -4522,13 +4519,6 @@ virDomainMigrateToURI3(virDomainPtr domain,
             goto error;
         }
 
-        if (!compat) {
-            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
-                           _("Direct migration does not support extensible "
-                             "parameters"));
-            goto error;
-        }
-
         VIR_DEBUG("Using direct migration");
         if (virDomainMigrateUnmanagedParams(domain, NULL, params,
                                             nparams, flags) < 0)
-- 
1.7.1




More information about the libvir-list mailing list