]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
controller/registered_workers.py: command_registered_workers() better error handling docs-workers-comm-6u8qgs/deployments/9100 1834/head
authorAleš Mrázek <ales.mrazek@nic.cz>
Wed, 13 May 2026 13:58:16 +0000 (15:58 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 15 May 2026 11:34:44 +0000 (13:34 +0200)
Improved handling of unexpected errors when sending commands to individual workers.

NEWS
python/knot_resolver/controller/registered_workers.py

diff --git a/NEWS b/NEWS
index 116e82373366fda94bd7af1ec89573e40879466c..ad375ebefef7dc216c8fb75826b5ad561418d215 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ Knot Resolver 6.4.0 (2026-05-27)
 Improvements
 ------------
 - packaging: rpm: added systemd's sysusers support (!1830)
+- controller: improved error handling when sending commands to workers (!1834)
 
 
 Knot Resolver 6.3.0 (2026-04-27)
index 28a2a34b37d912c1a2b2f8ab579edf31ac8336d4..7b2b40230f765c3dd56eaac9e8e35b2f317e3c90 100644 (file)
@@ -29,9 +29,21 @@ async def command_single_registered_worker(cmd: str) -> "Tuple[KresID, object]":
 
 async def command_registered_workers(cmd: str) -> "Dict[KresID, object]":
     async def single_pair(sub: "Subprocess") -> "Tuple[KresID, object]":
-        return sub.id, await sub.command(cmd)
+        try:
+            return sub.id, await sub.command(cmd)
+        except BaseException as e:
+            logger.error(
+                "failed to command '%s' worker: %s",
+                sub.id,
+                e,
+            )
+            return sub.id, None
+
+    pairs = await asyncio.gather(
+        *(single_pair(inst) for inst in list(_REGISTERED_WORKERS.values())),
+        return_exceptions=False,
+    )
 
-    pairs = await asyncio.gather(*(single_pair(inst) for inst in _REGISTERED_WORKERS.values()))
     return dict(pairs)