]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: supervisord backend: fixed failures to start and stop properly, now working
authorVasek Sraier <git@vakabus.cz>
Sun, 20 Feb 2022 21:17:00 +0000 (22:17 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:54 +0000 (16:17 +0200)
manager/knot_resolver_manager/kresd_controller/supervisord/__init__.py
manager/knot_resolver_manager/kresd_controller/systemd/__init__.py
manager/knot_resolver_manager/kresd_controller/systemd/dbus_api.py

index fac9172251de2144bf657bfecee183d3bb5d5e60..9d4570f5f10dbbf49407de3e296243006951f111 100644 (file)
@@ -25,6 +25,7 @@ from knot_resolver_manager.constants import (
     supervisord_subprocess_log_dir,
 )
 from knot_resolver_manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.exceptions import SubprocessControllerException
 from knot_resolver_manager.kres_id import KresID
 from knot_resolver_manager.kresd_controller.interface import (
     Subprocess,
@@ -77,13 +78,16 @@ async def _write_config_file(config: KresConfig, instances: Set["SupervisordSubp
     template = await read_resource(__package__, "supervisord.conf.j2")
     assert template is not None
     template = template.decode("utf8")
+    cwd = str(os.getcwd())
+    if not supervisord_subprocess_log_dir(config).exists():
+        supervisord_subprocess_log_dir(config).mkdir(exist_ok=True)
     config_string = Template(template).render(  # pyright: reportUnknownMemberType=false
         instances=[
             _Instance(  # type: ignore[call-arg]
                 type=i.type.name,
                 logfile=supervisord_subprocess_log_dir(config) / f"{i.id}.log",
                 id=str(i.id),
-                workdir=str(os.getcwd()),
+                workdir=cwd,
                 command=_get_command_based_on_type(config, i),
                 environment=f"SYSTEMD_INSTANCE={i.id}",
             )
@@ -92,7 +96,7 @@ async def _write_config_file(config: KresConfig, instances: Set["SupervisordSubp
         config=SupervisordConfig(  # type: ignore[call-arg]
             unix_http_server=supervisord_sock_file(config),
             pid_file=supervisord_pid_file(config),
-            workdir=str(config.server.rundir.to_path().absolute()),
+            workdir=cwd,
             logfile=supervisord_log_file(config),
         ),
     )
@@ -104,12 +108,13 @@ async def _write_config_file(config: KresConfig, instances: Set["SupervisordSubp
 async def _start_supervisord(config: KresConfig) -> None:
     await _write_config_file(config, set())
     res = await call(f'supervisord --configuration="{supervisord_config_file(config).absolute()}"', shell=True)
-    assert res == 0
+    if res != 0:
+        raise SubprocessControllerException(f"Supervisord exited with exit code {res}")
 
 
 async def _stop_supervisord(config: KresConfig) -> None:
     pid = int(await readfile(supervisord_pid_file(config)))
-    kill(pid, signal.SIGINT)
+    kill(pid, signal.SIGTERM)
     await wait_for_process_termination(pid)
 
 
index 617ebad0d0e6b34d622945462bd9675ca88e2b0f..9951099391ecd35d763223c0506133839dba7cff 100644 (file)
@@ -107,16 +107,7 @@ class SystemdSubprocessController(SubprocessController):
                 res.append(
                     SystemdSubprocess(
                         self._controller_config,
-                        SubprocessType.KRESD,
-                        self._systemd_type,
-                        custom_id=kres_id_from_service_name(unit.name),
-                    )
-                )
-            elif unit.name == GC_SERVICE_NAME:
-                res.append(
-                    SystemdSubprocess(
-                        self._controller_config,
-                        SubprocessType.GC,
+                        SubprocessType.GC if unit.name == GC_SERVICE_NAME else SubprocessType.KRESD,
                         self._systemd_type,
                         custom_id=kres_id_from_service_name(unit.name),
                     )
index dee928058a02b6744f786bb5fc592bacbc34feea..67479778f76338bb15778885d167b4553a348761 100644 (file)
@@ -21,7 +21,7 @@ from knot_resolver_manager.kresd_controller.interface import SubprocessType
 
 logger = logging.getLogger(__name__)
 
-GC_SERVICE_NAME = "kres-managed-cache-gc.service"
+GC_SERVICE_NAME = "kresd_gc.service"
 
 
 def kres_id_from_service_name(service_name: str) -> KresID: