[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] make coredump-[destroy|restart] work through traditional domU config
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 # HG changeset patch # User Jim Fehlig <jfehlig@xxxxxxxxxx> # 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@xxxxxxxxxx> 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', _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |