]> xenbits.xensource.com Git - libvirt.git/commitdiff
Prefer xenstore driver for listDomains, since xen HV reports ghost ids of
authorGuido Günther <agx@sigxcpu.org>
Fri, 28 Nov 2008 15:25:04 +0000 (15:25 +0000)
committerGuido Günther <agx@sigxcpu.org>
Fri, 28 Nov 2008 15:25:04 +0000 (15:25 +0000)
already shutdown domains in some xen versions

ChangeLog
src/proxy_internal.c
src/proxy_internal.h
src/xen_unified.c
src/xend_internal.c
src/xend_internal.h

index 879209d40927b3bb50aaecc5f92786f778dd4023..c43de6d0bf5d0429a1de81436b58aa9827f819c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Fri Nov 28 16:16:54 CET 2008 Guido Günther <agx@sigxcpu.org>
+
+       Prefer xenstore driver for listDomains, since xen HV reports ghost ids
+       of already shutdown domains in some xen versions
+       * src/proxy_internal.c, src/proxy_internal.h: declare
+       xenProxyListDomains non static
+       * src/xend_internal.c, src/xend_internal.h: declare
+       xenDaemonListDomains non static
+       * src/xen_unified.c: prefer xenStoreListDomains over
+       xenHypervisorListDomains for xenUnifiedListDomains
+
 Fri Nov 28 11:58:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
 
        Allow generic remote://hostname/ URI for automatic probe
index 2e801d972554878b7f7f9b0da52eacddbcb0f82f..0254ebc5f8d422eda12e13770b5e9544fca4c194 100644 (file)
@@ -40,7 +40,6 @@ static int xenProxyOpen(virConnectPtr conn, virConnectAuthPtr auth, int flags);
 static int xenProxyGetVersion(virConnectPtr conn, unsigned long *hvVer);
 static int xenProxyNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
 static char *xenProxyGetCapabilities(virConnectPtr conn);
-static int xenProxyListDomains(virConnectPtr conn, int *ids, int maxids);
 static int xenProxyNumOfDomains(virConnectPtr conn);
 static unsigned long xenProxyDomainGetMaxMemory(virDomainPtr domain);
 static int xenProxyDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info);
@@ -566,7 +565,7 @@ xenProxyGetVersion(virConnectPtr conn, unsigned long *hvVer)
  *
  * Returns the number of domain found or -1 in case of error
  */
-static int
+int
 xenProxyListDomains(virConnectPtr conn, int *ids, int maxids)
 {
     virProxyPacket req;
index 56dc8674f319eaf0a3a758333d5ee67c8d1c4335..185fa674c9723702be6e70645759e086fc28c8db 100644 (file)
@@ -94,4 +94,6 @@ extern virDomainPtr xenProxyLookupByName(virConnectPtr conn,
 
 extern char *       xenProxyDomainDumpXML(virDomainPtr domain,
                                           int flags);
+extern int          xenProxyListDomains(virConnectPtr conn, int *ids,
+                                        int maxids);
 #endif /* __LIBVIR_PROXY_H__ */
index 4229f0ef1e831a7e5492269d1fa55d4805da3dde..ca05d753139e97ec5d11cdd95303d9c0f5e996ae 100644 (file)
@@ -516,14 +516,31 @@ static int
 xenUnifiedListDomains (virConnectPtr conn, int *ids, int maxids)
 {
     GET_PRIVATE(conn);
-    int i, ret;
+    int ret;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->listDomains) {
-            ret = drivers[i]->listDomains (conn, ids, maxids);
-            if (ret >= 0) return ret;
-        }
+    /* Try xenstore. */
+    if (priv->opened[XEN_UNIFIED_XS_OFFSET]) {
+        ret = xenStoreListDomains (conn, ids, maxids);
+        if (ret >= 0) return ret;
+    }
 
+    /* Try HV. */
+    if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET]) {
+        ret = xenHypervisorListDomains (conn, ids, maxids);
+        if (ret >= 0) return ret;
+    }
+
+    /* Try xend. */
+    if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
+        ret = xenDaemonListDomains (conn, ids, maxids);
+        if (ret >= 0) return ret;
+    }
+
+    /* Try proxy. */
+    if (priv->opened[XEN_UNIFIED_PROXY_OFFSET]) {
+        ret = xenProxyListDomains (conn, ids, maxids);
+        if (ret >= 0) return ret;
+    }
     return -1;
 }
 
index 55eaf94302de577502cb7a3c4fc869472088170b..b839497cfb276bd1b768617b2b607965c49585f5 100644 (file)
@@ -3411,7 +3411,7 @@ xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer)
  *
  * Returns the number of domain found or -1 in case of error
  */
-static int
+int
 xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids)
 {
     struct sexpr *root = NULL;
index 20645fb79fc20d3e7168819e9a33ffb6b54c1149..768964fc9e1740f6ff5570a507f888d2747a6445 100644 (file)
@@ -179,5 +179,6 @@ int xenDaemonDomainMigratePrepare (virConnectPtr dconn, char **cookie, int *cook
 int xenDaemonDomainMigratePerform (virDomainPtr domain, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource);
 
 int xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path, unsigned long long offset, size_t size, void *buffer);
+int xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids);
 
 #endif /* __XEND_INTERNAL_H_ */