You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Utilities for locking machines."""
|
|
|
|
from __future__ import print_function
|
|
|
|
import time
|
|
|
|
import lock_machine
|
|
|
|
from cros_utils import logger
|
|
|
|
|
|
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
|