diff options
author | Yunlian Jiang <yunlian@google.com> | 2013-05-23 11:42:53 -0700 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-05-23 15:58:48 -0700 |
commit | e5b673f1b459a0927ca65bf9e6fd504ece57e39d (patch) | |
tree | d373b0035b4d9fe968b50ee99f0f31f175a9b3ae /crosperf | |
parent | 837e07a6a2f455a4699bf4ad1b28653fde3ca3b0 (diff) | |
download | toolchain-utils-e5b673f1b459a0927ca65bf9e6fd504ece57e39d.tar.gz |
crosperf: remove dead machine in the runtime.
This checks whether a machine is reacheable after a test run.
If the machine is dead, we remove it from the machine list in the
machine manager.
BUG=None
TEST=crosperf a simple case passes.
Change-Id: Ie40a4a41715f2dc0349666079faa599b3c8aa667
Reviewed-on: https://gerrit-int.chromium.org/38578
Reviewed-by: Luis Lozano <llozano@chromium.org>
Commit-Queue: Yunlian Jiang <yunlian@google.com>
Tested-by: Yunlian Jiang <yunlian@google.com>
Diffstat (limited to 'crosperf')
-rw-r--r-- | crosperf/benchmark_run.py | 8 | ||||
-rw-r--r-- | crosperf/machine_manager.py | 13 |
2 files changed, 18 insertions, 3 deletions
diff --git a/crosperf/benchmark_run.py b/crosperf/benchmark_run.py index 80c95c4d..9197dc9e 100644 --- a/crosperf/benchmark_run.py +++ b/crosperf/benchmark_run.py @@ -1,6 +1,8 @@ #!/usr/bin/python -# Copyright 2011 Google Inc. All Rights Reserved. +# Copyright (c) 2013 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. import datetime import os @@ -108,6 +110,10 @@ class BenchmarkRun(threading.Thread): self.failure_reason = str(e) finally: if self.machine: + if not self.machine.IsReachable(): + self._logger.LogOutput("Machine % is not reachable, removing it." + % self.machine.name) + self.machine_manager.RemoveMachine(self.machine.name) self._logger.LogOutput("Releasing machine: %s" % self.machine.name) self.machine_manager.ReleaseMachine(self.machine) self._logger.LogOutput("Released machine: %s" % self.machine.name) diff --git a/crosperf/machine_manager.py b/crosperf/machine_manager.py index 1155327d..ea3f17d7 100644 --- a/crosperf/machine_manager.py +++ b/crosperf/machine_manager.py @@ -32,7 +32,7 @@ class CrosMachine(object): self.released_time = time.time() self.autotest_run = None self.chromeos_root = chromeos_root - if not self._IsReachable(): + if not self.IsReachable(): self.machine_checksum = None return self._GetMemoryInfo() @@ -42,7 +42,7 @@ class CrosMachine(object): self.machine_checksum = self._GetMD5Checksum(self.checksum_string) self.machine_id_checksum = self._GetMD5Checksum(self.machine_id) - def _IsReachable(self): + def IsReachable(self): ce = command_executer.GetCommandExecuter() command = "ls" ret = ce.CrosRunCommand(command, @@ -246,6 +246,15 @@ class MachineManager(object): checksums = [m.machine_checksum for m in self.GetMachines(label)] return len(set(checksums)) == 1 + def RemoveMachine(self, machine_name): + with self._lock: + self._machines = [m for m in self._machines + if m.name != machine_name] + res = lock_machine.Machine(machine_name).Unlock(True) + if not res: + logger.GetLogger().LogError("Could not unlock machine: '%s'." + % m.name) + def AcquireMachine(self, chromeos_image, label): image_checksum = ImageChecksummer().Checksum(label) machines = self.GetMachines(label) |