[libvirt] [PATCH v2 07/12] migration: refactor: extract parameter adaption functions

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Thu Sep 10 13:20:19 UTC 2015


Extract parametes adapdation and checking which is protocol dependent into
designated functions. Leave only branching and common checks in
virDomainMigrateUnmanagedParams.

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

diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 79ed9f8..55efd49 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -3339,7 +3339,7 @@ virDomainMigratePeer2PeerParams(virDomainPtr domain,
 }
 
 static int
-virDomainMigrateUnmanagedParams(virDomainPtr domain,
+virDomainMigrateUnmanagedProto2(virDomainPtr domain,
                                 const char *dconnuri,
                                 virTypedParameterPtr params,
                                 int nparams,
@@ -3362,6 +3362,63 @@ virDomainMigrateUnmanagedParams(virDomainPtr domain,
         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",
+                           _("Unable to override peer2peer migration URI"));
+            return -1;
+        }
+        uri = dconnuri;
+    } else {
+        uri = miguri;
+    }
+
+    return domain->conn->driver->domainMigratePerform
+            (domain, NULL, 0, uri, flags, dname, bandwidth);
+}
+
+static int
+virDomainMigrateUnmanagedProto3(virDomainPtr domain,
+                                const char *dconnuri,
+                                virTypedParameterPtr params,
+                                int nparams,
+                                unsigned int flags)
+{
+    const char *miguri = NULL;
+    const char *dname = NULL;
+    const char *xmlin = NULL;
+    unsigned long long bandwidth = 0;
+
+    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;
+    }
+
+    return domain->conn->driver->domainMigratePerform3
+            (domain, xmlin, NULL, 0, NULL, NULL, dconnuri,
+             miguri, flags, dname, bandwidth);
+}
+
+static int
+virDomainMigrateUnmanagedParams(virDomainPtr domain,
+                                const char *dconnuri,
+                                virTypedParameterPtr params,
+                                int nparams,
+                                unsigned int flags)
+{
     VIR_DOMAIN_DEBUG(domain, "dconnuri=%s, params=%p, nparams=%d, flags=%x",
                      dconnuri, params, nparams, flags);
     VIR_TYPED_PARAMS_DEBUG(params, nparams);
@@ -3376,33 +3433,16 @@ virDomainMigrateUnmanagedParams(virDomainPtr domain,
             virReportUnsupportedError();
             return -1;
         }
-        return domain->conn->driver->domainMigratePerform3
-                (domain, xmlin, NULL, 0, NULL, NULL, dconnuri,
-                 miguri, flags, dname, bandwidth);
+        return virDomainMigrateUnmanagedProto3(domain, dconnuri,
+                                               params, nparams, flags);
     } else {
         VIR_DEBUG("Using migration protocol 2");
         if (!domain->conn->driver->domainMigratePerform) {
             virReportUnsupportedError();
             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",
-                               _("Unable to override peer2peer migration URI"));
-                return -1;
-            }
-            uri = dconnuri;
-        } else {
-            uri = miguri;
-        }
-        return domain->conn->driver->domainMigratePerform
-                (domain, NULL, 0, uri, flags, dname, bandwidth);
+        return virDomainMigrateUnmanagedProto2(domain, dconnuri,
+                                               params, nparams, flags);
     }
 }
 
-- 
1.7.1




More information about the libvir-list mailing list