aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/run_tests/jobset.py
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-05-29 08:41:29 -0700
committerGravatar Craig Tiller <ctiller@google.com>2015-05-29 08:45:55 -0700
commit533b1a22b4a527107df2607227969102edba0a1f (patch)
treecd4cd42a9cd42455a72cc78e1f17891bfcdec913 /tools/run_tests/jobset.py
parent7684bf5238978712e93e7ad4fe4ec514f50fdc84 (diff)
Add fast stop
Allows run_tests to early out as soon as a test fails. Plays well with -f.
Diffstat (limited to 'tools/run_tests/jobset.py')
-rwxr-xr-xtools/run_tests/jobset.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index a58071ee35..e2b03bd0ab 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -234,7 +234,8 @@ class Job(object):
class Jobset(object):
"""Manages one run of jobs."""
- def __init__(self, check_cancelled, maxjobs, newline_on_success, travis, cache):
+ def __init__(self, check_cancelled, maxjobs, newline_on_success, travis,
+ stop_on_failure, cache):
self._running = set()
self._check_cancelled = check_cancelled
self._cancelled = False
@@ -244,6 +245,7 @@ class Jobset(object):
self._newline_on_success = newline_on_success
self._travis = travis
self._cache = cache
+ self._stop_on_failure = stop_on_failure
def start(self, spec):
"""Start a job. Return True on success, False on failure."""
@@ -280,8 +282,12 @@ class Jobset(object):
for job in self._running:
st = job.state(self._cache)
if st == _RUNNING: continue
- if st == _FAILURE: self._failures += 1
- if st == _KILLED: self._failures += 1
+ if st == _FAILURE or st == _KILLED:
+ self._failures += 1
+ if self._stop_on_failure:
+ self._cancelled = True
+ for job in self._running:
+ job.kill()
dead.add(job)
for job in dead:
self._completed += 1
@@ -333,10 +339,11 @@ def run(cmdlines,
maxjobs=None,
newline_on_success=False,
travis=False,
+ stop_on_failure=False,
cache=None):
js = Jobset(check_cancelled,
maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS,
- newline_on_success, travis,
+ newline_on_success, travis, stop_on_failure,
cache if cache is not None else NoCache())
if not travis:
cmdlines = shuffle_iteratable(cmdlines)