]> xenbits.xensource.com Git - libvirt.git/commitdiff
vz: factor out config update flags checks
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Fri, 8 Apr 2016 09:36:44 +0000 (12:36 +0300)
committerMaxim Nestratov <mnestratov@virtuozzo.com>
Mon, 11 Apr 2016 16:58:30 +0000 (19:58 +0300)
Actually this is not pure refactoring. Part of common code is
replaced with virDomainObjUpdateModificationImpact and this
a good replacement. It includes removed check of inactive
domain and active flags set. Additionally we resolve
current flag in accordance with current state of domain.
Thus it becames possible to attach/detach devices for
inactive domains if this flag is set.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
src/vz/vz_driver.c

index e12a95acda36e557eb52605bb2552cdb6c21e1c7..08447d93aa8f8df20c5aad1838c4d9e441cff110 100644 (file)
@@ -1037,6 +1037,28 @@ vzDomainManagedSaveRemove(virDomainPtr domain, unsigned int flags)
     return ret;
 }
 
+static int vzCheckConfigUpdateFlags(virDomainObjPtr dom, unsigned int *flags)
+{
+    if (virDomainObjUpdateModificationImpact(dom, flags) < 0)
+        return -1;
+
+    if (!(*flags & VIR_DOMAIN_AFFECT_CONFIG)) {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("domain config update needs VIR_DOMAIN_AFFECT_CONFIG "
+                         "flag to be set"));
+        return -1;
+    }
+
+    if (virDomainObjIsActive(dom) && !(*flags & VIR_DOMAIN_AFFECT_LIVE)) {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("Updates on a running domain need "
+                         "VIR_DOMAIN_AFFECT_LIVE flag"));
+        return -1;
+    }
+
+    return 0;
+}
+
 static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
                                      unsigned int flags)
 {
@@ -1044,7 +1066,6 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
     vzConnPtr privconn = dom->conn->privateData;
     virDomainDeviceDefPtr dev = NULL;
     virDomainObjPtr privdom = NULL;
-    bool domactive = false;
 
     virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
                   VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -1052,25 +1073,8 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
     if (!(privdom = vzDomObjFromDomain(dom)))
         return -1;
 
-    if (!(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("device attach needs VIR_DOMAIN_AFFECT_CONFIG "
-                         "flag to be set"));
+    if (vzCheckConfigUpdateFlags(privdom, &flags) < 0)
         goto cleanup;
-    }
-
-    domactive = virDomainObjIsActive(privdom);
-    if (!domactive && (flags & VIR_DOMAIN_AFFECT_LIVE)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("cannot do live update a device on "
-                         "inactive domain"));
-        goto cleanup;
-    }
-    if (domactive && !(flags & VIR_DOMAIN_AFFECT_LIVE)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("Updates on a running domain need "
-                         "VIR_DOMAIN_AFFECT_LIVE flag"));
-    }
 
     dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
                                   privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);
@@ -1120,7 +1124,6 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
     vzConnPtr privconn = dom->conn->privateData;
     virDomainDeviceDefPtr dev = NULL;
     virDomainObjPtr privdom = NULL;
-    bool domactive = false;
 
     virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
                   VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -1129,25 +1132,8 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
     if (privdom == NULL)
         return -1;
 
-    if (!(flags & VIR_DOMAIN_AFFECT_CONFIG)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("device detach needs VIR_DOMAIN_AFFECT_CONFIG "
-                         "flag to be set"));
+    if (vzCheckConfigUpdateFlags(privdom, &flags) < 0)
         goto cleanup;
-    }
-
-    domactive = virDomainObjIsActive(privdom);
-    if (!domactive && (flags & VIR_DOMAIN_AFFECT_LIVE)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("cannot do live update a device on "
-                         "inactive domain"));
-        goto cleanup;
-    }
-    if (domactive && !(flags & VIR_DOMAIN_AFFECT_LIVE)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("Updates on a running domain need "
-                         "VIR_DOMAIN_AFFECT_LIVE flag"));
-    }
 
     dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
                                   privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);