summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kraft <george.kraft@calxeda.com>2012-09-11 09:36:57 -0500
committerGeorge Kraft <george.kraft@calxeda.com>2012-09-11 09:36:57 -0500
commit75e4120664efa61f363771189244a742c224140b (patch)
treecb644e0a06d222598f31504f46e28710e228efa3
parent00c18047eece40a672be73abfbf1145c85b0a961 (diff)
downloadcxmanage-75e4120664efa61f363771189244a742c224140b.tar.gz
Use time() instead of a counter for firmware transfer deadlines
-rw-r--r--cxmanage/target.py20
1 files 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")