251 lines
10 KiB
Diff
251 lines
10 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1202376535 0
|
|
# Node ID 58e5e9ae0f8dcc4abb390d46d89e49c65e62607b
|
|
# Parent d04593aa1605fd337423b2c1296e275424e06656
|
|
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>
|
|
|
|
Index: xen-3.2.1-testing/docs/man/xmdomain.cfg.pod.5
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/docs/man/xmdomain.cfg.pod.5
|
|
+++ xen-3.2.1-testing/docs/man/xmdomain.cfg.pod.5
|
|
@@ -298,6 +298,22 @@ it holds, so that the new one may take t
|
|
|
|
=back
|
|
|
|
+=over 4
|
|
+
|
|
+Additionally, the "on_crash" event can also take:
|
|
+
|
|
+=item B<coredump-destroy>
|
|
+
|
|
+Dump the crashed domain's core and then destroy it.
|
|
+
|
|
+=back
|
|
+
|
|
+=item B<coredump-restart>
|
|
+
|
|
+Dump the crashed domain's core and then restart it.
|
|
+
|
|
+=back
|
|
+
|
|
=head1 EXAMPLES
|
|
|
|
The following are quick examples of ways that domains might be
|
|
Index: xen-3.2.1-testing/tools/examples/xmexample.hvm
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/examples/xmexample.hvm
|
|
+++ xen-3.2.1-testing/tools/examples/xmexample.hvm
|
|
@@ -87,6 +87,11 @@ disk = [ 'file:/var/images/min-el3-i386.
|
|
# "rename-restart", meaning that the old domain is not cleaned up, but is
|
|
# renamed and a new domain started in its place.
|
|
#
|
|
+# In the event a domain stops due to a crash, you have the additional options:
|
|
+#
|
|
+# "coredump-destroy", meaning dump the crashed domain's core and then destroy;
|
|
+# "coredump-restart', meaning dump the crashed domain's core and the restart.
|
|
+#
|
|
# The default is
|
|
#
|
|
# on_poweroff = 'destroy'
|
|
Index: xen-3.2.1-testing/tools/examples/xmexample1
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/examples/xmexample1
|
|
+++ xen-3.2.1-testing/tools/examples/xmexample1
|
|
@@ -155,6 +155,11 @@ extra = "4"
|
|
# "rename-restart", meaning that the old domain is not cleaned up, but is
|
|
# renamed and a new domain started in its place.
|
|
#
|
|
+# In the event a domain stops due to a crash, you have the additional options:
|
|
+#
|
|
+# "coredump-destroy", meaning dump the crashed domain's core and then destroy;
|
|
+# "coredump-restart', meaning dump the crashed domain's core and the restart.
|
|
+#
|
|
# The default is
|
|
#
|
|
# on_poweroff = 'destroy'
|
|
Index: xen-3.2.1-testing/tools/examples/xmexample2
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/examples/xmexample2
|
|
+++ xen-3.2.1-testing/tools/examples/xmexample2
|
|
@@ -191,6 +191,11 @@ extra = "4 VMID=%d usr=/dev/sda6" % vmid
|
|
# "rename-restart", meaning that the old domain is not cleaned up, but is
|
|
# renamed and a new domain started in its place.
|
|
#
|
|
+# In the event a domain stops due to a crash, you have the additional options:
|
|
+#
|
|
+# "coredump-destroy", meaning dump the crashed domain's core and then destroy;
|
|
+# "coredump-restart', meaning dump the crashed domain's core and the restart.
|
|
+#
|
|
# The default is
|
|
#
|
|
# on_poweroff = 'destroy'
|
|
Index: xen-3.2.1-testing/tools/examples/xmexample3
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/examples/xmexample3
|
|
+++ xen-3.2.1-testing/tools/examples/xmexample3
|
|
@@ -177,6 +177,11 @@ extra = "4 VMID=%d" % vmid
|
|
# "rename-restart", meaning that the old domain is not cleaned up, but is
|
|
# renamed and a new domain started in its place.
|
|
#
|
|
+# In the event a domain stops due to a crash, you have the additional options:
|
|
+#
|
|
+# "coredump-destroy", meaning dump the crashed domain's core and then destroy;
|
|
+# "coredump-restart', meaning dump the crashed domain's core and the restart.
|
|
+#
|
|
# The default is
|
|
#
|
|
# on_poweroff = 'destroy'
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendAPIConstants.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendAPIConstants.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendAPIConstants.py
|
|
@@ -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']
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendConfig.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendConfig.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendConfig.py
|
|
@@ -241,7 +241,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')
|
|
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendConstants.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendConstants.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendConstants.py
|
|
@@ -52,7 +52,9 @@ restart_modes = [
|
|
"restart",
|
|
"destroy",
|
|
"preserve",
|
|
- "rename-restart"
|
|
+ "rename-restart",
|
|
+ "coredump-destroy",
|
|
+ "coredump-restart"
|
|
]
|
|
|
|
DOM_STATES = [
|
|
Index: xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -1262,14 +1262,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)
|
|
|
|
@@ -1337,14 +1329,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',
|
|
@@ -2558,9 +2566,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
|
|
Index: xen-3.2.1-testing/tools/python/xen/xm/create.py
|
|
===================================================================
|
|
--- xen-3.2.1-testing.orig/tools/python/xen/xm/create.py
|
|
+++ xen-3.2.1-testing/tools/python/xen/xm/create.py
|
|
@@ -260,15 +260,17 @@ gopts.var('on_reboot', val='destroy|rest
|
|
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',
|