[libvirt] [PATCH 1/2] Introduce new VIR_ERR_AGENT_UNRESPONSIVE error code

Michal Privoznik mprivozn at redhat.com
Mon Aug 27 11:57:10 UTC 2012


Currently, when guest agent is configure but not responsive
(e.g. due to appropriate service not running in the guest)
we return VIR_ERR_INTERNAL_ERROR or VIR_ERR_ARGUMENT_UNSUPPORTED.
Both are wrong. Therefore we need to introduce new error code
to reflect this case.
---
 include/libvirt/virterror.h |    2 ++
 src/qemu/qemu_agent.c       |    2 +-
 src/qemu/qemu_driver.c      |   24 ++++++++++++++----------
 src/util/virterror.c        |    7 +++++++
 4 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h
index 69c64aa..5140c38 100644
--- a/include/libvirt/virterror.h
+++ b/include/libvirt/virterror.h
@@ -283,6 +283,8 @@ typedef enum {
     VIR_ERR_OPERATION_UNSUPPORTED = 84, /* The requested operation is not
                                            supported */
     VIR_ERR_SSH = 85,                   /* error in ssh transport driver */
+    VIR_ERR_AGENT_UNRESPONSIVE = 86,    /* guest agent is unresponsive,
+                                           not running or not usable */
 } virErrorNumber;
 
 /**
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index c658bf8..ba29783 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -880,7 +880,7 @@ static int qemuAgentSend(qemuAgentPtr mon,
         if ((timeout && virCondWaitUntil(&mon->notify, &mon->lock, then) < 0) ||
             (!timeout && virCondWait(&mon->notify, &mon->lock) < 0)) {
             if (errno == ETIMEDOUT) {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
                                _("Guest agent not available for now"));
                 ret = -2;
             } else {
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 3fcca0e..f64d9ec 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -1734,8 +1734,9 @@ static int qemuDomainShutdownFlags(virDomainPtr dom, unsigned int flags) {
 
     if (useAgent) {
         if (priv->agentError) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("QEMU guest agent is not available due to an error"));
+            virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
+                           _("QEMU guest agent is not "
+                             "available due to an error"));
             goto cleanup;
         }
         if (!priv->agent) {
@@ -1815,8 +1816,9 @@ qemuDomainReboot(virDomainPtr dom, unsigned int flags)
 
     if (useAgent) {
         if (priv->agentError) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("QEMU guest agent is not available due to an error"));
+            virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
+                           _("QEMU guest agent is not "
+                             "available due to an error"));
             goto cleanup;
         }
         if (!priv->agent) {
@@ -10391,7 +10393,7 @@ qemuDomainSnapshotFSFreeze(struct qemud_driver *driver,
     int freezed;
 
     if (priv->agentError) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+        virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
                        _("QEMU guest agent is not "
                          "available due to an error"));
         return -1;
@@ -10419,7 +10421,7 @@ qemuDomainSnapshotFSThaw(struct qemud_driver *driver,
 
     if (priv->agentError) {
         if (report)
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+            virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
                            _("QEMU guest agent is not "
                              "available due to an error"));
         return -1;
@@ -13708,8 +13710,9 @@ qemuDomainPMSuspendForDuration(virDomainPtr dom,
     }
 
     if (priv->agentError) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("QEMU guest agent is not available due to an error"));
+        virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
+                       _("QEMU guest agent is not "
+                         "available due to an error"));
         goto cleanup;
     }
 
@@ -13849,8 +13852,9 @@ qemuDomainAgentCommand(virDomainPtr domain,
     }
 
     if (priv->agentError) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("QEMU guest agent is not available due to an error"));
+        virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
+                       _("QEMU guest agent is not "
+                         "available due to an error"));
         goto cleanup;
     }
 
diff --git a/src/util/virterror.c b/src/util/virterror.c
index 3ee2ae0..7caa69e 100644
--- a/src/util/virterror.c
+++ b/src/util/virterror.c
@@ -1199,6 +1199,13 @@ virErrorMsg(virErrorNumber error, const char *info)
                 errmsg = _("SSH transport error");
             else
                 errmsg = _("SSH transport error: %s");
+            break;
+        case VIR_ERR_AGENT_UNRESPONSIVE:
+            if (info == NULL)
+                errmsg = _("Guest agent is not responding");
+            else
+                errmsg = _("Guest agent is not responding: %s");
+            break;
     }
     return errmsg;
 }
-- 
1.7.8.6




More information about the libvir-list mailing list