From e5b673f1b459a0927ca65bf9e6fd504ece57e39d Mon Sep 17 00:00:00 2001 From: Yunlian Jiang Date: Thu, 23 May 2013 11:42:53 -0700 Subject: 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 Commit-Queue: Yunlian Jiang Tested-by: Yunlian Jiang --- crosperf/benchmark_run.py | 8 +++++++- crosperf/machine_manager.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'crosperf') 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) -- cgit v1.2.3