aboutsummaryrefslogtreecommitdiff
path: root/crosperf/machine_manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/machine_manager.py')
-rw-r--r--crosperf/machine_manager.py60
1 files changed, 20 insertions, 40 deletions
diff --git a/crosperf/machine_manager.py b/crosperf/machine_manager.py
index 0941e91a..2155d377 100644
--- a/crosperf/machine_manager.py
+++ b/crosperf/machine_manager.py
@@ -6,7 +6,6 @@
import hashlib
import image_chromeos
-import lock_machine
import math
import os.path
import re
@@ -172,6 +171,16 @@ class CrosMachine(object):
class MachineManager(object):
+ """Lock, image and unlock machines locally for benchmark runs.
+
+ This class contains methods and calls to lock, unlock and image
+ machines and distribute machines to each benchmark run. The assumption is
+ that all of the machines for the experiment have been globally locked
+ (using an AFE server) in the ExperimentRunner, but the machines still need
+ to be locally locked/unlocked (allocated to benchmark runs) to prevent
+ multiple benchmark runs within the same experiment from trying to use the
+ same machine at the same time.
+ """
def __init__(self, chromeos_root, acquire_timeout, log_level, locks_dir,
cmd_exec=None, lgr=None):
self._lock = threading.RLock()
@@ -184,20 +193,11 @@ class MachineManager(object):
self.machine_checksum_string = {}
self.acquire_timeout = acquire_timeout
self.log_level = log_level
- self.locks_dir = locks_dir
+ self.locks_dir = None
self.ce = cmd_exec or command_executer.GetCommandExecuter(
log_level=self.log_level)
self.logger = lgr or logger.GetLogger()
- if self.locks_dir != lock_machine.Machine.LOCKS_DIR:
- msg = ("WARNING: If you use your own locks directory, there is no"
- " guarantee that someone else might not hold a lock on the same"
- " machine in a different locks directory.")
- self.logger.LogOutput(msg)
-
- if not os.path.isdir(self.locks_dir):
- raise MissingLocksDirectory ("Cannot access locks directory: %s"
- % self.locks_dir)
self._initialized_machines = []
self.chromeos_root = chromeos_root
@@ -215,6 +215,7 @@ class MachineManager(object):
if not chromeos_root:
chromeos_root = self.chromeos_root
image_chromeos_args = [image_chromeos.__file__,
+ "--no_lock",
"--chromeos_root=%s" % chromeos_root,
"--image=%s" % label.chromeos_image,
"--image_args=%s" % label.image_args,
@@ -275,19 +276,14 @@ class MachineManager(object):
for m in self._machines:
if m.name == cros_machine.name:
return
- locked = lock_machine.Machine(cros_machine.name,
- self.locks_dir).Lock(True,
- sys.argv[0])
- if locked:
- self._machines.append(cros_machine)
- command = "cat %s" % CHECKSUM_FILE
- ret, out, _ = self.ce.CrosRunCommand(
- command, return_output=True, chromeos_root=self.chromeos_root,
- machine=cros_machine.name)
- if ret == 0:
- cros_machine.checksum = out.strip()
- else:
- self.logger.LogOutput("Couldn't lock: %s" % cros_machine.name)
+
+ self._machines.append(cros_machine)
+ command = "cat %s" % CHECKSUM_FILE
+ ret, out, _ = self.ce.CrosRunCommand(
+ command, return_output=True, chromeos_root=self.chromeos_root,
+ machine=cros_machine.name)
+ if ret == 0:
+ cros_machine.checksum = out.strip()
# This is called from single threaded mode.
def AddMachine(self, machine_name):
@@ -313,12 +309,6 @@ class MachineManager(object):
with self._lock:
self._machines = [m for m in self._machines
if m.name != machine_name]
- res = lock_machine.Machine(machine_name,
- self.locks_dir).Unlock(True)
-
- if not res:
- self.logger.LogError("Could not unlock machine: '%s'."
- % m.name)
def ForceSameImageToAllMachines(self, label):
machines = self.GetMachines(label)
@@ -420,16 +410,6 @@ class MachineManager(object):
m.status = "Available"
break
- def Cleanup(self):
- with self._lock:
- # Unlock all machines.
- for m in self._machines:
- res = lock_machine.Machine(m.name, self.locks_dir).Unlock(True)
-
- if not res:
- self.logger.LogError("Could not unlock machine: '%s'."
- % m.name)
-
def __str__(self):
with self._lock:
l = ["MachineManager Status:"]