From 27b951b7cba4c33a31d7b19658ffdd9324d393d4 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 29 Apr 2026 09:57:36 -0400 Subject: [PATCH] Honor 'Done' message to avoid incurring a delay after task is done. --- .../plugins/hardwaremanagement/ipmi.py | 26 ++++++++++--------- .../plugins/hardwaremanagement/redfish.py | 23 +++++++++------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 1c1e8670..1b24f676 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -405,21 +405,23 @@ async def perform_requests(operator, nodes, element, cfg, inputdata, realop): bundle = [] datum = await asyncio.wait_for(resultdata.get(), timeout=10.0) while datum: - if datum != 'Done': - if isinstance(datum, Exception): - raise datum - if (hasattr(datum, 'kvpairs') and datum.kvpairs and - len(datum.kvpairs) == 1): - bundle.append((list(datum.kvpairs)[0], datum)) - numnodes -= 1 - else: - yield datum - timeout = 0.1 if numnodes else 0.001 - datum = await asyncio.wait_for(resultdata.get(), timeout=timeout) + if datum == 'Done': + datum = None + break + if isinstance(datum, Exception): + raise datum + if (hasattr(datum, 'kvpairs') and datum.kvpairs and + len(datum.kvpairs) == 1): + bundle.append((list(datum.kvpairs)[0], datum)) + numnodes -= 1 + else: + yield datum + timeout = 0.1 if numnodes else 0.001 + datum = await asyncio.wait_for(resultdata.get(), timeout=timeout) except asyncio.QueueEmpty: pass except asyncio.TimeoutError: - print("odd timeout?" + repr(element) + repr(nodes)) + # the timeout is just a sign to push out pending bundled stuff pass finally: for datum in sorted( diff --git a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py index eb599d3a..179fcb86 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py @@ -266,21 +266,24 @@ async def perform_requests(operator, nodes, element, cfg, inputdata, realop): bundle = [] datum = await asyncio.wait_for(resultdata.get(), timeout=10.0) while datum: - if datum != 'Done': - if isinstance(datum, Exception): - raise datum - if (hasattr(datum, 'kvpairs') and datum.kvpairs and - len(datum.kvpairs) == 1): - bundle.append((list(datum.kvpairs)[0], datum)) - numnodes -= 1 - else: - yield datum + if datum == 'Done': + datum = None + break + if isinstance(datum, Exception): + raise datum + if (hasattr(datum, 'kvpairs') and datum.kvpairs and + len(datum.kvpairs) == 1): + bundle.append((list(datum.kvpairs)[0], datum)) + numnodes -= 1 + else: + yield datum timeout = 0.1 if numnodes else 0.001 datum = await asyncio.wait_for(resultdata.get(), timeout=timeout) except asyncio.QueueEmpty: pass except asyncio.TimeoutError: - print("odd timeout?" + repr(element) + repr(nodes)) + # the timeout is just a sign to push out pending bundled stuff + pass finally: for datum in sorted( bundle, key=lambda x: util.naturalize_string(x[0])):