[Libvirt-cim] [PATCH 3 of 3] This patch exposes error messages from libvirt calls in VSMigrationService

Richard Maciel rmaciel at linux.vnet.ibm.com
Tue Feb 24 17:19:46 UTC 2009


# HG changeset patch
# User Richard Maciel <rmaciel at linux.vnet.ibm.com>
# Date 1235493767 10800
# Node ID 1ff6cf0ca3a1dc8b1d507389cd7e1625c711ce50
# Parent  874a34b43248c303da834aa73333bfe26a53943c
This patch exposes error messages from libvirt calls in VSMigrationService

#2:
  Fixed compile error
  Changed code based on feedback from Kaitlin Rupert

Signed-off-by: Richard Maciel <rmaciel at linux.vnet.ibm.com>

diff -r 874a34b43248 -r 1ff6cf0ca3a1 src/Virt_VSMigrationService.c
--- a/src/Virt_VSMigrationService.c	Tue Feb 24 13:42:47 2009 -0300
+++ b/src/Virt_VSMigrationService.c	Tue Feb 24 13:42:47 2009 -0300
@@ -259,16 +259,18 @@
         unsigned long remote;
 
         if (virConnectGetVersion(conn, &local)) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Unable to get local Hypervisor version");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Unable to get local Hypervisor version");
                 goto out;
         }
 
         if (virConnectGetVersion(dconn, &remote)) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Unable to get remote hypervisor version");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Unable to get remote Hypervisor version");
                 goto out;
         }
 
@@ -396,12 +398,28 @@
         pid_t pid;
         int i;
         int rc = -1;
+        virConnectPtr conn = virDomainGetConnect(dom);
+        const char *name = virDomainGetName(dom);
+        const char *uri = virConnectGetURI(conn);
+
+        if (name == NULL) {
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Failed to get domain name");
+                goto out;        
+        }
+
+        if (uri == NULL) {
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Failed to get URI of connection");
+                goto out; 
+        }
 
         pid = fork();
         if (pid == 0) {
-                virConnectPtr conn = virDomainGetConnect(dom);
-                const char *name = virDomainGetName(dom);
-                const char *uri = virConnectGetURI(conn);
 
                 if (setpgrp() == -1)
                         perror("setpgrp");
@@ -436,6 +454,7 @@
                 free(name);
         }
 
+ out:
         return s;
 }
 
@@ -589,9 +608,10 @@
 
         dom = virDomainLookupByName(conn, domain);
         if (dom == NULL) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_NOT_FOUND,
-                           "No such domain");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_NOT_FOUND,
+                                conn,
+                                "No such domain");
                 goto out;
         }
 
@@ -930,9 +950,10 @@
 
         ret = virDomainGetInfo(dom, &info);
         if (ret == -1) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Error getting domain info");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                virDomainGetConnect(dom),
+                                "Error getting domain info");
                 goto out;
         }
 
@@ -949,7 +970,7 @@
                 CU_DEBUG("Migration failed");
                 virt_set_status(_BROKER, &s,
                                 CMPI_RC_ERR_FAILED,
-                                virDomainGetConnect(dom),
+                                dconn,
                                 "Migration Failed");
         }
  out:
@@ -969,9 +990,10 @@
         CU_DEBUG("Shutting down domain for migration");
         ret = virDomainShutdown(dom);
         if (ret != 0) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Unable to shutdown guest");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                virDomainGetConnect(dom),
+                                "Unable to shutdown guest");
                 goto out;
         }
 
@@ -1005,9 +1027,14 @@
 
         *xml = virDomainGetXMLDesc(dom, 0);
         if (*xml == NULL) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Unable to retrieve domain XML.");
+
+                virConnectPtr conn = virDomainGetConnect(dom);
+
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Unable to retrieve domain XML");
+
                 goto out;
         }
 
@@ -1025,6 +1052,7 @@
         virDomainPtr dom;
         int i;
         int ret;
+        virConnectPtr lconn = virDomainGetConnect(ldom);
 
         for (i = 0; i < MIGRATE_SHUTDOWN_TIMEOUT; i++) {
                 if ((i % 30) == 0) {
@@ -1032,10 +1060,17 @@
                                  virDomainGetName(ldom));
                 }
 
-                dom = virDomainLookupByName(virDomainGetConnect(ldom),
+                dom = virDomainLookupByName(lconn,
                                             virDomainGetName(ldom));
                 if (dom == NULL) {
                         CU_DEBUG("Unable to re-lookup domain");
+
+                        virt_set_status(_BROKER, &s,
+                                        CMPI_RC_ERR_NOT_FOUND,
+                                        lconn,
+                                        "Domain `%s' not found",
+                                        virDomainGetName(ldom));
+
                         ret = -1;
                         break;
                 }
@@ -1055,9 +1090,10 @@
 
         newdom = virDomainDefineXML(rconn, xml);
         if (newdom == NULL) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Failed to define domain");
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                lconn,
+                                "Failed to define domain");
                 goto out;
         }
 
@@ -1067,9 +1103,11 @@
                 CU_DEBUG("Restarting domain on remote host");
                 if (virDomainCreate(newdom) != 0) {
                         CU_DEBUG("Failed to start domain on remote host");
-                        cu_statusf(_BROKER, &s,
-                                   CMPI_RC_ERR_FAILED,
-                                   "Failed to start domain on remote host");
+                        virt_set_status(_BROKER, &s,
+                                        CMPI_RC_ERR_FAILED,
+                                        lconn,
+                                        "Failed to start domain on remote \
+                                        host");
                 }
         }
  out:
@@ -1086,9 +1124,13 @@
 
         ret = virDomainGetInfo(dom, &info);
         if (ret == -1) {
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Error getting domain info");
+                virConnectPtr conn = virDomainGetConnect(dom);
+                
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Error getting domain info");
+
                 goto out;
         }
 
@@ -1117,9 +1159,11 @@
         dom = virDomainLookupByName(conn, job->domain);
         if (dom == NULL) {
                 CU_DEBUG("Failed to lookup `%s'", job->domain);
-                cu_statusf(_BROKER, &s,
-                           CMPI_RC_ERR_FAILED,
-                           "Failed to lookup domain `%s'", job->domain);
+                virt_set_status(_BROKER, &s,
+                                CMPI_RC_ERR_FAILED,
+                                conn,
+                                "Failed to lookup domain `%s'", job->domain);
+
                 goto out;
         }
 




More information about the Libvirt-cim mailing list