]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Sync service from oslo-incubator
authorElena Ezhova <eezhova@mirantis.com>
Thu, 26 Mar 2015 12:33:36 +0000 (15:33 +0300)
committerElena Ezhova <eezhova@mirantis.com>
Thu, 9 Apr 2015 12:20:30 +0000 (15:20 +0300)
This sync includes changes that are required to fix handling
of SIGHUP in Neutron.

The following changes and bugfixes are included:

d24b658 Revert "Optimization of waiting subprocesses in ProcessLauncher"
593005b ProcessLauncher: reload config file in parent process on SIGHUP
f29e865 Store ProcessLauncher signal handlers on class level
bf92010 Optimization of waiting subprocesses in ProcessLauncher

Change-Id: If0aab4e8978422346f6ba4c9e6272cdaf39db6cb
Closes-Bug: #1433142
Related-Bug: #1276694

neutron/openstack/common/service.py

index b4276141f2ea167e33ad41f9101c94ab491e2098..bffc4e79be1b3d4babf37a70aeec920d2cbd5f8b 100644 (file)
@@ -199,6 +199,13 @@ class ServiceWrapper(object):
 
 
 class ProcessLauncher(object):
+    _signal_handlers_set = set()
+
+    @classmethod
+    def _handle_class_signals(cls, *args, **kwargs):
+        for handler in cls._signal_handlers_set:
+            handler(*args, **kwargs)
+
     def __init__(self, wait_interval=0.01):
         """Constructor.
 
@@ -214,7 +221,8 @@ class ProcessLauncher(object):
         self.handle_signal()
 
     def handle_signal(self):
-        _set_signals_handler(self._handle_signal)
+        self._signal_handlers_set.add(self._handle_signal)
+        _set_signals_handler(self._handle_class_signals)
 
     def _handle_signal(self, signo, frame):
         self.sigcaught = signo
@@ -391,8 +399,14 @@ class ProcessLauncher(object):
                 if not _is_sighup_and_daemon(self.sigcaught):
                     break
 
+                cfg.CONF.reload_config_files()
+                for service in set(
+                        [wrap.service for wrap in self.children.values()]):
+                    service.reset()
+
                 for pid in self.children:
                     os.kill(pid, signal.SIGHUP)
+
                 self.running = True
                 self.sigcaught = None
         except eventlet.greenlet.GreenletExit: