[Libvirt-cim] [PATCH 1 of 3] Make CSI throw an indication for domain state changes

Dan Smith danms at us.ibm.com
Mon Jun 30 20:05:48 UTC 2008


# HG changeset patch
# User Dan Smith <danms at us.ibm.com>
# Date 1214850492 25200
# Node ID 0734a17d5aa18239e8a53b1131ccc02dfecc4874
# Parent  b123b6b1fb08c3ab956f1c33801e743e082192b9
Make CSI throw an indication for domain state changes

Signed-off-by: Dan Smith <danms at us.ibm.com>

diff -r b123b6b1fb08 -r 0734a17d5aa1 src/Virt_ComputerSystemIndication.c
--- a/src/Virt_ComputerSystemIndication.c	Fri Jun 27 08:59:09 2008 -0700
+++ b/src/Virt_ComputerSystemIndication.c	Mon Jun 30 11:28:12 2008 -0700
@@ -62,6 +62,12 @@
 struct dom_xml {
         char uuid[VIR_UUID_STRING_BUFLEN];
         char *xml;
+        enum {DOM_OFFLINE,
+              DOM_ONLINE,
+              DOM_PAUSED,
+              DOM_CRASHED,
+              DOM_GONE,
+        } state;
 };
 
 static void free_dom_xml (struct dom_xml dom)
@@ -85,6 +91,35 @@
 
  out:        
         return name;
+}
+
+static int dom_state(virDomainPtr dom)
+{
+        virDomainInfo info;
+        int ret;
+
+        ret = virDomainGetInfo(dom, &info);
+        if (ret != 0)
+                return DOM_GONE;
+
+        switch (info.state) {
+        case VIR_DOMAIN_NOSTATE:
+        case VIR_DOMAIN_RUNNING:
+        case VIR_DOMAIN_BLOCKED:
+                return DOM_ONLINE;
+
+        case VIR_DOMAIN_PAUSED:
+                return DOM_PAUSED;
+
+        case VIR_DOMAIN_SHUTOFF:
+                return DOM_OFFLINE;
+
+        case VIR_DOMAIN_CRASHED:
+                return DOM_CRASHED;
+
+        default:
+                return DOM_GONE;
+        };
 }
 
 static CMPIStatus doms_to_xml(struct dom_xml **dom_xml_list, 
@@ -115,6 +150,8 @@
                                    "Failed to get xml desc");
                         break;
                 }
+
+                (*dom_xml_list)[i].state = dom_state(dom_ptr_list[i]);
         }
         
         return s;
@@ -131,8 +168,15 @@
                 if (strcmp(cur_xml[i].uuid, prev_dom.uuid) != 0)
                         continue;
                 
-                if (strcmp(cur_xml[i].xml, prev_dom.xml) != 0)
+                if (strcmp(cur_xml[i].xml, prev_dom.xml) != 0) {
+                        CU_DEBUG("Domain config changed");
                         ret = true;
+                }
+
+                if (prev_dom.state != cur_xml[i].state) {
+                        CU_DEBUG("Domain state changed");
+                        ret = true;
+                }
 
                 break;
         }




More information about the Libvirt-cim mailing list