]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Don't process inactive domains in regular Xen driver backends
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 15 Nov 2006 21:03:34 +0000 (21:03 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 15 Nov 2006 21:03:34 +0000 (21:03 +0000)
ChangeLog
src/proxy_internal.c
src/xen_internal.c
src/xend_internal.c
src/xend_internal.h
src/xs_internal.c

index 5a45484e743219add3796ec3b6253db29dad3cda..b03ea386d7f80f756adbce7431e612275ea33ba8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,16 +1,24 @@
-Wed Nov 15 15:59:13 EST 2006 Daniel Berrange <berrange@redhat.com>
+Wed Nov 15 15:08:13 EST 2006 Daniel Berrange <berrange@redhat.com>
+
+       * src/xen_internal.c, src/xs_internal.c, src/xend_internal.c,
+       src/proxy.c: Don't try to invoke APIs if domain is is < 0, letting
+       these inactive domains be handled by other driver backend.
+       * src/xend_internal.h: make xend_config_version() api available
+       to other drivers
+
+Wed Nov 15 14:59:13 EST 2006 Daniel Berrange <berrange@redhat.com>
 
        * src/hash.c, src/hash.h: Added three new methods for iterating
        over hashtable entries, virHashForEach, virHashRemoveSet &
        virHashSearch.
 
-Wed Nov 15 15:52:01 EST 2006 Daniel Berrange <berrange@redhat.com>
+Wed Nov 15 14:52:01 EST 2006 Daniel Berrange <berrange@redhat.com>
 
        * src/conf.c, src/conf.h: Add two new APIs virConfNew() and
        virConfSetValue() for creating & populating new config objects
        in memory instead of from a file
 
-Wed Nov 15 15:42:01 EST 2006 Daniel Berrange <berrange@redhat.com>
+Wed Nov 15 14:42:01 EST 2006 Daniel Berrange <berrange@redhat.com>
 
        * python/libvir.c, python/libvirt_wrap.h, python/types.h: Ensure
        that  unsigned longs are marshalled to python Long type instead
index 0a9d418bf74e88e7ec5e4d668ad2bb7a552aaf0e..b945e002343dcf60757f9cf1f0b57fe3d6f6e8b8 100644 (file)
@@ -663,7 +663,7 @@ xenProxyDomainGetDomMaxMemory(virConnectPtr conn, int id)
 
     if (!VIR_IS_CONNECT(conn)) {
         virProxyError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
-        return (-1);
+        return (0);
     }
     memset(&req, 0, sizeof(req));
     req.command = VIR_PROXY_MAX_MEMORY;
@@ -672,7 +672,7 @@ xenProxyDomainGetDomMaxMemory(virConnectPtr conn, int id)
     ret = xenProxyCommand(conn, &req, NULL, 0);
     if (ret < 0) {
         xenProxyClose(conn);
-       return(-1);
+        return(0);
     }
     return(req.data.larg);
 }
@@ -695,6 +695,8 @@ xenProxyDomainGetMaxMemory(virDomainPtr domain)
            virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         return (0);
     }
+    if (domain->handle < 0)
+        return (0);
     return(xenProxyDomainGetDomMaxMemory(domain->conn, domain->handle));
 }
 
@@ -716,15 +718,17 @@ xenProxyDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
     int ret;
 
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
-       if (domain == NULL)
-           virProxyError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
-       else
-           virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
-        return (0);
+        if (domain == NULL)
+            virProxyError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        else
+            virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        return (-1);
     }
+    if (domain->handle < 0)
+        return (-1);
     if (info == NULL) {
         virProxyError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
-       return (-1);
+        return (-1);
     }
     memset(&req, 0, sizeof(req));
     req.command = VIR_PROXY_DOMAIN_INFO;
@@ -733,11 +737,11 @@ xenProxyDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
     ret = xenProxyCommand(domain->conn, &req, &ans, 0);
     if (ret < 0) {
         xenProxyClose(domain->conn);
-       return(-1);
+        return(-1);
     }
     if (ans.len != sizeof(virProxyPacket) + sizeof(virDomainInfo)) {
         virProxyError(domain->conn, VIR_ERR_OPERATION_FAILED, __FUNCTION__);
-       return (-1);
+        return (-1);
     }
     memmove(info, &ans.extra.dinfo, sizeof(virDomainInfo));
 
@@ -960,6 +964,8 @@ xenProxyDomainDumpXML(virDomainPtr domain, int flags ATTRIBUTE_UNUSED)
            virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         return (NULL);
     }
+    if (domain->handle < 0)
+        return (NULL);
     memset(&req, 0, sizeof(req));
     req.command = VIR_PROXY_DOMAIN_XML;
     req.data.arg = domain->handle;
