From 75e4120664efa61f363771189244a742c224140b Mon Sep 17 00:00:00 2001 From: George Kraft Date: Tue, 11 Sep 2012 09:36:57 -0500 Subject: Use time() instead of a counter for firmware transfer deadlines --- cxmanage/target.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cxmanage/target.py b/cxmanage/target.py index af6e031..05130e8 100644 --- a/cxmanage/target.py +++ b/cxmanage/target.py @@ -498,20 +498,22 @@ class Target: def _wait_for_transfer(self, handle): """ Wait for a firmware transfer to finish""" - counter = 0 + deadline = time.time() + 180 + + result = self.bmc.get_firmware_status(handle) + if not hasattr(result, "status"): + raise CxmanageError("Unable to retrieve transfer info") + + while result.status == "In progress": + if time.time() >= deadline: + self.bmc.cancel_firmware(handle) + raise CxmanageError("Transfer timed out after 3 minutes") - while True: time.sleep(1) + result = self.bmc.get_firmware_status(handle) if not hasattr(result, "status"): raise CxmanageError("Unable to retrieve transfer info") - if result.status != "In progress": - break - - # Time out after 3 minutes - counter += 1 - if counter >= 180: - raise CxmanageError("Transfer timed out after 3 minutes") if result.status != "Complete": raise CxmanageError("Node reported transfer failure") -- cgit v1.2.1