]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: reorganization of manager startup and subprocess controller selection
authorVasek Sraier <git@vakabus.cz>
Tue, 5 Jul 2022 09:56:01 +0000 (11:56 +0200)
committerVasek Sraier <git@vakabus.cz>
Tue, 5 Jul 2022 09:58:05 +0000 (11:58 +0200)
manager/knot_resolver_manager/kres_manager.py
manager/knot_resolver_manager/server.py

index 5e978d86fea8a6b401ca5cfd42db3b2972dfa960..a94fb6af70e640cace48737bab39545b137d93f2 100644 (file)
@@ -5,7 +5,6 @@ import time
 from subprocess import SubprocessError
 from typing import Callable, List, Optional
 
-import knot_resolver_manager.kresd_controller
 from knot_resolver_manager.compat.asyncio import create_task
 from knot_resolver_manager.config_store import ConfigStore
 from knot_resolver_manager.constants import (
@@ -87,7 +86,7 @@ class KresManager:  # pylint: disable=too-many-instance-attributes
 
     @staticmethod
     async def create(
-        selected_controller: Optional[SubprocessController],
+        subprocess_controller: SubprocessController,
         config_store: ConfigStore,
         shutdown_trigger: Callable[[int], None],
     ) -> "KresManager":
@@ -96,17 +95,14 @@ class KresManager:  # pylint: disable=too-many-instance-attributes
         """
 
         inst = KresManager(shutdown_trigger, _i_know_what_i_am_doing=True)
-        await inst._async_init(selected_controller, config_store)  # pylint: disable=protected-access
+        await inst._async_init(subprocess_controller, config_store)  # pylint: disable=protected-access
         return inst
 
-    async def _async_init(self, selected_controller: Optional[SubprocessController], config_store: ConfigStore) -> None:
-        if selected_controller is None:
-            self._controller = await knot_resolver_manager.kresd_controller.get_best_controller_implementation(
-                config_store.get()
-            )
-        else:
-            self._controller = selected_controller
+    async def _async_init(self, subprocess_controller: SubprocessController, config_store: ConfigStore) -> None:
+        self._controller = subprocess_controller
         self._config_store = config_store
+
+        # initialize subprocess controller
         logger.debug("Starting controller")
         await self._controller.initialize_controller(config_store.get())
         self._watchdog_task = create_task(self._watchdog())
index 68bf4271c90fd9a963bda838596971e0d7809a33..6ad64c582f3041722ece239fe526f3b58f14a728 100644 (file)
@@ -23,6 +23,7 @@ from knot_resolver_manager.constants import DEFAULT_MANAGER_CONFIG_FILE, PID_FIL
 from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.datamodel.management_schema import ManagementSchema
 from knot_resolver_manager.exceptions import DataException, KresManagerException, SchemaException
+from knot_resolver_manager.kresd_controller import get_best_controller_implementation
 from knot_resolver_manager.utils.async_utils import readfile
 from knot_resolver_manager.utils.functional import Result
 from knot_resolver_manager.utils.parsing import ParsedTree, parse, parse_yaml
@@ -312,9 +313,12 @@ async def _init_manager(config_store: ConfigStore, server: Server) -> KresManage
     Called asynchronously when the application initializes.
     """
 
+    # Instantiate subprocess controller (if we wanted to, we could switch it at this point)
+    controller = await get_best_controller_implementation(config_store.get())
+
     # Create KresManager. This will perform autodetection of available service managers and
     # select the most appropriate to use (or use the one configured directly)
-    manager = await KresManager.create(None, config_store, server.trigger_shutdown)
+    manager = await KresManager.create(controller, config_store, server.trigger_shutdown)
 
     logger.info("Initial configuration applied. Process manager initialized...")
     return manager