From ac5fdefdd4ef4c6fbcb03928c7ef345ce1730b84 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 11 Jun 2026 07:40:54 -0400 Subject: [PATCH] Update SMM3 to handle common issue with FFDC Change-Id: I298709072513e3186bd5386715c1725b1c1bfd20 --- pyghmi/redfish/oem/lenovo/smm3.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pyghmi/redfish/oem/lenovo/smm3.py b/pyghmi/redfish/oem/lenovo/smm3.py index 27e83507..c11d2a2b 100644 --- a/pyghmi/redfish/oem/lenovo/smm3.py +++ b/pyghmi/redfish/oem/lenovo/smm3.py @@ -186,8 +186,6 @@ class OEMHandler(generic.OEMHandler): rsp = self._do_web_request('/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate', targspec) monitorurl = rsp.get('@odata.id', None) return self.monitor_update_progress(monitorurl, progress) - - def get_diagnostic_data(self, savefile, progress=None, autosuffix=False): tsk = self._do_web_request( @@ -197,10 +195,16 @@ class OEMHandler(generic.OEMHandler): taskurl = tsk.get('@odata.id', None) pct = 0 if taskurl else 100 durl = None + iters = 0 while pct < 100 and taskrunning: + iters += 1 status = self._do_web_request(taskurl) durl = status.get('AdditionalDataURI', '') pct = status.get('PercentComplete', 0) + if pct <= 0: + pct = float(iters/1.3) + if pct >= 80.0: + pct = 80.0 taskrunning = status.get('TaskState', 'Complete') == 'Running' if progress: progress({'phase': 'initializing', 'progress': float(pct)}) @@ -214,6 +218,15 @@ class OEMHandler(generic.OEMHandler): entryinfo = self._do_web_request(enturl) durl = entryinfo.get('AdditionalDataURI', None) break + tries = 0 + while not durl and tries < 60: + tries += 1 + if progress: + progress({'phase': 'initializing', 'progress': float(pct + tries * (100 - pct) / 60)}) + time.sleep(3) + entries = self._do_web_request('/redfish/v1/Managers/bmc/LogServices/Dump/Entries') + if entries['Members']: + durl = entries['Members'][0].get('AdditionalDataURI', None) if not durl: raise Exception("Failed getting service data url") fname = os.path.basename(durl)