aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-02-07 09:28:55 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-02-07 09:28:55 +0000
commite63b739dff28ed39ea67e6ef16a62aba326d35a1 (patch)
treee4e830ec2386b9f1d57ff10a460180f102a35983 /tools
parentc5b5f2e9ffe06cb9d967a0e7842df89e00f17818 (diff)
downloadxen-e63b739dff28ed39ea67e6ef16a62aba326d35a1.tar.gz
xen-e63b739dff28ed39ea67e6ef16a62aba326d35a1.tar.bz2
xen-e63b739dff28ed39ea67e6ef16a62aba326d35a1.zip
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>
Diffstat (limited to 'tools')
-rw-r--r--tools/examples/xmexample.hvm5
-rw-r--r--tools/examples/xmexample15
-rw-r--r--tools/examples/xmexample25
-rw-r--r--tools/examples/xmexample35
-rw-r--r--tools/python/xen/xend/XendAPIConstants.py12
-rw-r--r--tools/python/xen/xend/XendConfig.py3
-rw-r--r--tools/python/xen/xend/XendConstants.py4
-rw-r--r--tools/python/xen/xend/XendDomainInfo.py31
-rw-r--r--tools/python/xen/xm/create.py18
9 files changed, 67 insertions, 21 deletions
diff --git a/tools/examples/xmexample.hvm b/tools/examples/xmexample.hvm
index e040548186..a8153b279a 100644
--- a/tools/examples/xmexample.hvm
+++ b/tools/examples/xmexample.hvm
@@ -87,6 +87,11 @@ disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ]
# "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 --git a/tools/examples/xmexample1 b/tools/examples/xmexample1
index 2fd24ab84f..a1b6edbe0c 100644
--- a/tools/examples/xmexample1
+++ b/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'
diff --git a/tools/examples/xmexample2 b/tools/examples/xmexample2
index 4ccd61eec5..10eed663f7 100644
--- a/tools/examples/xmexample2
+++ b/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'
diff --git a/tools/examples/xmexample3 b/tools/examples/xmexample3
index dd442d642b..dc57e031b9 100644
--- a/tools/examples/xmexample3
+++ b/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'
diff --git a/tools/python/xen/xend/XendAPIConstants.py b/tools/python/xen/xend/XendAPIConstants.py
index b67b0fe2db..60c8511f28 100644
--- a/tools/python/xen/xend/XendAPIConstants.py
+++ b/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']
diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py
index 8e5d258f02..1eb7ee78ca 100644
--- a/tools/python/xen/xend/XendConfig.py
+++ b/tools/python/xen/xend/XendConfig.py
@@ -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 --git a/tools/python/xen/xend/XendConstants.py b/tools/python/xen/xend/XendConstants.py
index 1624b33413..a99dbdc92f 100644
--- a/tools/python/xen/xend/XendConstants.py
+++ b/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 = [
diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py
index 3d795f2d0c..1e9c1b11f5 100644
--- a/tools/python/xen/xend/XendDomainInfo.py
+++ b/tools/python/xen/xend/XendDomainInfo.py
@@ -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
diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py
index c65afb26d0..1c508becd3 100644
--- a/tools/python/xen/xm/create.py
+++ b/tools/python/xen/xm/create.py
@@ -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',