# 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