bitkeeper revision 1.1159.1.166 (41515bbcO3i2KEUTPMBadmjOSG5Sfw)

Add some restart events and make migrate/save events consistent
with other domain events.
This commit is contained in:
mjw@wray-m-3.hpl.hp.com committed 2004-09-22 11:02:20 +00:00
1 parent c2c9f7989d
commit e9bdcef227
2 files changed
+40 -19

No files matched your search

+16 -3
View File
@@ -203,7 +203,7 @@ class XendDomain:
if info.name:
self.domain_by_name[info.name] = info
self.sync_domain(info.id)
if notify: eserver.inject('xend.domain.created', [info.name, info.id])
if notify: eserver.inject('xend.domain.create', [info.name, info.id])
def _delete_domain(self, id, notify=1):
"""Remove a domain from the tables.
@@ -374,6 +374,8 @@ class XendDomain:
self._add_domain(dominfo)
return dominfo
log.info("Restarting domain: id=%s name=%s", dominfo.id, dominfo.name)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "begin"])
deferred = dominfo.restart()
deferred.addCallback(cbok)
return deferred
@@ -502,6 +504,8 @@ class XendDomain:
self.restarts_by_name[dominfo.name] = dominfo
self.restarts_by_id[dominfo.id] = dominfo
log.info('Scheduling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "schedule"])
self.domain_restarts_schedule()
def domain_restart_cancel(self, id):
@@ -512,6 +516,8 @@ class XendDomain:
dominfo = self.restarts_by_id.get(id) or self.restarts_by_name.get(id)
if dominfo:
log.info('Cancelling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "cancel"])
dominfo.restart_cancel()
del self.restarts_by_id[dominfo.id]
del self.restarts_by_name[dominfo.name]
@@ -530,16 +536,23 @@ class XendDomain:
try:
def cbok(dominfo):
log.info('Restarted domain name=%s id=%s', dominfo.name, dominfo.id)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "success"])
self.domain_unpause(dominfo.id)
def cberr(err):
log.exception("Delayed exception restarting domain: name=%s id=%s",
dominfo.name, dominfo.id)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "fail"])
deferred = self.domain_restart(dominfo)
deferred.addCallback(cbok)
deferred.addErrback(cberr)
except:
log.exception("Exception restarting domain: name=%s id=%s",
dominfo.name, dominfo.id)
eserver.inject("xend.domain.restart",
[dominfo.name, dominfo.id, "fail"])
if self.domain_restarts_exist():
# Run again later if any restarts remain.
self.refresh_schedule(delay=5)
@@ -587,7 +600,7 @@ class XendDomain:
# Don't forget to cancel restart for it.
dominfo = self.domain_lookup(id)
xmigrate = XendMigrate.instance()
val = xmigrate.migrate_begin(dominfo.id, dst, live=live)
val = xmigrate.migrate_begin(dominfo, dst, live=live)
return val
def domain_save(self, id, dst, progress=0):
@@ -600,7 +613,7 @@ class XendDomain:
"""
dominfo = self.domain_lookup(id)
xmigrate = XendMigrate.instance()
return xmigrate.save_begin(dominfo.id, dst)
return xmigrate.save_begin(dominfo, dst)
def domain_pincpu(self, id, cpu):
"""Pin a domain to a cpu.
+24 -16
View File
@@ -260,12 +260,13 @@ class XendMigrateInfo(XfrdInfo):
"""Representation of a migrate in-progress and its interaction with xfrd.
"""
def __init__(self, xid, dom, host, port, live):
def __init__(self, xid, dominfo, host, port, live):
XfrdInfo.__init__(self)
self.xid = xid
self.dominfo = dominfo
self.state = 'begin'
self.src_host = socket.gethostname()
self.src_dom = dom
self.src_dom = dominfo.id
self.dst_host = host
self.dst_port = port
self.dst_dom = None
@@ -291,7 +292,9 @@ class XendMigrateInfo(XfrdInfo):
xfrd.loseConnection()
return
log.info('Migrate BEGIN: ' + str(self.sxpr()))
eserver.inject('xend.migrate.begin', self.sxpr())
eserver.inject('xend.domain.migrate',
[ self.dominfo.name, self.dominfo.id,
"begin", self.sxpr() ])
xfrd.request(['xfr.migrate',
self.src_dom,
vmconfig,
@@ -312,22 +315,24 @@ class XendMigrateInfo(XfrdInfo):
XfrdInfo.connectionLost(self, reason)
if self.state =='ok':
log.info('Migrate OK: ' + str(self.sxpr()))
eserver.inject('xend.migrate.ok', self.sxpr())
else:
self.state = 'error'
self.error(XendError("migrate failed"))
log.info('Migrate ERROR: ' + str(self.sxpr()))
eserver.inject('xend.migrate.error', self.sxpr())
eserver.inject('xend.domain.migrate',
[ self.dominfo.name, self.dominfo.id,
self.state, self.sxpr() ])
class XendSaveInfo(XfrdInfo):
"""Representation of a save in-progress and its interaction with xfrd.
"""
def __init__(self, xid, dom, file):
def __init__(self, xid, dominfo, file):
XfrdInfo.__init__(self)
self.xid = xid
self.dominfo = dominfo
self.state = 'begin'
self.src_dom = dom
self.src_dom = dominfo.id
self.file = file
self.start = 0
@@ -347,7 +352,9 @@ class XendSaveInfo(XfrdInfo):
return
print '***request> begin'
log.info('Save BEGIN: ' + str(self.sxpr()))
eserver.inject('xend.save.begin', self.sxpr())
eserver.inject('xend.domain.save',
[self.dominfo.name, self.dominfo.id,
"begin", self.sxpr()])
xfrd.request(['xfr.save', self.src_dom, vmconfig, self.file ])
def xfr_save_ok(self, xfrd, val):
@@ -361,12 +368,13 @@ class XendSaveInfo(XfrdInfo):
XfrdInfo.connectionLost(self, reason)
if self.state =='ok':
log.info('Save OK: ' + str(self.sxpr()))
eserver.inject('xend.save.ok', self.sxpr())
else:
self.state = 'error'
self.error(XendError("save failed"))
log.info('Save ERROR: ' + str(self.sxpr()))
eserver.inject('xend.save.error', self.sxpr())
eserver.inject('xend.domain.save',
[ self.dominfo.name, self.dominfo.id,
self.state, self.sxpr() ])
class XendMigrate:
@@ -441,27 +449,27 @@ class XendMigrate:
reactor.connectTCP('localhost', XFRD_PORT, xcf)
return info.deferred
def migrate_begin(self, dom, host, port=XFRD_PORT, live=0):
def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0):
"""Begin to migrate a domain to another host.
@param dom: domain
@param dominfo: domain info
@param host: destination host
@param port: destination port
@return: deferred
"""
xid = self.nextid()
info = XendMigrateInfo(xid, dom, host, port, live)
info = XendMigrateInfo(xid, dominfo, host, port, live)
return self.session_begin(info)
def save_begin(self, dom, file):
def save_begin(self, dominfo, file):
"""Begin saving a domain to file.
@param dom: domain
@param dominfo: domain info
@param file: destination file
@return: deferred
"""
xid = self.nextid()
info = XendSaveInfo(xid, dom, file)
info = XendSaveInfo(xid, dominfo, file)
return self.session_begin(info)
def instance():
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.