mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
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:
1 parent
e2d6c4bd8a
commit
b158b87dbe
1 file changed
+7
-15
@@ -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
|
||||
|
||||