index eee0133bf7993df3885338555f32361c205260b3..908f695d43551f34194c6a1b75ec4da847841638 100644 (file)
@@ -1498,7 +1498,7 @@ static unsigned long
 xenHypervisorGetMaxMemory(virDomainPtr domain)
 {
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0))
+        (domain->conn->handle < 0) || (domain->handle < 0))
         return (0);
 
     return(xenHypervisorGetDomMaxMemory(domain->conn, domain->handle));
@@ -1597,6 +1597,7 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
         (domain->conn->handle < 0) || (info == NULL) ||
         (domain->handle < 0))
         return (-1);
+
     return(xenHypervisorGetDomInfo(domain->conn, domain->handle, info));
 
 }
@@ -1616,7 +1617,7 @@ xenHypervisorPauseDomain(virDomainPtr domain)
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0))
+        (domain->conn->handle < 0) || (domain->handle < 0))
         return (-1);
 
     ret = virXen_pausedomain(domain->conn->handle, domain->handle);
@@ -1639,7 +1640,7 @@ xenHypervisorResumeDomain(virDomainPtr domain)
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0))
+        (domain->conn->handle < 0) || (domain->handle < 0))
         return (-1);
 
     ret = virXen_unpausedomain(domain->conn->handle, domain->handle);
@@ -1662,7 +1663,7 @@ xenHypervisorDestroyDomain(virDomainPtr domain)
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0))
+        (domain->conn->handle < 0) || (domain->handle < 0))
         return (-1);
 
     ret = virXen_destroydomain(domain->conn->handle, domain->handle);
@@ -1686,7 +1687,7 @@ xenHypervisorSetMaxMemory(virDomainPtr domain, unsigned long memory)
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0))
+        (domain->conn->handle < 0) || (domain->handle < 0))
         return (-1);
 
     ret = virXen_setmaxmem(domain->conn->handle, domain->handle, memory);
@@ -1713,7 +1714,8 @@ xenHypervisorSetVcpus(virDomainPtr domain, unsigned int nvcpus)
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0) || (nvcpus < 1))
+        (domain->conn->handle < 0) || (domain->handle < 0) ||
+        (nvcpus < 1))
         return (-1);
 
     ret = virXen_setmaxvcpus(domain->conn->handle, domain->handle, nvcpus);
@@ -1741,7 +1743,8 @@ xenHypervisorPinVcpu(virDomainPtr domain, unsigned int vcpu,
     int ret;
 
     if ((domain == NULL) || (domain->conn == NULL) ||
-        (domain->conn->handle < 0) || (cpumap == NULL) || (maplen < 1))
+        (domain->conn->handle < 0) || (domain->handle < 0) ||
+        (cpumap == NULL) || (maplen < 1))
         return (-1);
 
     ret = virXen_setvcpumap(domain->conn->handle, domain->handle, vcpu,
@@ -1782,9 +1785,10 @@ xenHypervisorGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
     virVcpuInfoPtr ipt;
     int nbinfo, i;
 
-    if ((domain == NULL) || (domain->conn == NULL) || (domain->conn->handle < 0)
-        || (info == NULL) || (maxinfo < 1)
-        || (sizeof(cpumap_t) & 7))
+    if ((domain == NULL) || (domain->conn == NULL) ||
+        (domain->conn->handle < 0) || (domain->handle < 0) ||
+        (info == NULL) || (maxinfo < 1) ||
+        (sizeof(cpumap_t) & 7))
         return (-1);
     if ((cpumaps != NULL) && (maplen < 1))
         return -1;
index 95444c555a65a9fbb937065ea85b345ed37161e1..d58ac0dd4a0f3d9cd6a389ef8856d1afbc270b47 100644 (file)
@@ -1266,7 +1266,7 @@ xend_get_node(virConnectPtr xend)
     return node;
 }
 
-static int
+int
 xend_get_config_version(virConnectPtr conn) {
     struct sexpr *root;
     const char *value;
@@ -2075,6 +2075,8 @@ xenDaemonDomainSuspend(virDomainPtr domain)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "pause", NULL);
 }
 
@@ -2095,6 +2097,8 @@ xenDaemonDomainResume(virDomainPtr domain)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "unpause", NULL);
 }
 
@@ -2116,6 +2120,8 @@ xenDaemonDomainShutdown(virDomainPtr domain)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "shutdown", "reason", "halt", NULL);
 }
 
@@ -2138,6 +2144,8 @@ xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "shutdown", "reason", "reboot", NULL);
 }
 
@@ -2162,6 +2170,8 @@ xenDaemonDomainDestroy(virDomainPtr domain)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "destroy", NULL);
 }
 
@@ -2187,6 +2197,8 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
     return xend_op(domain->conn, domain->name, "op", "save", "file", filename, NULL);
 }
 
