mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Add 'coredump-destroy' and 'coredump-restart' actions for crashed domains.
Xen-API already specifies these actions for the 'on_crash' domain exit event. This patch makes them available for use in traditional domU config files and through the xm tool as well. Signed-off-by: Jim Fehlig <jfehlig@novell.com>
This commit is contained in:
1 parent
c5b5f2e9ff
commit
e63b739dff
10 files changed
+83
-21
No files matched your search
@@ -51,6 +51,18 @@ XEN_API_ON_CRASH_BEHAVIOUR = [
|
||||
'rename_restart'
|
||||
]
|
||||
|
||||
XEN_API_ON_CRASH_BEHAVIOUR_FILTER = {
|
||||
'destroy' : 'destroy',
|
||||
'coredump-destroy' : 'coredump_and_destroy',
|
||||
'coredump_and_destroy' : 'coredump_and_destroy',
|
||||
'restart' : 'restart',
|
||||
'coredump-restart' : 'coredump_and_restart',
|
||||
'coredump_and_restart' : 'coredump_and_restart',
|
||||
'preserve' : 'preserve',
|
||||
'rename-restart' : 'rename_restart',
|
||||
'rename_restart' : 'rename_restart',
|
||||
}
|
||||
|
||||
XEN_API_VBD_MODE = ['RO', 'RW']
|
||||
XEN_API_VDI_TYPE = ['system', 'user', 'ephemeral']
|
||||
XEN_API_VBD_TYPE = ['CD', 'Disk']
|
||||
|
||||
@@ -242,7 +242,8 @@ LEGACY_XENSTORE_VM_PARAMS = [
|
||||
## Config Choices
|
||||
##
|
||||
|
||||
CONFIG_RESTART_MODES = ('restart', 'destroy', 'preserve', 'rename-restart')
|
||||
CONFIG_RESTART_MODES = ('restart', 'destroy', 'preserve', 'rename-restart',
|
||||
'coredump-destroy', 'coredump-restart')
|
||||
CONFIG_OLD_DOM_STATES = ('running', 'blocked', 'paused', 'shutdown',
|
||||
'crashed', 'dying')
|
||||
|
||||
|
||||
@@ -52,7 +52,9 @@ restart_modes = [
|
||||
"restart",
|
||||
"destroy",
|
||||
"preserve",
|
||||
"rename-restart"
|
||||
"rename-restart",
|
||||
"coredump-destroy",
|
||||
"coredump-restart"
|
||||
]
|
||||
|
||||
DOM_STATES = [
|
||||
|
||||
@@ -1263,14 +1263,6 @@ class XendDomainInfo:
|
||||
self.info['name_label'], self.domid)
|
||||
self._writeVm(LAST_SHUTDOWN_REASON, 'crash')
|
||||
|
||||
if xoptions.get_enable_dump():
|
||||
try:
|
||||
self.dumpCore()
|
||||
except XendError:
|
||||
# This error has been logged -- there's nothing more
|
||||
# we can do in this context.
|
||||
pass
|
||||
|
||||
restart_reason = 'crash'
|
||||
self._stateSet(DOM_STATE_HALTED)
|
||||
|
||||
@@ -1338,14 +1330,30 @@ class XendDomainInfo:
|
||||
def _clearRestart(self):
|
||||
self._removeDom("xend/shutdown_start_time")
|
||||
|
||||
def _maybeDumpCore(self, reason):
|
||||
if reason == 'crash':
|
||||
if xoptions.get_enable_dump() or self.get_on_crash() \
|
||||
in ['coredump_and_destroy', 'coredump_and_restart']:
|
||||
try:
|
||||
self.dumpCore()
|
||||
except XendError:
|
||||
# This error has been logged -- there's nothing more
|
||||
# we can do in this context.
|
||||
pass
|
||||
|
||||
def _maybeRestart(self, reason):
|
||||
# Before taking configured action, dump core if configured to do so.
|
||||
#
|
||||
self._maybeDumpCore(reason)
|
||||
|
||||
# Dispatch to the correct method based upon the configured on_{reason}
|
||||
# behaviour.
|
||||
actions = {"destroy" : self.destroy,
|
||||
"restart" : self._restart,
|
||||
"preserve" : self._preserve,
|
||||
"rename-restart" : self._renameRestart}
|
||||
"rename-restart" : self._renameRestart,
|
||||
"coredump-destroy" : self.destroy,
|
||||
"coredump-restart" : self._restart}
|
||||
|
||||
action_conf = {
|
||||
'poweroff': 'actions_after_shutdown',
|
||||
@@ -2572,9 +2580,10 @@ class XendDomainInfo:
|
||||
|
||||
def get_on_crash(self):
|
||||
after_crash = self.info.get('actions_after_crash')
|
||||
if not after_crash or after_crash not in XEN_API_ON_CRASH_BEHAVIOUR:
|
||||
if not after_crash or after_crash not in \
|
||||
XEN_API_ON_CRASH_BEHAVIOUR + restart_modes:
|
||||
return XEN_API_ON_CRASH_BEHAVIOUR[0]
|
||||
return after_crash
|
||||
return XEN_API_ON_CRASH_BEHAVIOUR_FILTER[after_crash]
|
||||
|
||||
def get_dev_config_by_uuid(self, dev_class, dev_uuid):
|
||||
""" Get's a device configuration either from XendConfig or
|
||||
|
||||
@@ -264,15 +264,17 @@ gopts.var('on_reboot', val='destroy|restart|preserve|rename-restart',
|
||||
renamed and a new domain started in its place.
|
||||
""")
|
||||
|
||||
gopts.var('on_crash', val='destroy|restart|preserve|rename-restart',
|
||||
gopts.var('on_crash', val='destroy|restart|preserve|rename-restart|coredump-destroy|ciredump-restart',
|
||||
fn=set_value, default=None,
|
||||
use="""Behaviour when a domain exits with reason 'crash'.
|
||||
- destroy: the domain is cleaned up as normal;
|
||||
- restart: a new domain is started in place of the old one;
|
||||
- preserve: no clean-up is done until the domain is manually
|
||||
destroyed (using xm destroy, for example);
|
||||
- rename-restart: the old domain is not cleaned up, but is
|
||||
renamed and a new domain started in its place.
|
||||
use="""Behaviour when a domain exits with reason 'crash'.
|
||||
- destroy: the domain is cleaned up as normal;
|
||||
- restart: a new domain is started in place of the old one;
|
||||
- preserve: no clean-up is done until the domain is manually
|
||||
destroyed (using xm destroy, for example);
|
||||
- rename-restart: the old domain is not cleaned up, but is
|
||||
renamed and a new domain started in its place.
|
||||
- coredump-destroy: dump the domain's core, followed by destroy
|
||||
- coredump-restart: dump the domain's core, followed by restart
|
||||
""")
|
||||
|
||||
gopts.var('blkif', val='no|yes',
|
||||
|
||||