Home | History | Annotate | Download | only in cros_utils
      1 # Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 """Utilities for locking machines."""
      3 
      4 from __future__ import print_function
      5 
      6 import time
      7 
      8 import afe_lock_machine
      9 
     10 import logger
     11 
     12 
     13 def AcquireLock(machines, chromeos_root, timeout=1200):
     14   """Acquire lock for machine(s) with timeout, using AFE server for locking."""
     15   start_time = time.time()
     16   locked = True
     17   sleep_time = min(10, timeout / 10.0)
     18   while True:
     19     try:
     20       afe_lock_machine.AFELockManager(machines, False, chromeos_root,
     21                                       None).UpdateMachines(True)
     22       break
     23     except Exception as e:
     24       if time.time() - start_time > timeout:
     25         locked = False
     26         logger.GetLogger().LogWarning(
     27             'Could not acquire lock on {0} within {1} seconds: {2}'.format(
     28                 repr(machines), timeout, str(e)))
     29         break
     30       time.sleep(sleep_time)
     31   return locked
     32 
     33 
     34 def ReleaseLock(machines, chromeos_root):
     35   """Release locked machine(s), using AFE server for locking."""
     36   unlocked = True
     37   try:
     38     afe_lock_machine.AFELockManager(machines, False, chromeos_root,
     39                                     None).UpdateMachines(False)
     40   except Exception as e:
     41     unlocked = False
     42     logger.GetLogger().LogWarning('Could not unlock %s. %s' %
     43                                   (repr(machines), str(e)))
     44   return unlocked
     45