| # Copyright 2015 The Chromium OS Authors. All rights reserved. |
| """Utilities for locking machines.""" |
| |
| from __future__ import print_function |
| |
| import time |
| |
| import afe_lock_machine |
| |
| import logger |
| |
| |
| def AcquireLock(machines, chromeos_root, timeout=1200): |
| """Acquire lock for machine(s) with timeout, using AFE server for locking.""" |
| start_time = time.time() |
| locked = True |
| sleep_time = min(10, timeout / 10.0) |
| while True: |
| try: |
| afe_lock_machine.AFELockManager(machines, False, chromeos_root, |
| None).UpdateMachines(True) |
| break |
| except Exception as e: |
| if time.time() - start_time > timeout: |
| locked = False |
| logger.GetLogger().LogWarning( |
| 'Could not acquire lock on {0} within {1} seconds: {2}'.format( |
| repr(machines), timeout, str(e))) |
| break |
| time.sleep(sleep_time) |
| return locked |
| |
| |
| def ReleaseLock(machines, chromeos_root): |
| """Release locked machine(s), using AFE server for locking.""" |
| unlocked = True |
| try: |
| afe_lock_machine.AFELockManager(machines, False, chromeos_root, |
| None).UpdateMachines(False) |
| except Exception as e: |
| unlocked = False |
| logger.GetLogger().LogWarning('Could not unlock %s. %s' % |
| (repr(machines), str(e))) |
| return unlocked |