mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
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:
1 parent
c534724905
commit
d61b7f7baa
7 files changed
+153
-20
No files matched your search
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||