@@ -2232,6 +2244,8 @@ xenDaemonDomainGetMaxMemory(virDomainPtr domain)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
 
     /* can we ask for a subset ? worth it ? */
     root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
@@ -2266,6 +2280,9 @@ xenDaemonDomainSetMaxMemory(virDomainPtr domain, unsigned long memory)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
+
     snprintf(buf, sizeof(buf), "%lu", memory >> 10);
     return xend_op(domain->conn, domain->name, "op", "maxmem_set", "memory",
                    buf, NULL);
@@ -2297,6 +2314,9 @@ xenDaemonDomainSetMemory(virDomainPtr domain, unsigned long memory)
                     __FUNCTION__);
         return(-1);
     }
+    if (domain->handle < 0)
+        return(-1);
+
     snprintf(buf, sizeof(buf), "%lu", memory >> 10);
     return xend_op(domain->conn, domain->name, "op", "mem_target_set",
                    "target", buf, NULL);
@@ -2345,6 +2365,8 @@ xenDaemonDomainDumpXML(virDomainPtr domain, int flags ATTRIBUTE_UNUSED)
                     __FUNCTION__);
         return(NULL);
     }
+    if (domain->handle < 0)
+        return(NULL);
 
     return xenDaemonDomainDumpXMLByID(domain->conn, domain->handle);
 }
@@ -2372,7 +2394,8 @@ xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
                     __FUNCTION__);
         return(-1);
     }
-
+    if (domain->handle < 0)
+        return(-1);
 
     root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
     if (root == NULL)
@@ -2652,6 +2675,9 @@ xenDaemonDomainSetVcpus(virDomainPtr domain, unsigned int vcpus)
                     __FUNCTION__);
         return (-1);
     }
+    if (domain->handle < 0)
+        return(-1);
+
     snprintf(buf, sizeof(buf), "%d", vcpus);
     return(xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
                    buf, NULL));
@@ -2681,6 +2707,8 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
                     __FUNCTION__);
         return (-1);
     }
+    if (domain->handle < 0)
+        return(-1);
 
     /* from bit map, build character string of mapped CPU numbers */
     for (i = 0; i < maplen; i++) for (j = 0; j < 8; j++)
@@ -2734,6 +2762,9 @@ xenDaemonDomainGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
                      __FUNCTION__);
         return (-1);
     }
+    if (domain->handle < 0)
+        return(-1);
+
     root = sexpr_get(domain->conn, "/xend/domain/%s?op=vcpuinfo", domain->name);
     if (root == NULL)
         return (-1);
index 11c54136da98b749c9b55362e66131ef79a9eeec..8f2197754fcf95f78df9189f81b72b7ace3d6eaf 100644 (file)
@@ -613,6 +613,7 @@ char *xenDaemonDomainDumpXMLByID(virConnectPtr xend,
  */
     int xend_log(virConnectPtr xend, char *buffer, size_t n_buffer);
 
+  int xend_get_config_version(virConnectPtr conn);
   char *xend_parse_domain_sexp(virConnectPtr conn,  char *root, int xendConfigVersion);
 
 /* refactored ones */
index db2b9dfe4efdd85723afb8c32fae2e1767348aeb..8630426e3b100c796f8c9804e706e7d8cf76b2d7 100644 (file)
@@ -372,6 +372,8 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
     }
     if (domain->conn->xshandle == NULL)
         return(-1);
+    if (domain->handle == -1)
+        return(-1);
 
     tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "running");
     if (tmp != NULL) {
@@ -430,6 +432,8 @@ xenStoreDomainSetMemory(virDomainPtr domain, unsigned long memory)
                         __FUNCTION__);
        return(-1);
     }
+    if (domain->handle == -1)
+        return(-1);
     snprintf(value, 19, "%lu", memory);
     value[19] = 0;
     ret = virDomainDoStoreWrite(domain, "memory/target", &value[0]);
@@ -454,6 +458,8 @@ xenStoreDomainGetMaxMemory(virDomainPtr domain)
 
     if (!VIR_IS_CONNECTED_DOMAIN(domain))
         return (ret);
+    if (domain->handle == -1)
+        return(-1);
 
     tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "memory/target");
     if (tmp != NULL) {
@@ -626,6 +632,8 @@ xenStoreDomainShutdown(virDomainPtr domain)
                         __FUNCTION__);
         return(-1);
     }
+    if (domain->handle == -1)
+        return(-1);
     /*
      * this is very hackish, the domU kernel probes for a special 
      * node in the xenstore and launch the shutdown command if found.
@@ -652,6 +660,8 @@ xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
                         __FUNCTION__);
         return(-1);
     }
+    if (domain->handle == -1)
+        return(-1);
     /*
      * this is very hackish, the domU kernel probes for a special 
      * node in the xenstore and launch the shutdown command if found.