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 * src/hash.c, src/hash.h: Added three new methods for iterating
over hashtable entries, virHashForEach, virHashRemoveSet & over hashtable entries, virHashForEach, virHashRemoveSet &
virHashSearch. 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 * src/conf.c, src/conf.h: Add two new APIs virConfNew() and
virConfSetValue() for creating & populating new config objects virConfSetValue() for creating & populating new config objects
in memory instead of from a file 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 * python/libvir.c, python/libvirt_wrap.h, python/types.h: Ensure
that unsigned longs are marshalled to python Long type instead 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)) { if (!VIR_IS_CONNECT(conn)) {
virProxyError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); virProxyError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1); return (0);
} }
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.command = VIR_PROXY_MAX_MEMORY; req.command = VIR_PROXY_MAX_MEMORY;
@ -672,7 +672,7 @@ xenProxyDomainGetDomMaxMemory(virConnectPtr conn, int id)
ret = xenProxyCommand(conn, &req, NULL, 0); ret = xenProxyCommand(conn, &req, NULL, 0);
if (ret < 0) { if (ret < 0) {
xenProxyClose(conn); xenProxyClose(conn);
return(-1); return(0);
} }
return(req.data.larg); return(req.data.larg);
} }
@ -695,6 +695,8 @@ xenProxyDomainGetMaxMemory(virDomainPtr domain)
virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (0); return (0);
} }
if (domain->handle < 0)
return (0);
return(xenProxyDomainGetDomMaxMemory(domain->conn, domain->handle)); return(xenProxyDomainGetDomMaxMemory(domain->conn, domain->handle));
} }
@ -716,15 +718,17 @@ xenProxyDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
int ret; int ret;
if (!VIR_IS_CONNECTED_DOMAIN(domain)) { if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
if (domain == NULL) if (domain == NULL)
virProxyError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); virProxyError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
else else
virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (0); return (-1);
} }
if (domain->handle < 0)
return (-1);
if (info == NULL) { if (info == NULL) {
virProxyError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__); virProxyError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1); return (-1);
} }
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.command = VIR_PROXY_DOMAIN_INFO; req.command = VIR_PROXY_DOMAIN_INFO;
@ -733,11 +737,11 @@ xenProxyDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
ret = xenProxyCommand(domain->conn, &req, &ans, 0); ret = xenProxyCommand(domain->conn, &req, &ans, 0);
if (ret < 0) { if (ret < 0) {
xenProxyClose(domain->conn); xenProxyClose(domain->conn);
return(-1); return(-1);
} }
if (ans.len != sizeof(virProxyPacket) + sizeof(virDomainInfo)) { if (ans.len != sizeof(virProxyPacket) + sizeof(virDomainInfo)) {
virProxyError(domain->conn, VIR_ERR_OPERATION_FAILED, __FUNCTION__); virProxyError(domain->conn, VIR_ERR_OPERATION_FAILED, __FUNCTION__);
return (-1); return (-1);
} }
memmove(info, &ans.extra.dinfo, sizeof(virDomainInfo)); 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__); virProxyError(domain->conn, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
return (NULL); return (NULL);
} }
if (domain->handle < 0)
return (NULL);
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.command = VIR_PROXY_DOMAIN_XML; req.command = VIR_PROXY_DOMAIN_XML;
req.data.arg = domain->handle; req.data.arg = domain->handle;

View File

