WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] make coredump-[destroy|restart] work through traditi

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] make coredump-[destroy|restart] work through traditional domU config
From: Jim Fehlig <jfehlig@xxxxxxxxxx>
Date: Tue, 05 Feb 2008 16:51:33 -0700
Delivery-date: Tue, 05 Feb 2008 15:52:13 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 1.5.0.8 (X11/20060911)
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
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] make coredump-[destroy|restart] work through traditional domU config, Jim Fehlig <=