aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEwan Mellor <ewan@xensource.com>2006-12-15 11:50:04 +0000
committerEwan Mellor <ewan@xensource.com>2006-12-15 11:50:04 +0000
commit1c67fc6446a712cc0a1a50e54ec11496f576b93c (patch)
tree54b934ea827c7c5ddd4230bccc107308d9009651
parent14a3d5c056cf1f5f8824c3043a4023304a1042c7 (diff)
downloadxen-1c67fc6446a712cc0a1a50e54ec11496f576b93c.tar.gz
xen-1c67fc6446a712cc0a1a50e54ec11496f576b93c.tar.bz2
xen-1c67fc6446a712cc0a1a50e54ec11496f576b93c.zip
Fix mem-set, mem-max, and vcpu-set commands when used against inactive domains.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
-rw-r--r--tools/python/xen/xend/XendDomain.py6
-rw-r--r--tools/python/xen/xend/XendDomainInfo.py55
-rw-r--r--tools/python/xen/xend/server/SrvDomain.py9
3 files changed, 47 insertions, 23 deletions
diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py
index c263d37be2..4649525198 100644
--- a/tools/python/xen/xend/XendDomain.py
+++ b/tools/python/xen/xend/XendDomain.py
@@ -1339,11 +1339,7 @@ class XendDomain:
dominfo = self.domain_lookup_nr(domid)
if not dominfo:
raise XendInvalidDomain(str(domid))
- maxmem = int(mem) * 1024
- try:
- return xc.domain_setmaxmem(dominfo.getDomid(), maxmem)
- except Exception, ex:
- raise XendError(str(ex))
+ dominfo.setMemoryMaximum(mem)
def domain_ioport_range_enable(self, domid, first, last):
"""Enable access to a range of IO ports for a domain
diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py
index de405c9a94..8b90814db2 100644
--- a/tools/python/xen/xend/XendDomainInfo.py
+++ b/tools/python/xen/xend/XendDomainInfo.py
@@ -551,8 +551,34 @@ class XendDomainInfo:
raise XendError('Invalid memory size')
self.info['memory_static_min'] = target
- self.storeVm("memory", target)
- self.storeDom("memory/target", target << 10)
+ if self.domid >= 0:
+ self.storeVm("memory", target)
+ self.storeDom("memory/target", target << 10)
+ else:
+ self.info['memory_dynamic_min'] = target
+ xen.xend.XendDomain.instance().managed_config_save(self)
+
+ def setMemoryMaximum(self, limit):
+ """Set the maximum memory limit of this domain
+ @param limit: In MiB.
+ """
+ log.debug("Setting memory maximum of domain %s (%d) to %d MiB.",
+ self.info['name_label'], self.domid, limit)
+
+ if limit <= 0:
+ raise XendError('Invalid memory size')
+
+ self.info['memory_static_max'] = limit
+ if self.domid >= 0:
+ maxmem = int(limit) * 1024
+ try:
+ return xc.domain_setmaxmem(self.domid, maxmem)
+ except Exception, ex:
+ raise XendError(str(ex))
+ else:
+ self.info['memory_dynamic_max'] = limit
+ xen.xend.XendDomain.instance().managed_config_save(self)
+
def getVCPUInfo(self):
try:
@@ -831,18 +857,23 @@ class XendDomainInfo:
def setVCpuCount(self, vcpus):
self.info['vcpu_avail'] = (1 << vcpus) - 1
- self.storeVm('vcpu_avail', self.info['vcpu_avail'])
- # update dom differently depending on whether we are adjusting
- # vcpu number up or down, otherwise _vcpuDomDetails does not
- # disable the vcpus
- if self.info['vcpus_number'] > vcpus:
- # decreasing
- self._writeDom(self._vcpuDomDetails())
- self.info['vcpus_number'] = vcpus
+ if self.domid >= 0:
+ self.storeVm('vcpu_avail', self.info['vcpu_avail'])
+ # update dom differently depending on whether we are adjusting
+ # vcpu number up or down, otherwise _vcpuDomDetails does not
+ # disable the vcpus
+ if self.info['vcpus_number'] > vcpus:
+ # decreasing
+ self._writeDom(self._vcpuDomDetails())
+ self.info['vcpus_number'] = vcpus
+ else:
+ # same or increasing
+ self.info['vcpus_number'] = vcpus
+ self._writeDom(self._vcpuDomDetails())
else:
- # same or increasing
self.info['vcpus_number'] = vcpus
- self._writeDom(self._vcpuDomDetails())
+ self.info['online_vcpus'] = vcpus
+ xen.xend.XendDomain.instance().managed_config_save(self)
def getLabel(self):
return security.get_security_info(self.info, 'label')
diff --git a/tools/python/xen/xend/server/SrvDomain.py b/tools/python/xen/xend/server/SrvDomain.py
index 00c18c9386..559066bd5c 100644
--- a/tools/python/xen/xend/server/SrvDomain.py
+++ b/tools/python/xen/xend/server/SrvDomain.py
@@ -160,12 +160,9 @@ class SrvDomain(SrvDir):
return val
def op_maxmem_set(self, _, req):
- fn = FormFn(self.xd.domain_maxmem_set,
- [['dom', 'int'],
- ['memory', 'int']])
- val = fn(req.args, {'dom': self.dom.domid})
- return val
-
+ return self.call(self.dom.setMemoryMaximum,
+ [['memory', 'int']],
+ req)
def call(self, fn, args, req):
return FormFn(fn, args)(req.args)