# 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