Update the current or max memory, on the persistent or live definition
depending on the flags which are currently ignored.

Signed-off-by: Ilias Stamatis <stamatis.ili...@gmail.com>
---
 src/test/test_driver.c | 51 +++++++++++++++++++++++++++++++++++-------
 1 file changed, 43 insertions(+), 8 deletions(-)

diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index c10344f6cd..90910060ed 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2473,24 +2473,59 @@ static int testDomainSetMemoryFlags(virDomainPtr domain,
                                     unsigned long memory,
                                     unsigned int flags)
 {
-    virDomainObjPtr privdom;
+    virDomainObjPtr vm;
+    virDomainDefPtr def;
     int ret = -1;

-    virCheckFlags(0, -1);
+    virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+                  VIR_DOMAIN_AFFECT_CONFIG |
+                  VIR_DOMAIN_MEM_MAXIMUM, -1);

-    if (!(privdom = testDomObjFromDomain(domain)))
+    if (!(vm = testDomObjFromDomain(domain)))
         return -1;

-    if (memory > virDomainDefGetMemoryTotal(privdom->def)) {
-        virReportError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+    if (!(def = virDomainObjGetOneDef(vm, flags)))
         goto cleanup;
+
+    if (flags & VIR_DOMAIN_MEM_MAXIMUM) {
+        if (virDomainObjCheckActive(vm)) {
+            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                           _("cannot resize the maximum memory on an "
+                             "active domain"));
+            goto cleanup;
+        }
+
+        if (virDomainNumaGetNodeCount(def->numa) > 0) {
+            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                           _("initial memory size of a domain with NUMA "
+                             "nodes cannot be modified with this API"));
+            goto cleanup;
+        }
+
+        if (def->mem.max_memory && def->mem.max_memory < memory) {
+            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                           _("cannot set initial memory size greater than "
+                             "the maximum memory size"));
+            goto cleanup;
+        }
+
+        virDomainDefSetMemoryTotal(def, memory);
+
+        if (def->mem.cur_balloon > memory)
+            def->mem.cur_balloon = memory;
+    } else {
+        if (memory > virDomainDefGetMemoryTotal(def)) {
+            virReportError(VIR_ERR_INVALID_ARG, "%s",
+                           _("cannot set memory higher than max memory"));
+            goto cleanup;
+        }
+
+        def->mem.cur_balloon = memory;
     }

-    privdom->def->mem.cur_balloon = memory;
     ret = 0;
-
  cleanup:
-    virDomainObjEndAPI(&privdom);
+    virDomainObjEndAPI(&vm);
     return ret;
 }

--
2.22.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to