This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.18 by this push:
     new 1e133d05c7a kvm: Handle the failures when setting up memory balloon 
stats period for KVM VMs (#8049)
1e133d05c7a is described below

commit 1e133d05c7a804da7caccffaa16e066e4754254b
Author: Harikrishna <[email protected]>
AuthorDate: Fri Nov 3 13:37:11 2023 +0530

    kvm: Handle the failures when setting up memory balloon stats period for 
KVM VMs (#8049)
---
 .../kvm/resource/LibvirtComputingResource.java     |  4 ++--
 .../kvm/resource/LibvirtDomainXMLParser.java       | 25 ++++++++++++++++------
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 265e786e8f8..e239443197d 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -1313,8 +1313,8 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
                 }
                 s_logger.debug(String.format("The memory balloon stats period 
[%s] has been set successfully for the VM (Libvirt Domain) with ID [%s] and 
name [%s].",
                         currentVmBalloonStatsPeriod, vmId, dm.getName()));
-            } catch (final LibvirtException e) {
-                s_logger.warn("Failed to set up memory balloon stats period." 
+ e.getMessage());
+            } catch (final Exception e) {
+                s_logger.warn(String.format("Failed to set up memory balloon 
stats period for the VM %s with exception %s", parser.getName(), 
e.getMessage()));
             }
         }
     }
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
index cb650e24b2f..80a35a04f93 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
@@ -59,6 +59,8 @@ public class LibvirtDomainXMLParser {
     private Integer vncPort;
     private String desc;
 
+    private String name;
+
     public boolean parseDomainXML(String domXML) {
         DocumentBuilder builder;
         try {
@@ -71,6 +73,7 @@ public class LibvirtDomainXMLParser {
             Element rootElement = doc.getDocumentElement();
 
             desc = getTagValue("description", rootElement);
+            name = getTagValue("name", rootElement);
 
             Element devices = 
(Element)rootElement.getElementsByTagName("devices").item(0);
             NodeList disks = devices.getElementsByTagName("disk");
@@ -303,15 +306,19 @@ public class LibvirtDomainXMLParser {
                 String path = getTagValue("backend", rng);
                 String bytes = getAttrValue("rate", "bytes", rng);
                 String period = getAttrValue("rate", "period", rng);
-
-                if (StringUtils.isEmpty(backendModel)) {
-                    def = new RngDef(path, Integer.parseInt(bytes), 
Integer.parseInt(period));
+                if (StringUtils.isAnyEmpty(bytes, period)) {
+                    s_logger.debug(String.format("Bytes and period in the rng 
section should not be null, please check the VM %s", name));
                 } else {
-                    def = new RngDef(path, 
RngBackendModel.valueOf(backendModel.toUpperCase()),
-                                     Integer.parseInt(bytes), 
Integer.parseInt(period));
+                    if (StringUtils.isEmpty(backendModel)) {
+                        def = new RngDef(path, Integer.parseInt(bytes), 
Integer.parseInt(period));
+                    } else {
+                        def = new RngDef(path, 
RngBackendModel.valueOf(backendModel.toUpperCase()),
+                                Integer.parseInt(bytes), 
Integer.parseInt(period));
+                    }
+                }
+                if (def != null) {
+                    rngDefs.add(def);
                 }
-
-                rngDefs.add(def);
             }
 
             NodeList watchDogs = devices.getElementsByTagName("watchdog");
@@ -418,4 +425,8 @@ public class LibvirtDomainXMLParser {
     public String getDescription() {
         return desc;
     }
+
+    public String getName() {
+        return name;
+    }
 }

Reply via email to