Don't process inactive domains in regular Xen driver backends

This commit is contained in:
Daniel P. Berrange 2006-11-15 21:03:34 +00:00
parent 77bcf6b598
commit 18035eddd3
6 changed files with 85 additions and 25 deletions

View File

@ -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

View 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;

View 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;

View 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);

View 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 */

View 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.