[libvirt] [PATCH v2 1/3] test_driver: consider flags in testDomainSetMemoryFlags

Ilias Stamatis posted 3 patches 6 years, 7 months ago
[libvirt] [PATCH v2 1/3] test_driver: consider flags in testDomainSetMemoryFlags
Posted by Ilias Stamatis 6 years, 7 months ago
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.iliass@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
Re: [libvirt] [PATCH v2 1/3] test_driver: consider flags in testDomainSetMemoryFlags
Posted by Erik Skultety 6 years, 6 months ago
On Fri, Jul 12, 2019 at 07:55:33AM +0200, Ilias Stamatis wrote:
> 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.iliass@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)) {

^This should be virDomainObjIsActive(vm) right?

With that:
Reviewed-by: Erik Skultety <eskultet@redhat.com>

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