aboutsummaryrefslogtreecommitdiff
path: root/crosperf
diff options
context:
space:
mode:
authorYunlian Jiang <yunlian@google.com>2013-05-23 11:42:53 -0700
committerChromeBot <chrome-bot@google.com>2013-05-23 15:58:48 -0700
commite5b673f1b459a0927ca65bf9e6fd504ece57e39d (patch)
treed373b0035b4d9fe968b50ee99f0f31f175a9b3ae /crosperf
parent837e07a6a2f455a4699bf4ad1b28653fde3ca3b0 (diff)
downloadtoolchain-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.py8
-rw-r--r--crosperf/machine_manager.py13
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)