@ -1498,7 +1498,7 @@ static unsigned long
xenHypervisorGetMaxMemory(virDomainPtr domain) xenHypervisorGetMaxMemory(virDomainPtr domain)
{ {
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0)) (domain->conn->handle < 0) || (domain->handle < 0))
return (0); return (0);
return(xenHypervisorGetDomMaxMemory(domain->conn, domain->handle)); return(xenHypervisorGetDomMaxMemory(domain->conn, domain->handle));
@ -1597,6 +1597,7 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
(domain->conn->handle < 0) || (info == NULL) || (domain->conn->handle < 0) || (info == NULL) ||
(domain->handle < 0)) (domain->handle < 0))
return (-1); return (-1);
return(xenHypervisorGetDomInfo(domain->conn, domain->handle, info)); return(xenHypervisorGetDomInfo(domain->conn, domain->handle, info));
} }
@ -1616,7 +1617,7 @@ xenHypervisorPauseDomain(virDomainPtr domain)
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0)) (domain->conn->handle < 0) || (domain->handle < 0))
return (-1); return (-1);
ret = virXen_pausedomain(domain->conn->handle, domain->handle); ret = virXen_pausedomain(domain->conn->handle, domain->handle);
@ -1639,7 +1640,7 @@ xenHypervisorResumeDomain(virDomainPtr domain)
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0)) (domain->conn->handle < 0) || (domain->handle < 0))
return (-1); return (-1);
ret = virXen_unpausedomain(domain->conn->handle, domain->handle); ret = virXen_unpausedomain(domain->conn->handle, domain->handle);
@ -1662,7 +1663,7 @@ xenHypervisorDestroyDomain(virDomainPtr domain)
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0)) (domain->conn->handle < 0) || (domain->handle < 0))
return (-1); return (-1);
ret = virXen_destroydomain(domain->conn->handle, domain->handle); ret = virXen_destroydomain(domain->conn->handle, domain->handle);
@ -1686,7 +1687,7 @@ xenHypervisorSetMaxMemory(virDomainPtr domain, unsigned long memory)
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0)) (domain->conn->handle < 0) || (domain->handle < 0))
return (-1); return (-1);
ret = virXen_setmaxmem(domain->conn->handle, domain->handle, memory); ret = virXen_setmaxmem(domain->conn->handle, domain->handle, memory);
@ -1713,7 +1714,8 @@ xenHypervisorSetVcpus(virDomainPtr domain, unsigned int nvcpus)
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || if ((domain == NULL) || (domain->conn == NULL) ||
(domain->conn->handle < 0) || (nvcpus < 1)) (domain->conn->handle < 0) || (domain->handle < 0) ||
(nvcpus < 1))
return (-1); return (-1);
ret = virXen_setmaxvcpus(domain->conn->handle, domain->handle, nvcpus); ret = virXen_setmaxvcpus(domain->conn->handle, domain->handle, nvcpus);
@ -1741,7 +1743,8 @@ xenHypervisorPinVcpu(virDomainPtr domain, unsigned int vcpu,
int ret; int ret;
if ((domain == NULL) || (domain->conn == NULL) || 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); return (-1);
ret = virXen_setvcpumap(domain->conn->handle, domain->handle, vcpu, ret = virXen_setvcpumap(domain->conn->handle, domain->handle, vcpu,
@ -1782,9 +1785,10 @@ xenHypervisorGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
virVcpuInfoPtr ipt; virVcpuInfoPtr ipt;
int nbinfo, i; int nbinfo, i;
if ((domain == NULL) || (domain->conn == NULL) || (domain->conn->handle < 0) if ((domain == NULL) || (domain->conn == NULL) ||
|| (info == NULL) || (maxinfo < 1) (domain->conn->handle < 0) || (domain->handle < 0) ||
|| (sizeof(cpumap_t) & 7)) (info == NULL) || (maxinfo < 1) ||
(sizeof(cpumap_t) & 7))
return (-1); return (-1);
if ((cpumaps != NULL) && (maplen < 1)) if ((cpumaps != NULL) && (maplen < 1))
return -1; return -1;

View File

@ -1266,7 +1266,7 @@ xend_get_node(virConnectPtr xend)
return node; return node;
} }
static int int
xend_get_config_version(virConnectPtr conn) { xend_get_config_version(virConnectPtr conn) {
struct sexpr *root; struct sexpr *root;
const char *value; const char *value;
@ -2075,6 +2075,8 @@ xenDaemonDomainSuspend(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "pause", NULL); return xend_op(domain->conn, domain->name, "op", "pause", NULL);
} }
@ -2095,6 +2097,8 @@ xenDaemonDomainResume(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "unpause", NULL); return xend_op(domain->conn, domain->name, "op", "unpause", NULL);
} }
@ -2116,6 +2120,8 @@ xenDaemonDomainShutdown(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "shutdown", "reason", "halt", NULL); 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__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "shutdown", "reason", "reboot", NULL); return xend_op(domain->conn, domain->name, "op", "shutdown", "reason", "reboot", NULL);
} }
@ -2162,6 +2170,8 @@ xenDaemonDomainDestroy(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "destroy", NULL); return xend_op(domain->conn, domain->name, "op", "destroy", NULL);
} }
@ -2187,6 +2197,8 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
return xend_op(domain->conn, domain->name, "op", "save", "file", filename, NULL); return xend_op(domain->conn, domain->name, "op", "save", "file", filename, NULL);
} }
@ -2232,6 +2244,8 @@ xenDaemonDomainGetMaxMemory(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
/* can we ask for a subset ? worth it ? */ /* can we ask for a subset ? worth it ? */
root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name); root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
@ -2266,6 +2280,9 @@ xenDaemonDomainSetMaxMemory(virDomainPtr domain, unsigned long memory)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
snprintf(buf, sizeof(buf), "%lu", memory >> 10); snprintf(buf, sizeof(buf), "%lu", memory >> 10);
return xend_op(domain->conn, domain->name, "op", "maxmem_set", "memory", return xend_op(domain->conn, domain->name, "op", "maxmem_set", "memory",
buf, NULL); buf, NULL);
@ -2297,6 +2314,9 @@ xenDaemonDomainSetMemory(virDomainPtr domain, unsigned long memory)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
snprintf(buf, sizeof(buf), "%lu", memory >> 10); snprintf(buf, sizeof(buf), "%lu", memory >> 10);
return xend_op(domain->conn, domain->name, "op", "mem_target_set", return xend_op(domain->conn, domain->name, "op", "mem_target_set",
"target", buf, NULL); "target", buf, NULL);
@ -2345,6 +2365,8 @@ xenDaemonDomainDumpXML(virDomainPtr domain, int flags ATTRIBUTE_UNUSED)
__FUNCTION__); __FUNCTION__);
return(NULL); return(NULL);
} }
if (domain->handle < 0)
return(NULL);
return xenDaemonDomainDumpXMLByID(domain->conn, domain->handle); return xenDaemonDomainDumpXMLByID(domain->conn, domain->handle);
} }
@ -2372,7 +2394,8 @@ xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle < 0)
return(-1);
root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name); root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
if (root == NULL) if (root == NULL)
@ -2652,6 +2675,9 @@ xenDaemonDomainSetVcpus(virDomainPtr domain, unsigned int vcpus)
__FUNCTION__); __FUNCTION__);
return (-1); return (-1);
} }
if (domain->handle < 0)
return(-1);
snprintf(buf, sizeof(buf), "%d", vcpus); snprintf(buf, sizeof(buf), "%d", vcpus);
return(xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus", return(xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
buf, NULL)); buf, NULL));
@ -2681,6 +2707,8 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
__FUNCTION__); __FUNCTION__);
return (-1); return (-1);
} }
if (domain->handle < 0)
return(-1);
/* from bit map, build character string of mapped CPU numbers */ /* from bit map, build character string of mapped CPU numbers */
for (i = 0; i < maplen; i++) for (j = 0; j < 8; j++) for (i = 0; i < maplen; i++) for (j = 0; j < 8; j++)
@ -2734,6 +2762,9 @@ xenDaemonDomainGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
__FUNCTION__); __FUNCTION__);
return (-1); return (-1);
} }
if (domain->handle < 0)
return(-1);
root = sexpr_get(domain->conn, "/xend/domain/%s?op=vcpuinfo", domain->name); root = sexpr_get(domain->conn, "/xend/domain/%s?op=vcpuinfo", domain->name);
if (root == NULL) if (root == NULL)
return (-1); 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_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); char *xend_parse_domain_sexp(virConnectPtr conn, char *root, int xendConfigVersion);
/* refactored ones */ /* refactored ones */

