blob: db6f4343ccba0b998bdcc6e8b65e1a11dc02ce82 [file] [log] [blame]
# -*- coding: utf-8 -*-
#
# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Utilities for locking machines."""
import time
from cros_utils import logger
import lock_machine
def AcquireLock(machines, chromeos_root, timeout=1200):
"""Acquire lock for machine(s) with timeout."""
start_time = time.time()
locked = True
sleep_time = min(10, timeout / 10.0)
while True:
try:
lock_machine.LockManager(
machines, False, chromeos_root
).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)."""
unlocked = True
try:
lock_machine.LockManager(machines, False, chromeos_root).UpdateMachines(
False
)
except Exception as e:
unlocked = False
logger.GetLogger().LogWarning(
"Could not unlock %s. %s" % (repr(machines), str(e))
)
return unlocked