mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
bitkeeper revision 1.1108.1.1 (40fbb559J4VKc_p9h4f2N4LDV9IXfg)
Fix problems with persistence of vm startTime.
This commit is contained in:
1 parent
e17fa59f09
commit
92b817b455
2 files changed
+39
-18
No files matched your search
@@ -179,8 +179,7 @@ class XendDomain:
|
||||
@param info: domain info from xen
|
||||
@return: deferred
|
||||
"""
|
||||
config = sxp.child_value(savedinfo, 'config')
|
||||
deferred = XendDomainInfo.vm_recreate(config, info)
|
||||
deferred = XendDomainInfo.vm_recreate(savedinfo, info)
|
||||
def fn(dominfo):
|
||||
self.domain[dominfo.id] = dominfo
|
||||
deferred.addCallback(fn)
|
||||
@@ -249,20 +248,30 @@ class XendDomain:
|
||||
id = str(d['dom'])
|
||||
doms[id] = d
|
||||
if id not in self.domain:
|
||||
config = None
|
||||
deferred = XendDomainInfo.vm_recreate(config, d)
|
||||
savedinfo = None
|
||||
deferred = XendDomainInfo.vm_recreate(savedinfo, d)
|
||||
def fn(dominfo):
|
||||
self._add_domain(dominfo.id, dominfo)
|
||||
deferred.addCallback(fn)
|
||||
# Remove entries for domains that no longer exist.
|
||||
for d in self.domain.values():
|
||||
dominfo = doms.get(d.id)
|
||||
if dominfo:
|
||||
d.update(dominfo)
|
||||
info = doms.get(d.id)
|
||||
if info:
|
||||
d.update(info)
|
||||
else:
|
||||
self._delete_domain(d.id)
|
||||
self.reap_schedule(1)
|
||||
|
||||
def update_domain(self, id):
|
||||
"""Update the saved info for a domain.
|
||||
|
||||
@param id: domain id
|
||||
"""
|
||||
dominfo = self.domain.get(id)
|
||||
if dominfo:
|
||||
self.domain_db[id] = dominfo.sxpr()
|
||||
self.sync_domain(id)
|
||||
|
||||
def refresh_domain(self, id):
|
||||
"""Refresh information for a single domain.
|
||||
|
||||
@@ -580,7 +589,9 @@ class XendDomain:
|
||||
if not dominfo:
|
||||
raise XendError("invalid domain:" + str(dom))
|
||||
self.refresh_schedule()
|
||||
return dominfo.device_create(devconfig)
|
||||
val = dominfo.device_create(devconfig)
|
||||
self.update_domain(dominfo.id)
|
||||
return val
|
||||
|
||||
def domain_device_destroy(self, dom, type, idx):
|
||||
"""Destroy a device.
|
||||
@@ -594,7 +605,9 @@ class XendDomain:
|
||||
if not dominfo:
|
||||
raise XendError("invalid domain:" + str(dom))
|
||||
self.refresh_schedule()
|
||||
return dominfo.device_destroy(type, idx)
|
||||
val = dominfo.device_destroy(type, idx)
|
||||
self.update_domain(dominfo.id)
|
||||
return val
|
||||
|
||||
def domain_devtype_ls(self, dom, type):
|
||||
"""Get list of device indexes for a domain.
|
||||
|
||||
@@ -253,14 +253,24 @@ def vm_create(config):
|
||||
vm = XendDomainInfo()
|
||||
return vm.construct(config)
|
||||
|
||||
def vm_recreate(config, info):
|
||||
def vm_recreate(savedinfo, info):
|
||||
"""Create the VM object for an existing domain.
|
||||
|
||||
@param savedinfo: saved info from the domain DB
|
||||
@type savedinfo: sxpr
|
||||
@param info: domain info from xc
|
||||
@type info: xc domain dict
|
||||
@return: deferred
|
||||
"""
|
||||
vm = XendDomainInfo()
|
||||
vm.recreate = 1
|
||||
vm.setdom(info['dom'])
|
||||
vm.name = info['name']
|
||||
vm.memory = info['mem_kb']/1024
|
||||
start_time = sxp.child_value(savedinfo, 'start_time')
|
||||
if start_time is not None:
|
||||
vm.startTime = float(start_time)
|
||||
config = sxp.child_value(savedinfo, 'config')
|
||||
if config:
|
||||
d = vm.construct(config)
|
||||
else:
|
||||
@@ -382,6 +392,7 @@ class XendDomainInfo:
|
||||
['id', self.id],
|
||||
['name', self.name],
|
||||
['memory', self.memory] ]
|
||||
|
||||
if self.info:
|
||||
run = (self.info['running'] and 'r') or '-'
|
||||
block = (self.info['blocked'] and 'b') or '-'
|
||||
@@ -396,10 +407,10 @@ class XendDomainInfo:
|
||||
sxpr.append(['cpu', self.info['cpu']])
|
||||
sxpr.append(['cpu_time', self.info['cpu_time']/1e9])
|
||||
|
||||
if self.startTime:
|
||||
upTime = time.time() - self.startTime
|
||||
sxpr.append(['up_time', str( upTime ) ] )
|
||||
sxpr.append(['start_time', str( self.startTime ) ] )
|
||||
if self.startTime:
|
||||
upTime = time.time() - self.startTime
|
||||
sxpr.append(['up_time', str(upTime) ])
|
||||
sxpr.append(['start_time', str(self.startTime) ])
|
||||
|
||||
if self.console:
|
||||
sxpr.append(self.console.sxpr())
|
||||
@@ -418,9 +429,6 @@ class XendDomainInfo:
|
||||
if self.memory is None:
|
||||
raise VmError('missing memory size')
|
||||
|
||||
if sxp.child_value( config, 'start_time' ) != None:
|
||||
self.startTime = float( sxp.child_value( config, 'start_time' ) )
|
||||
|
||||
self.configure_console()
|
||||
self.configure_restart()
|
||||
self.configure_backends()
|
||||
@@ -598,7 +606,7 @@ class XendDomainInfo:
|
||||
% (name, memory))
|
||||
self.setdom(dom)
|
||||
|
||||
if self.startTime == None:
|
||||
if self.startTime is None:
|
||||
self.startTime = time.time()
|
||||
|
||||
def build_domain(self, ostype, kernel, ramdisk, cmdline, vifs_n):
|
||||
|
||||