Damien Martin-Guillerez | f88f4d8 | 2015-09-25 13:56:55 +0000 | [diff] [blame] | 1 | // Copyright 2014 The Bazel Authors. All rights reserved. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | package com.google.devtools.build.skyframe; |
| 15 | |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 16 | import com.google.common.collect.ImmutableMap; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 17 | import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; |
Klaus Aehlig | 777b30d | 2017-02-24 16:30:15 +0000 | [diff] [blame] | 18 | import com.google.devtools.build.lib.events.ExtendedEventHandler; |
Janak Ramakrishnan | 39ad966 | 2015-07-15 12:02:53 +0000 | [diff] [blame] | 19 | import com.google.devtools.build.skyframe.MemoizingEvaluator.EmittedEventState; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 20 | import java.util.Map; |
| 21 | import java.util.Set; |
Googler | 3057add | 2018-08-22 07:55:23 -0700 | [diff] [blame] | 22 | import java.util.concurrent.ExecutorService; |
Googler | a6d7dc7 | 2018-08-27 11:18:15 -0700 | [diff] [blame] | 23 | import java.util.function.Supplier; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 24 | import javax.annotation.Nullable; |
| 25 | |
| 26 | /** |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 27 | * An {@link AbstractExceptionalParallelEvaluator} implementing {@link Evaluator}, for when the only |
| 28 | * checked exception throwable by evaluation is {@link InterruptedException}. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 29 | * |
mschaller | cfe25a6 | 2017-08-05 01:40:57 +0200 | [diff] [blame] | 30 | * <p>This class is not intended for direct use, and is only exposed as public for use in evaluation |
| 31 | * implementations outside of this package. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 32 | */ |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 33 | public class ParallelEvaluator extends AbstractExceptionalParallelEvaluator<RuntimeException> |
| 34 | implements Evaluator { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 35 | |
Janak Ramakrishnan | 5411129 | 2015-09-09 21:44:07 +0000 | [diff] [blame] | 36 | public ParallelEvaluator( |
| 37 | ProcessableGraph graph, |
| 38 | Version graphVersion, |
Mark Schaller | 0656880 | 2015-10-21 19:58:43 +0000 | [diff] [blame] | 39 | ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions, |
Klaus Aehlig | 777b30d | 2017-02-24 16:30:15 +0000 | [diff] [blame] | 40 | final ExtendedEventHandler reporter, |
Janak Ramakrishnan | 39ad966 | 2015-07-15 12:02:53 +0000 | [diff] [blame] | 41 | EmittedEventState emittedEventState, |
Janak Ramakrishnan | e0ae617 | 2015-10-11 23:10:01 +0000 | [diff] [blame] | 42 | EventFilter storedEventFilter, |
nharmata | bea67e9 | 2017-06-16 00:26:27 +0200 | [diff] [blame] | 43 | ErrorInfoManager errorInfoManager, |
Janak Ramakrishnan | 5411129 | 2015-09-09 21:44:07 +0000 | [diff] [blame] | 44 | boolean keepGoing, |
Chloe Calvarin | 860b8d2 | 2016-10-05 22:52:55 +0000 | [diff] [blame] | 45 | DirtyTrackingProgressReceiver progressReceiver, |
janakr | 46706ae | 2018-04-30 16:18:50 -0700 | [diff] [blame] | 46 | GraphInconsistencyReceiver graphInconsistencyReceiver, |
Googler | a6d7dc7 | 2018-08-27 11:18:15 -0700 | [diff] [blame] | 47 | Supplier<ExecutorService> executorService, |
janakr | e54491e | 2018-07-11 16:29:13 -0700 | [diff] [blame] | 48 | CycleDetector cycleDetector, |
| 49 | EvaluationVersionBehavior evaluationVersionBehavior) { |
mschaller | cfe25a6 | 2017-08-05 01:40:57 +0200 | [diff] [blame] | 50 | super( |
| 51 | graph, |
| 52 | graphVersion, |
| 53 | skyFunctions, |
| 54 | reporter, |
| 55 | emittedEventState, |
| 56 | storedEventFilter, |
| 57 | errorInfoManager, |
| 58 | keepGoing, |
| 59 | progressReceiver, |
janakr | 46706ae | 2018-04-30 16:18:50 -0700 | [diff] [blame] | 60 | graphInconsistencyReceiver, |
Googler | a6d7dc7 | 2018-08-27 11:18:15 -0700 | [diff] [blame] | 61 | executorService, |
janakr | e54491e | 2018-07-11 16:29:13 -0700 | [diff] [blame] | 62 | cycleDetector, |
| 63 | evaluationVersionBehavior); |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 64 | } |
| 65 | |
| 66 | @Override |
| 67 | @ThreadCompatible |
ulfjack | be83f13 | 2017-07-18 18:12:09 +0200 | [diff] [blame] | 68 | public <T extends SkyValue> EvaluationResult<T> eval(Iterable<? extends SkyKey> skyKeys) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 69 | throws InterruptedException { |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 70 | return this.evalExceptionally(skyKeys); |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 71 | } |
| 72 | |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 73 | @Override |
| 74 | Map<SkyKey, ValueWithMetadata> bubbleErrorUpExceptionally( |
| 75 | ErrorInfo leafFailure, SkyKey errorKey, Iterable<SkyKey> roots, Set<SkyKey> rdepsToBubbleUpTo) |
Janak Ramakrishnan | 3c0adb2 | 2016-08-15 21:54:55 +0000 | [diff] [blame] | 76 | throws InterruptedException { |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 77 | return super.bubbleErrorUp(leafFailure, errorKey, roots, rdepsToBubbleUpTo); |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 78 | } |
| 79 | |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 80 | @Override |
| 81 | <T extends SkyValue> EvaluationResult<T> constructResultExceptionally( |
Janak Ramakrishnan | 900acfb | 2016-01-04 04:47:44 +0000 | [diff] [blame] | 82 | Iterable<SkyKey> skyKeys, |
| 83 | @Nullable Map<SkyKey, ValueWithMetadata> bubbleErrorInfo, |
Janak Ramakrishnan | 3c0adb2 | 2016-08-15 21:54:55 +0000 | [diff] [blame] | 84 | boolean catastrophe) |
| 85 | throws InterruptedException { |
mschaller | 2f8fa64 | 2018-02-01 14:48:13 -0800 | [diff] [blame] | 86 | return super.constructResult(skyKeys, bubbleErrorInfo, catastrophe); |
Janak Ramakrishnan | 5877b8b | 2015-09-22 17:37:10 +0000 | [diff] [blame] | 87 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 88 | } |