From 6561867a5afd65638dec3282c96e7b4611644458 Mon Sep 17 00:00:00 2001 From: Vasek Sraier Date: Sun, 20 Feb 2022 22:17:00 +0100 Subject: [PATCH] manager: supervisord backend: fixed failures to start and stop properly, now working --- .../kresd_controller/supervisord/__init__.py | 13 +++++++++---- .../kresd_controller/systemd/__init__.py | 11 +---------- .../kresd_controller/systemd/dbus_api.py | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/manager/knot_resolver_manager/kresd_controller/supervisord/__init__.py b/manager/knot_resolver_manager/kresd_controller/supervisord/__init__.py index fac917225..9d4570f5f 100644 --- a/manager/knot_resolver_manager/kresd_controller/supervisord/__init__.py +++ b/manager/knot_resolver_manager/kresd_controller/supervisord/__init__.py @@ -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) diff --git a/manager/knot_resolver_manager/kresd_controller/systemd/__init__.py b/manager/knot_resolver_manager/kresd_controller/systemd/__init__.py index 617ebad0d..995109939 100644 --- a/manager/knot_resolver_manager/kresd_controller/systemd/__init__.py +++ b/manager/knot_resolver_manager/kresd_controller/systemd/__init__.py @@ -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), ) diff --git a/manager/knot_resolver_manager/kresd_controller/systemd/dbus_api.py b/manager/knot_resolver_manager/kresd_controller/systemd/dbus_api.py index dee928058..67479778f 100644 --- a/manager/knot_resolver_manager/kresd_controller/systemd/dbus_api.py +++ b/manager/knot_resolver_manager/kresd_controller/systemd/dbus_api.py @@ -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: -- 2.47.3