diff --git a/ChangeLog b/ChangeLog index 879209d409..c43de6d0bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Fri Nov 28 16:16:54 CET 2008 Guido Günther + + 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 Allow generic remote://hostname/ URI for automatic probe diff --git a/src/proxy_internal.c b/src/proxy_internal.c index 2e801d9725..0254ebc5f8 100644 --- a/src/proxy_internal.c +++ b/src/proxy_internal.c @@ -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; diff --git a/src/proxy_internal.h b/src/proxy_internal.h index 56dc8674f3..185fa674c9 100644 --- a/src/proxy_internal.h +++ b/src/proxy_internal.h @@ -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__ */ diff --git a/src/xen_unified.c b/src/xen_unified.c index 4229f0ef1e..ca05d75313 100644 --- a/src/xen_unified.c +++ b/src/xen_unified.c @@ -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; } diff --git a/src/xend_internal.c b/src/xend_internal.c index 55eaf94302..b839497cfb 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -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; diff --git a/src/xend_internal.h b/src/xend_internal.h index 20645fb79f..768964fc9e 100644 --- a/src/xend_internal.h +++ b/src/xend_internal.h @@ -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_ */