* [PATCH] make coredump-[destroy|restart] work through traditional domU config
@ 2008-02-05 23:51 Jim Fehlig
0 siblings, 0 replies; only message in thread
From: Jim Fehlig @ 2008-02-05 23:51 UTC (permalink / raw)
To: xen-devel
[-- Attachment #1: Type: text/plain, Size: 404 bytes --]
Xen-API supports the additional 'on_crash' actions coredump-destroy and
coredump-restart. Since these are useful per-domU config items, this
patch plumbs them to work with traditional domU config as well.
Unfortunately, Xen-API calls these actions 'coredump_and_destroy' and
'coredump_and_restart'. There's some extra code for handling the name
difference but it avoids changing the API.
Cheers,
Jim
[-- Attachment #2: coredump.patch --]
[-- Type: text/x-patch, Size: 10366 bytes --]
# HG changeset patch
# User Jim Fehlig <jfehlig@novell.com>
# Date 1202254938 25200
# Node ID 854b4e5a009f3461a45874f1091a203f22b80b0a
# Parent 99b8ffe250888d0c3fe86b726edf18f620072045
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>
diff -r 99b8ffe25088 -r 854b4e5a009f docs/man/xmdomain.cfg.pod.5
--- a/docs/man/xmdomain.cfg.pod.5 Mon Feb 04 13:57:01 2008 +0000
+++ b/docs/man/xmdomain.cfg.pod.5 Tue Feb 05 16:42:18 2008 -0700
@@ -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
diff -r 99b8ffe25088 -r 854b4e5a009f tools/examples/xmexample.hvm
--- a/tools/examples/xmexample.hvm Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/examples/xmexample.hvm Tue Feb 05 16:42:18 2008 -0700
@@ -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'
diff -r 99b8ffe25088 -r 854b4e5a009f tools/examples/xmexample1
--- a/tools/examples/xmexample1 Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/examples/xmexample1 Tue Feb 05 16:42:18 2008 -0700
@@ -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'
diff -r 99b8ffe25088 -r 854b4e5a009f tools/examples/xmexample2
--- a/tools/examples/xmexample2 Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/examples/xmexample2 Tue Feb 05 16:42:18 2008 -0700
@@ -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'
diff -r 99b8ffe25088 -r 854b4e5a009f tools/examples/xmexample3
--- a/tools/examples/xmexample3 Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/examples/xmexample3 Tue Feb 05 16:42:18 2008 -0700
@@ -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'
diff -r 99b8ffe25088 -r 854b4e5a009f tools/python/xen/xend/XendAPIConstants.py
--- a/tools/python/xen/xend/XendAPIConstants.py Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/python/xen/xend/XendAPIConstants.py Tue Feb 05 16:42:18 2008 -0700
@@ -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']
diff -r 99b8ffe25088 -r 854b4e5a009f tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/python/xen/xend/XendConfig.py Tue Feb 05 16:42:18 2008 -0700
@@ -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')
diff -r 99b8ffe25088 -r 854b4e5a009f tools/python/xen/xend/XendConstants.py
--- a/tools/python/xen/xend/XendConstants.py Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/python/xen/xend/XendConstants.py Tue Feb 05 16:42:18 2008 -0700
@@ -52,7 +52,9 @@ restart_modes = [
"restart",
"destroy",
"preserve",
- "rename-restart"
+ "rename-restart",
+ "coredump-destroy",
+ "coredump-restart"
]
DOM_STATES = [
diff -r 99b8ffe25088 -r 854b4e5a009f tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py Tue Feb 05 16:42:18 2008 -0700
@@ -1260,14 +1260,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)
@@ -1335,14 +1327,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',
@@ -2566,9 +2574,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
diff -r 99b8ffe25088 -r 854b4e5a009f tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py Mon Feb 04 13:57:01 2008 +0000
+++ b/tools/python/xen/xm/create.py Tue Feb 05 16:42:18 2008 -0700
@@ -264,15 +264,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',
- 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.
+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.
+ - 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',
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-05 23:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-05 23:51 [PATCH] make coredump-[destroy|restart] work through traditional domU config Jim Fehlig
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.