bitkeeper revision 1.1108.1.1 (40fbb559J4VKc_p9h4f2N4LDV9IXfg)

Fix problems with persistence of vm startTime.
This commit is contained in:
mjw@wray-m-3.hpl.hp.com committed 2004-07-19 11:49:45 +00:00
1 parent e17fa59f09
commit 92b817b455
2 files changed
+39 -18

No files matched your search

+22 -9
View File
@@ -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.
+17 -9
View File
@@ -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):
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.