[Erp5-report] r43965 luke - /erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 4 11:41:17 CET 2011


Author: luke
Date: Fri Mar  4 11:41:17 2011
New Revision: 43965

URL: http://svn.erp5.org?rev=43965&view=rev
Log:
 - do singal translation for cloudooo, as paster is not killing children
   on SIGTERM, but on SIGINT only

Modified:
    erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
    erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py

Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py?rev=43965&r1=43964&r2=43965&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] Fri Mar  4 11:41:17 2011
@@ -316,9 +316,9 @@ class Recipe(BaseSlapRecipe):
           conversion_server_dict))
     self.path_list.append(config_file)
     self.path_list.extend(zc.buildout.easy_install.scripts([(name,
-      __name__ + '.execute', 'execute')], self.ws, sys.executable,
-      self.wrapper_directory, arguments=[self.options['ooo_paster'].strip(),
-        'serve', config_file]))
+      __name__ + '.execute', 'execute_with_signal_translation')], self.ws,
+      sys.executable, self.wrapper_directory,
+      arguments=[self.options['ooo_paster'].strip(), 'serve', config_file]))
     self.connection_dict.update(**{
       name + '_port': conversion_server_dict['port'],
       name + '_ip': conversion_server_dict['ip']

Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py?rev=43965&r1=43964&r2=43965&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/execute.py [utf8] Fri Mar  4 11:41:17 2011
@@ -1,5 +1,34 @@
+import sys
 import os
+import signal
+import subprocess
+import time
+
 def execute(args):
   """Portable execution with process replacement"""
   # Note: Candidate for slapos.lib.recipe
   os.execv(args[0], args)
+
+child_pg = None
+def sig_handler(signal, frame):
+  print 'Received signal %r, killing children and exiting' % signal
+  if child_pg is not None:
+    os.killpg(child_pg, signal.SIGHUP)
+    os.killpg(child_pg, signal.SIGTERM)
+  sys.exit(0)
+
+signal.signal(signal.SIGINT, sig_handler)
+signal.signal(signal.SIGQUIT, sig_handler)
+signal.signal(signal.SIGTERM, sig_handler)
+
+def execute_with_signal_translation(args):
+  """Run process as children and translate from SIGTERM to another signal"""
+  child = subprocess.Popen(args, close_fds=True, preexec_fn=os.setsid)
+  child_pg = child.pid
+  try:
+    while True:
+      print 'Running'
+      time.sleep(10)
+  finally:
+    os.killpg(child_pg, signal.SIGHUP)
+    os.killpg(child_pg, signal.SIGTERM)



More information about the Erp5-report mailing list