View File

@ -372,6 +372,8 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
} }
if (domain->conn->xshandle == NULL) if (domain->conn->xshandle == NULL)
return(-1); return(-1);
if (domain->handle == -1)
return(-1);
tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "running"); tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "running");
if (tmp != NULL) { if (tmp != NULL) {
@ -430,6 +432,8 @@ xenStoreDomainSetMemory(virDomainPtr domain, unsigned long memory)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle == -1)
return(-1);
snprintf(value, 19, "%lu", memory); snprintf(value, 19, "%lu", memory);
value[19] = 0; value[19] = 0;
ret = virDomainDoStoreWrite(domain, "memory/target", &value[0]); ret = virDomainDoStoreWrite(domain, "memory/target", &value[0]);
@ -454,6 +458,8 @@ xenStoreDomainGetMaxMemory(virDomainPtr domain)
if (!VIR_IS_CONNECTED_DOMAIN(domain)) if (!VIR_IS_CONNECTED_DOMAIN(domain))
return (ret); return (ret);
if (domain->handle == -1)
return(-1);
tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "memory/target"); tmp = virDomainDoStoreQuery(domain->conn, domain->handle, "memory/target");
if (tmp != NULL) { if (tmp != NULL) {
@ -626,6 +632,8 @@ xenStoreDomainShutdown(virDomainPtr domain)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle == -1)
return(-1);
/* /*
* this is very hackish, the domU kernel probes for a special * this is very hackish, the domU kernel probes for a special
* node in the xenstore and launch the shutdown command if found. * node in the xenstore and launch the shutdown command if found.
@ -652,6 +660,8 @@ xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
__FUNCTION__); __FUNCTION__);
return(-1); return(-1);
} }
if (domain->handle == -1)
return(-1);
/* /*
* this is very hackish, the domU kernel probes for a special * this is very hackish, the domU kernel probes for a special
* node in the xenstore and launch the shutdown command if found. * node in the xenstore and launch the shutdown command if found.