bitkeeper revision 1.1159.96.3 (415c16a40z3XgMlliaGAnrifiHmpNg)

Move the configuration step for a restored/received domain so that it
is as early as possible in the domain construction process.
Change domain restore to use xfrd to avoid blocking and double
configuration.
This commit is contained in:
mjw@wray-m-3.hpl.hp.com committed 2004-09-30 14:22:28 +00:00
1 parent c534724905
commit d61b7f7baa
7 files changed
+153 -20

No files matched your search

+11 -7
View File
@@ -211,9 +211,9 @@ class XendDomain:
@param id: domain id
@param notify: send a domain died event if true
"""
for info in self.domain_by_name.values():
for (k, info) in self.domain_by_name.items():
if info.id == id:
del self.domain_by_name[info.name]
del self.domain_by_name[k]
if id in self.domain_by_id:
info = self.domain_by_id[id]
del self.domain_by_id[id]
@@ -408,11 +408,15 @@ class XendDomain:
@return: deferred
"""
def cbok(dominfo):
self._add_domain(dominfo)
return dominfo
deferred = XendDomainInfo.vm_restore(src, progress=progress)
deferred.addCallback(cbok)
if 0:
def cbok(dominfo):
self._add_domain(dominfo)
return dominfo
deferred = XendDomainInfo.vm_restore(src, progress=progress)
deferred.addCallback(cbok)
else:
xmigrate = XendMigrate.instance()
deferred = xmigrate.restore_begin(src)
return deferred
def domain_get(self, id):
+47 -5
View File
@@ -295,11 +295,6 @@ class XendMigrateInfo(XfrdInfo):
eserver.inject('xend.domain.migrate',
[ self.dominfo.name, self.dominfo.id,
"begin", self.sxpr() ])
# Special case for localhost: destroy all devices early.
if 0 and self.dst_host in ["localhost", "127.0.0.1"]:
self.dominfo.restart_cancel()
self.dominfo.cleanup()
#self.dominfo.destroy_console()
xfrd.request(['xfr.migrate',
self.src_dom,
vmconfig,
@@ -307,6 +302,19 @@ class XendMigrateInfo(XfrdInfo):
self.dst_port,
self.live ])
def xfr_vm_suspend(self, xfrd, val):
def cbok(val):
# Special case for localhost: destroy devices early.
if self.dst_host in ["localhost", "127.0.0.1"]:
self.dominfo.restart_cancel()
self.dominfo.cleanup()
self.dominfo.destroy_console()
return val
d = XfrdInfo.xfr_vm_suspend(self, xfrd, val)
d.addCallback(cbok)
return d
def xfr_migrate_ok(self, xfrd, val):
dom = int(sxp.child0(val))
self.state = 'ok'
@@ -381,7 +389,35 @@ class XendSaveInfo(XfrdInfo):
[ self.dominfo.name, self.dominfo.id,
self.state, self.sxpr() ])
class XendRestoreInfo(XfrdInfo):
"""Representation of a restore in-progress and its interaction with xfrd.
"""
def __init__(self, xid, file):
XfrdInfo.__init__(self)
self.xid = xid
self.state = 'begin'
self.file = file
def sxpr(self):
sxpr = ['restore',
['id', self.xid],
['file', self.file] ]
return sxpr
def request(self, xfrd):
print '***request>', self.file
log.info('restore BEGIN: ' + str(self.sxpr()))
xfrd.request(['xfr.restore', self.file ])
def xfr_restore_ok(self, xfrd, val):
dom = int(sxp.child0(val))
dominfo = self.xd.domain_get(dom)
self.state = 'ok'
if not self.deferred.called:
self.deferred.callback(dominfo)
class XendMigrate:
"""External api for interaction with xfrd for migrate and save.
Singleton.
@@ -477,6 +513,12 @@ class XendMigrate:
info = XendSaveInfo(xid, dominfo, file)
return self.session_begin(info)
def restore_begin(self, file):
xid = self.nextid()
info = XendRestoreInfo(xid, file)
return self.session_begin(info)
def instance():
global inst
try:
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.