Third time's a charm right :-)
vcpu_avail is the configuration parameter that's tripping us up on
large SMP systems. Instead of modifying the XML-RPC layer, a much
less invasive solution is just to remove vcpu_avail from the
S-Expression that's passed over the wire. The vcpu_avail parameter is
not used by xm so this seems like a pretty reasonable thing to do. It
certainly feels less hacky.
Regards,
Anthony Liguori
------------------------------------------------------------------------
# HG changeset patch
# User anthony@xxxxxxxxxxxxxxxxxxxxx
# Node ID 96c1e3c2d336a0f9cdb9e074c737e7026cede171
# Parent 4109c4e7804abeabe3b222673f2ba4dd1375be53
Remove vcpu_avail from the public S-Expression that's passed over the wire.
This trips up the XML-RPC layer on large SMP systems and isn't actually used
by xm.
Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx>
diff -r 4109c4e7804a -r 96c1e3c2d336
tools/python/xen/xend/server/XMLRPCServer.py
--- a/tools/python/xen/xend/server/XMLRPCServer.py Tue Mar 28 13:19:22 2006
+++ b/tools/python/xen/xend/server/XMLRPCServer.py Tue Mar 28 19:29:40 2006
@@ -24,6 +24,7 @@
from xen.xend.XendClient import XML_RPC_SOCKET, ERROR_INVALID_DOMAIN
from xen.xend.XendError import *
+from types import ListType
def lookup(domid):
info = XendDomain.instance().domain_lookup_by_name_or_id(domid)
@@ -35,24 +36,36 @@
info = lookup(domid)
return getattr(info, fn)(*args)
+# vcpu_avail is a long and is not needed by the clients. It's far easier
+# to just remove it then to try and marshal the long.
+def fixup_sxpr(sexpr):
+ ret = []
+ for k in sexpr:
+ if type(k) is ListType:
+ if len(k) != 2 or k[0] != 'vcpu_avail':
+ ret.append(fixup_sxpr(k))
+ else:
+ ret.append(k)
+ return ret
+
def domain(domid):
info = lookup(domid)
- return info.sxpr()
+ return fixup_sxpr(info.sxpr())
def domains(detail=1):
if detail < 1:
return XendDomain.instance().list_names()
else:
domains = XendDomain.instance().list_sorted()
- return map(lambda dom: dom.sxpr(), domains)
+ return map(lambda dom: fixup_sxpr(dom.sxpr()), domains)
def domain_create(config):
info = XendDomain.instance().domain_create(config)
- return info.sxpr()
+ return fixup_sxpr(info.sxpr())
def domain_restore(src):
info = XendDomain.instance().domain_restore(src)
- return info.sxpr()
+ return fixup_sxpr(info.sxpr())
def get_log():
f = open(XendLogging.getLogFilename(), 'r')
------------------------------------------------------------------------
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel