Parcourir la source

[213] Processes->components

Michal 'vorner' Vaner il y a 13 ans
Parent
commit
4aa0057db9
2 fichiers modifiés avec 70 ajouts et 71 suppressions
  1. 29 30
      src/bin/bind10/bind10_src.py.in
  2. 41 41
      src/bin/bind10/tests/bind10_test.py.in

+ 29 - 30
src/bin/bind10/bind10_src.py.in

@@ -254,12 +254,11 @@ class BoB:
         self.msgq_socket_file = msgq_socket_file
         self.msgq_socket_file = msgq_socket_file
         self.nocache = nocache
         self.nocache = nocache
         self.component_config = {}
         self.component_config = {}
-        # This is not named "components" on purpose, as there doesn't have
-        # to be one-to-one correspondence between processes and components
-        # (A component can have multiple processes, therefore taking multiple
-        # places in the dict, or no processes at all). This tracks the real,
-        # running processes.
-        self.processes = {}
+        # Some time in future, it may happen that a single component has
+        # multple processes. If so happens, name "components" may be
+        # inapropriate. But as the code isn't probably completely ready
+        # for it, we leave it at components for now.
+        self.components = {}
         self.runnable = False
         self.runnable = False
         self.uid = setuid
         self.uid = setuid
         self.username = username
         self.username = username
@@ -373,11 +372,11 @@ class BoB:
         return answer
         return answer
 
 
     def get_processes(self):
     def get_processes(self):
-        pids = list(self.processes.keys())
+        pids = list(self.components.keys())
         pids.sort()
         pids.sort()
         process_list = [ ]
         process_list = [ ]
         for pid in pids:
         for pid in pids:
-            process_list.append([pid, self.processes[pid].name()])
+            process_list.append([pid, self.components[pid].name()])
         return process_list
         return process_list
 
 
     def _get_stats_data(self):
     def _get_stats_data(self):
@@ -426,7 +425,7 @@ class BoB:
                                                             "Unknown command")
                                                             "Unknown command")
         return answer
         return answer
 
 
-    def kill_started_processes(self):
+    def kill_started_components(self):
         """
         """
             Called as part of the exception handling when a process fails to
             Called as part of the exception handling when a process fails to
             start, this runs through the list of started processes, killing
             start, this runs through the list of started processes, killing
@@ -434,10 +433,10 @@ class BoB:
         """
         """
         logger.info(BIND10_KILLING_ALL_PROCESSES)
         logger.info(BIND10_KILLING_ALL_PROCESSES)
 
 
-        for pid in self.processes:
-            logger.info(BIND10_KILL_PROCESS, self.processes[pid].name())
-            self.processes[pid].kill(True)
-        self.processes = {}
+        for pid in self.components:
+            logger.info(BIND10_KILL_PROCESS, self.components[pid].name())
+            self.components[pid].kill(True)
+        self.components = {}
 
 
     def read_bind10_config(self):
     def read_bind10_config(self):
         """
         """
@@ -618,7 +617,7 @@ class BoB:
         Put another process into boss to watch over it.  When the process
         Put another process into boss to watch over it.  When the process
         dies, the component.failed() is called with the exit code.
         dies, the component.failed() is called with the exit code.
         """
         """
-        self.processes[pid] = component
+        self.components[pid] = component
 
 
     def start_simple(self, name):
     def start_simple(self, name):
         """
         """
@@ -718,10 +717,10 @@ class BoB:
 
 
         return self.start_process("b10-xfrin", args, c_channel_env)
         return self.start_process("b10-xfrin", args, c_channel_env)
 
 
-    def start_all_processes(self):
+    def start_all_components(self):
         """
         """
-            Starts up all the processes.  Any exception generated during the
-            starting of the processes is handled by the caller.
+            Starts up all the components.  Any exception generated during the
+            starting of the components is handled by the caller.
         """
         """
         # Start the real core (sockcreator, msgq, cfgmgr)
         # Start the real core (sockcreator, msgq, cfgmgr)
         self._component_configurator.startup(self.__core_components)
         self._component_configurator.startup(self.__core_components)
@@ -736,7 +735,7 @@ class BoB:
         # configuration may override the "-v" switch set on the command line.
         # configuration may override the "-v" switch set on the command line.
         self.read_bind10_config()
         self.read_bind10_config()
 
 
-        # Continue starting the processes.  The authoritative server (if
+        # Continue starting the components.  The authoritative server (if
         # selected):
         # selected):
         component_config = {}
         component_config = {}
         if self.cfg_start_auth:
         if self.cfg_start_auth:
@@ -769,7 +768,7 @@ class BoB:
             self.__propagate_component_config(component_config)
             self.__propagate_component_config(component_config)
             self.started_auth_family = True
             self.started_auth_family = True
 
 
-        # ... and finally start the remaining processes
+        # ... and finally start the remaining components
         component_config['b10-stats'] = { 'kind': 'dispensable',
         component_config['b10-stats'] = { 'kind': 'dispensable',
                                           'address': 'Stats' }
                                           'address': 'Stats' }
         component_config['b10-stats-httpd'] = { 'kind': 'dispensable',
         component_config['b10-stats-httpd'] = { 'kind': 'dispensable',
@@ -807,13 +806,13 @@ class BoB:
             # this is the case we want, where the msgq is not running
             # this is the case we want, where the msgq is not running
             pass
             pass
 
 
-        # Start all processes.  If any one fails to start, kill all started
-        # processes and exit with an error indication.
+        # Start all components.  If any one fails to start, kill all started
+        # components and exit with an error indication.
         try:
         try:
             self.c_channel_env = c_channel_env
             self.c_channel_env = c_channel_env
-            self.start_all_processes()
+            self.start_all_components()
         except Exception as e:
         except Exception as e:
-            self.kill_started_processes()
+            self.kill_started_components()
             return "Unable to start " + self.curproc + ": " + str(e)
             return "Unable to start " + self.curproc + ": " + str(e)
 
 
         # Started successfully
         # Started successfully
@@ -878,7 +877,7 @@ class BoB:
         time.sleep(1)
         time.sleep(1)
         self.reap_children()
         self.reap_children()
         # next try sending a SIGTERM
         # next try sending a SIGTERM
-        components_to_stop = list(self.processes.values())
+        components_to_stop = list(self.components.values())
         for component in components_to_stop:
         for component in components_to_stop:
             logger.info(BIND10_SEND_SIGTERM, component.name(), component.pid())
             logger.info(BIND10_SEND_SIGTERM, component.name(), component.pid())
             try:
             try:
@@ -888,11 +887,11 @@ class BoB:
                 # finally exited)
                 # finally exited)
                 pass
                 pass
         # finally, send SIGKILL (unmaskable termination) until everybody dies
         # finally, send SIGKILL (unmaskable termination) until everybody dies
-        while self.processes:
+        while self.components:
             # XXX: some delay probably useful... how much is uncertain
             # XXX: some delay probably useful... how much is uncertain
             time.sleep(0.1)  
             time.sleep(0.1)  
             self.reap_children()
             self.reap_children()
-            components_to_stop = list(self.processes.values())
+            components_to_stop = list(self.components.values())
             for component in components_to_stop:
             for component in components_to_stop:
                 logger.info(BIND10_SEND_SIGKILL, component.name(),
                 logger.info(BIND10_SEND_SIGKILL, component.name(),
                             component.pid())
                             component.pid())
@@ -919,9 +918,9 @@ class BoB:
                 # XXX: should be impossible to get any other error here
                 # XXX: should be impossible to get any other error here
                 raise
                 raise
             if pid == 0: break
             if pid == 0: break
-            if pid in self.processes:
-                # One of the processes we know about.  Get information on it.
-                component = self.processes.pop(pid)
+            if pid in self.components:
+                # One of the components we know about.  Get information on it.
+                component = self.components.pop(pid)
                 logger.info(BIND10_PROCESS_ENDED, component.name(), pid,
                 logger.info(BIND10_PROCESS_ENDED, component.name(), pid,
                             exit_status)
                             exit_status)
                 if component.running() and self.runnable:
                 if component.running() and self.runnable:
@@ -969,7 +968,7 @@ class BoB:
                 logger.info(BIND10_RESURRECTING_PROCESS, proc_info.name)
                 logger.info(BIND10_RESURRECTING_PROCESS, proc_info.name)
                 try:
                 try:
                     proc_info.respawn()
                     proc_info.respawn()
-                    self.processes[proc_info.pid] = proc_info
+                    self.components[proc_info.pid] = proc_info
                     logger.info(BIND10_RESURRECTED_PROCESS, proc_info.name, proc_info.pid)
                     logger.info(BIND10_RESURRECTED_PROCESS, proc_info.name, proc_info.pid)
                 except:
                 except:
                     still_dead[proc_info.pid] = proc_info
                     still_dead[proc_info.pid] = proc_info

+ 41 - 41
src/bin/bind10/tests/bind10_test.py.in

@@ -104,7 +104,7 @@ class TestBoB(unittest.TestCase):
         self.assertEqual(bob.msgq_socket_file, None)
         self.assertEqual(bob.msgq_socket_file, None)
         self.assertEqual(bob.cc_session, None)
         self.assertEqual(bob.cc_session, None)
         self.assertEqual(bob.ccs, None)
         self.assertEqual(bob.ccs, None)
-        self.assertEqual(bob.processes, {})
+        self.assertEqual(bob.components, {})
         self.assertEqual(bob.dead_processes, {})
         self.assertEqual(bob.dead_processes, {})
         self.assertEqual(bob.runnable, False)
         self.assertEqual(bob.runnable, False)
         self.assertEqual(bob.uid, None)
         self.assertEqual(bob.uid, None)
@@ -122,7 +122,7 @@ class TestBoB(unittest.TestCase):
         self.assertEqual(bob.msgq_socket_file, "alt_socket_file")
         self.assertEqual(bob.msgq_socket_file, "alt_socket_file")
         self.assertEqual(bob.cc_session, None)
         self.assertEqual(bob.cc_session, None)
         self.assertEqual(bob.ccs, None)
         self.assertEqual(bob.ccs, None)
-        self.assertEqual(bob.processes, {})
+        self.assertEqual(bob.components, {})
         self.assertEqual(bob.dead_processes, {})
         self.assertEqual(bob.dead_processes, {})
         self.assertEqual(bob.runnable, False)
         self.assertEqual(bob.runnable, False)
         self.assertEqual(bob.uid, None)
         self.assertEqual(bob.uid, None)
@@ -221,7 +221,7 @@ class MockBob(BoB):
         self.dhcp6 = False
         self.dhcp6 = False
         self.dhcp4 = False
         self.dhcp4 = False
         self.c_channel_env = {}
         self.c_channel_env = {}
-        self.processes = { }
+        self.components = { }
         self.creator = False
         self.creator = False
 
 
         class MockSockCreator(isc.bind10.component.Component):
         class MockSockCreator(isc.bind10.component.Component):
@@ -351,58 +351,58 @@ class MockBob(BoB):
     # in case he forgets to update the tests.
     # in case he forgets to update the tests.
     def stop_msgq(self):
     def stop_msgq(self):
         if self.msgq:
         if self.msgq:
-            del self.processes[2]
+            del self.components[2]
         self.msgq = False
         self.msgq = False
 
 
     def stop_cfgmgr(self):
     def stop_cfgmgr(self):
         if self.cfgmgr:
         if self.cfgmgr:
-            del self.processes[3]
+            del self.components[3]
         self.cfgmgr = False
         self.cfgmgr = False
 
 
     def stop_auth(self):
     def stop_auth(self):
         if self.auth:
         if self.auth:
-            del self.processes[5]
+            del self.components[5]
         self.auth = False
         self.auth = False
 
 
     def stop_resolver(self):
     def stop_resolver(self):
         if self.resolver:
         if self.resolver:
-            del self.processes[6]
+            del self.components[6]
         self.resolver = False
         self.resolver = False
 
 
     def stop_xfrout(self):
     def stop_xfrout(self):
         if self.xfrout:
         if self.xfrout:
-            del self.processes[7]
+            del self.components[7]
         self.xfrout = False
         self.xfrout = False
 
 
     def stop_xfrin(self):
     def stop_xfrin(self):
         if self.xfrin:
         if self.xfrin:
-            del self.processes[8]
+            del self.components[8]
         self.xfrin = False
         self.xfrin = False
 
 
     def stop_zonemgr(self):
     def stop_zonemgr(self):
         if self.zonemgr:
         if self.zonemgr:
-            del self.processes[9]
+            del self.components[9]
         self.zonemgr = False
         self.zonemgr = False
 
 
     def stop_stats(self):
     def stop_stats(self):
         if self.stats:
         if self.stats:
-            del self.processes[10]
+            del self.components[10]
         self.stats = False
         self.stats = False
 
 
     def stop_stats_httpd(self):
     def stop_stats_httpd(self):
         if self.stats_httpd:
         if self.stats_httpd:
-            del self.processes[11]
+            del self.components[11]
         self.stats_httpd = False
         self.stats_httpd = False
 
 
     def stop_cmdctl(self):
     def stop_cmdctl(self):
         if self.cmdctl:
         if self.cmdctl:
-            del self.processes[12]
+            del self.components[12]
         self.cmdctl = False
         self.cmdctl = False
 
 
 class TestStartStopProcessesBob(unittest.TestCase):
 class TestStartStopProcessesBob(unittest.TestCase):
     """
     """
-    Check that the start_all_processes method starts the right combination
-    of processes and that the right processes are started and stopped
+    Check that the start_all_components method starts the right combination
+    of components and that the right components are started and stopped
     according to changes in configuration.
     according to changes in configuration.
     """
     """
     def check_environment_unchanged(self):
     def check_environment_unchanged(self):
@@ -436,7 +436,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
     def check_started_none(self, bob):
     def check_started_none(self, bob):
         """
         """
         Check that the situation is according to configuration where no servers
         Check that the situation is according to configuration where no servers
-        should be started. Some processes still need to be running.
+        should be started. Some components still need to be running.
         """
         """
         self.check_started(bob, True, False, False)
         self.check_started(bob, True, False, False)
         self.check_environment_unchanged()
         self.check_environment_unchanged()
@@ -451,14 +451,14 @@ class TestStartStopProcessesBob(unittest.TestCase):
 
 
     def check_started_auth(self, bob):
     def check_started_auth(self, bob):
         """
         """
-        Check the set of processes needed to run auth only is started.
+        Check the set of components needed to run auth only is started.
         """
         """
         self.check_started(bob, True, True, False)
         self.check_started(bob, True, True, False)
         self.check_environment_unchanged()
         self.check_environment_unchanged()
 
 
     def check_started_resolver(self, bob):
     def check_started_resolver(self, bob):
         """
         """
-        Check the set of processes needed to run resolver only is started.
+        Check the set of components needed to run resolver only is started.
         """
         """
         self.check_started(bob, True, False, True)
         self.check_started(bob, True, False, True)
         self.check_environment_unchanged()
         self.check_environment_unchanged()
@@ -476,65 +476,65 @@ class TestStartStopProcessesBob(unittest.TestCase):
         self.assertEqual(v6==True, v6found==1)
         self.assertEqual(v6==True, v6found==1)
         self.check_environment_unchanged()
         self.check_environment_unchanged()
 
 
-    # Checks the processes started when starting neither auth nor resolver
+    # Checks the components started when starting neither auth nor resolver
     # is specified.
     # is specified.
     def test_start_none(self):
     def test_start_none(self):
         # Create BoB and ensure correct initialization
         # Create BoB and ensure correct initialization
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes and check what was started
+        # Start components and check what was started
         bob.cfg_start_auth = False
         bob.cfg_start_auth = False
         bob.cfg_start_resolver = False
         bob.cfg_start_resolver = False
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
         self.check_started_none(bob)
         self.check_started_none(bob)
 
 
-    # Checks the processes started when starting only the auth process
+    # Checks the components started when starting only the auth process
     def test_start_auth(self):
     def test_start_auth(self):
         # Create BoB and ensure correct initialization
         # Create BoB and ensure correct initialization
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes and check what was started
+        # Start components and check what was started
         bob.cfg_start_auth = True
         bob.cfg_start_auth = True
         bob.cfg_start_resolver = False
         bob.cfg_start_resolver = False
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
 
 
         self.check_started_auth(bob)
         self.check_started_auth(bob)
 
 
-    # Checks the processes started when starting only the resolver process
+    # Checks the components started when starting only the resolver process
     def test_start_resolver(self):
     def test_start_resolver(self):
         # Create BoB and ensure correct initialization
         # Create BoB and ensure correct initialization
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes and check what was started
+        # Start components and check what was started
         bob.cfg_start_auth = False
         bob.cfg_start_auth = False
         bob.cfg_start_resolver = True
         bob.cfg_start_resolver = True
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
 
 
         self.check_started_resolver(bob)
         self.check_started_resolver(bob)
 
 
-    # Checks the processes started when starting both auth and resolver process
+    # Checks the components started when starting both auth and resolver process
     def test_start_both(self):
     def test_start_both(self):
         # Create BoB and ensure correct initialization
         # Create BoB and ensure correct initialization
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes and check what was started
+        # Start components and check what was started
         bob.cfg_start_auth = True
         bob.cfg_start_auth = True
         bob.cfg_start_resolver = True
         bob.cfg_start_resolver = True
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
 
 
         self.check_started_both(bob)
         self.check_started_both(bob)
 
 
     def test_config_start(self):
     def test_config_start(self):
         """
         """
-        Test that the configuration starts and stops processes according
+        Test that the configuration starts and stops components according
         to configuration changes.
         to configuration changes.
         """
         """
 
 
@@ -542,12 +542,12 @@ class TestStartStopProcessesBob(unittest.TestCase):
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes (nothing much should be started, as in
+        # Start components (nothing much should be started, as in
         # test_start_none)
         # test_start_none)
         bob.cfg_start_auth = False
         bob.cfg_start_auth = False
         bob.cfg_start_resolver = False
         bob.cfg_start_resolver = False
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
         bob.runnable = True
         bob.runnable = True
         self.check_started_none(bob)
         self.check_started_none(bob)
 
 
@@ -607,11 +607,11 @@ class TestStartStopProcessesBob(unittest.TestCase):
         bob = MockBob()
         bob = MockBob()
         self.check_preconditions(bob)
         self.check_preconditions(bob)
 
 
-        # Start processes (both)
+        # Start components (both)
         bob.cfg_start_auth = True
         bob.cfg_start_auth = True
         bob.cfg_start_resolver = True
         bob.cfg_start_resolver = True
 
 
-        bob.start_all_processes()
+        bob.start_all_components()
         bob.runnable = True
         bob.runnable = True
         self.check_started_both(bob)
         self.check_started_both(bob)
 
 
@@ -627,7 +627,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
 
 
     def test_config_not_started_early(self):
     def test_config_not_started_early(self):
         """
         """
-        Test that processes are not started by the config handler before
+        Test that components are not started by the config handler before
         startup.
         startup.
         """
         """
         bob = MockBob()
         bob = MockBob()
@@ -641,7 +641,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
 
 
         bob.config_handler({'start_auth': True, 'start_resolver': True})
         bob.config_handler({'start_auth': True, 'start_resolver': True})
 
 
-    # Checks that DHCP (v4 and v6) processes are started when expected
+    # Checks that DHCP (v4 and v6) components are started when expected
     def test_start_dhcp(self):
     def test_start_dhcp(self):
 
 
         # Create BoB and ensure correct initialization
         # Create BoB and ensure correct initialization
@@ -655,7 +655,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
         # v4 and v6 disabled
         # v4 and v6 disabled
         bob.cfg_start_dhcp6 = False
         bob.cfg_start_dhcp6 = False
         bob.cfg_start_dhcp4 = False
         bob.cfg_start_dhcp4 = False
-        bob.start_all_processes()
+        bob.start_all_components()
         self.check_started_dhcp(bob, False, False)
         self.check_started_dhcp(bob, False, False)
 
 
     def test_start_dhcp_v6only(self):
     def test_start_dhcp_v6only(self):
@@ -670,7 +670,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
         # v6 only enabled
         # v6 only enabled
         bob.cfg_start_dhcp6 = True
         bob.cfg_start_dhcp6 = True
         bob.cfg_start_dhcp4 = False
         bob.cfg_start_dhcp4 = False
-        bob.start_all_processes()
+        bob.start_all_components()
         self.check_started_dhcp(bob, False, True)
         self.check_started_dhcp(bob, False, True)
 
 
         # uncomment when dhcpv4 becomes implemented
         # uncomment when dhcpv4 becomes implemented
@@ -831,7 +831,7 @@ class TestPIDFile(unittest.TestCase):
 class TestBrittle(unittest.TestCase):
 class TestBrittle(unittest.TestCase):
     def test_brittle_disabled(self):
     def test_brittle_disabled(self):
         bob = MockBob()
         bob = MockBob()
-        bob.start_all_processes()
+        bob.start_all_components()
         bob.runnable = True
         bob.runnable = True
 
 
         bob.reap_children()
         bob.reap_children()
@@ -844,7 +844,7 @@ class TestBrittle(unittest.TestCase):
 
 
     def test_brittle_enabled(self):
     def test_brittle_enabled(self):
         bob = MockBob()
         bob = MockBob()
-        bob.start_all_processes()
+        bob.start_all_components()
         bob.runnable = True
         bob.runnable = True
 
 
         bob.brittle = True
         bob.brittle = True