From 68c1d611c1ab7d92199f12456b097cd19e18ac1c Mon Sep 17 00:00:00 2001 From: Caroline Tice Date: Wed, 2 Sep 2015 14:49:45 -0700 Subject: Remove cache dirs before starting if --rerun=True. Have Crosperf look for and remove any/all cache entries that match the current experiment, if the flag --rerun=True was passed, before starting the run. This is to prevent cases where the experiment dies halfway through, leaving half the cache entries 'old' and half the cache entries 'new' (i.e. leaving cache in an inconsistent state). BUG=None TEST=Tested in my directory; verified cache is deleted before run starts but only when --rerun=True is passed. Change-Id: I1b03792cba95b30b0270e0f26839618daa70c232 Reviewed-on: https://chrome-internal-review.googlesource.com/229355 Commit-Ready: Caroline Tice Tested-by: Caroline Tice Reviewed-by: Luis Lozano --- crosperf/experiment_runner.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'crosperf') diff --git a/crosperf/experiment_runner.py b/crosperf/experiment_runner.py index b2db368e..08d89d72 100644 --- a/crosperf/experiment_runner.py +++ b/crosperf/experiment_runner.py @@ -6,6 +6,7 @@ import getpass import os import random +import shutil import sys import time import traceback @@ -23,6 +24,8 @@ from threading import Thread import config from experiment_status import ExperimentStatus +from results_cache import CacheConditions +from results_cache import ResultsCache from results_report import HTMLResultsReport from results_report import TextResultsReport from results_report import JSONResultsReport @@ -126,6 +129,19 @@ class ExperimentRunner(object): lock_mgr.CheckMachineLocks(machine_states, "unlock") lock_mgr.UpdateMachines(False) + def _ClearCacheEntries(self, experiment): + for br in experiment.benchmark_runs: + cache = ResultsCache() + cache.Init (br.label.chromeos_image, br.label.chromeos_root, + br.benchmark.test_name, br.iteration, br.test_args, + br.profiler_args, br.machine_manager, br.label.board, + br.cache_conditions, br._logger, br.log_level, br.label, + br.share_cache, br.benchmark.suite, + br.benchmark.show_all_results, br.benchmark.run_local) + cache_dir = cache._GetCacheDirForWrite() + self.l.LogOutput("Removing cache dir: %s" % cache_dir) + shutil.rmtree(cache_dir) + def _Run(self, experiment): try: if not experiment.locks_dir: @@ -133,6 +149,8 @@ class ExperimentRunner(object): if self._using_schedv2: schedv2 = Schedv2(experiment) experiment.set_schedv2(schedv2) + if CacheConditions.FALSE in experiment.cache_conditions: + self._ClearCacheEntries(experiment) status = ExperimentStatus(experiment) experiment.Run() last_status_time = 0 -- cgit v1.2.3