xend: fix avoidance to restart domain on crash

If a qemu-dm dies immediately (probably by wrong setting),
xend repeats to restart a domain so many times.=20
That causes system overload.

There is already a logic to avoid too early restarting, however,
it might not work. Since xenstore entry 'xend/previous_restart_time'
is volatile. XendDomainInfo.destroy() which removes the entry from
xenstore is called in some places.

Also, this patch prevents too early restarting even at the first
domain creation.

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
This commit is contained in:
Keir Fraser committed 2009-04-15 11:23:02 +01:00
1 parent e2d6c4bd8a
commit b158b87dbe
1 file changed
+7 -15
+7 -15
View File
@@ -514,7 +514,6 @@ class XendDomainInfo:
if reason not in DOMAIN_SHUTDOWN_REASONS.values():
raise XendError('Invalid reason: %s' % reason)
self._removeVm('xend/previous_restart_time')
self.storeDom("control/shutdown", reason)
# HVM domain shuts itself down only if it has PV drivers
@@ -2001,20 +2000,13 @@ class XendDomainInfo:
old_domid = self.domid
self._writeVm(RESTART_IN_PROGRESS, 'True')
now = time.time()
rst = self._readVm('xend/previous_restart_time')
if rst:
rst = float(rst)
timeout = now - rst
if timeout < MINIMUM_RESTART_TIME:
log.error(
'VM %s restarting too fast (%f seconds since the last '
'restart). Refusing to restart to avoid loops.',
self.info['name_label'], timeout)
self.destroy()
return
self._writeVm('xend/previous_restart_time', str(now))
elapse = time.time() - self.info['start_time']
if elapse < MINIMUM_RESTART_TIME:
log.error('VM %s restarting too fast (Elapsed time: %f seconds). '
'Refusing to restart to avoid loops.',
self.info['name_label'], elapse)
self.destroy()
return
prev_vm_xend = self._listRecursiveVm('xend')
new_dom_info = self.info
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.