diff options
author | ulfjack <ulfjack@google.com> | 2017-07-18 10:12:09 +0200 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2017-07-18 11:41:14 +0200 |
commit | 52b4f68592df562dd9f1e28208a1bde72b86a721 (patch) | |
tree | e766dd60d843a92d38bcd1fd0899460e9c440851 /src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java | |
parent | 820a46af10808396873c36d0f331e533118cf0c6 (diff) |
Fix Postable forwarding and replay
We were previously duplicate-posting Postable events posted to the
Skyframe environment.
PiperOrigin-RevId: 162323598
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java index 2f585ff679..9bafd6ebf7 100644 --- a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java +++ b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.collect.nestedset.NestedSetVisitor; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.ExtendedEventHandler; +import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.skyframe.MemoizingEvaluator.EmittedEventState; import com.google.devtools.build.skyframe.QueryableGraph.Reason; @@ -46,6 +47,7 @@ class ParallelEvaluatorContext { private final ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions; private final ExtendedEventHandler reporter; private final NestedSetVisitor<TaggedEvents> replayingNestedSetEventVisitor; + private final NestedSetVisitor<Postable> replayingNestedSetPostableVisitor; private final boolean keepGoing; private final DirtyTrackingProgressReceiver progressReceiver; private final EventFilter storedEventFilter; @@ -76,7 +78,10 @@ class ParallelEvaluatorContext { this.skyFunctions = skyFunctions; this.reporter = reporter; this.replayingNestedSetEventVisitor = - new NestedSetVisitor<>(new NestedSetEventReceiver(reporter), emittedEventState); + new NestedSetVisitor<>(new NestedSetEventReceiver(reporter), emittedEventState.eventState); + this.replayingNestedSetPostableVisitor = + new NestedSetVisitor<>( + new NestedSetPostableReceiver(reporter), emittedEventState.postableState); this.keepGoing = keepGoing; this.progressReceiver = Preconditions.checkNotNull(progressReceiver); this.storedEventFilter = storedEventFilter; @@ -109,7 +114,10 @@ class ParallelEvaluatorContext { this.skyFunctions = skyFunctions; this.reporter = reporter; this.replayingNestedSetEventVisitor = - new NestedSetVisitor<>(new NestedSetEventReceiver(reporter), emittedEventState); + new NestedSetVisitor<>(new NestedSetEventReceiver(reporter), emittedEventState.eventState); + this.replayingNestedSetPostableVisitor = + new NestedSetVisitor<>( + new NestedSetPostableReceiver(reporter), emittedEventState.postableState); this.keepGoing = keepGoing; this.progressReceiver = Preconditions.checkNotNull(progressReceiver); this.storedEventFilter = storedEventFilter; @@ -192,6 +200,10 @@ class ParallelEvaluatorContext { return replayingNestedSetEventVisitor; } + NestedSetVisitor<Postable> getReplayingNestedSetPostableVisitor() { + return replayingNestedSetPostableVisitor; + } + ExtendedEventHandler getReporter() { return reporter; } @@ -225,4 +237,19 @@ class ParallelEvaluatorContext { } } } + + /** Receives the postables from the NestedSet and delegates to the reporter. */ + private static class NestedSetPostableReceiver implements NestedSetVisitor.Receiver<Postable> { + + private final ExtendedEventHandler reporter; + + public NestedSetPostableReceiver(ExtendedEventHandler reporter) { + this.reporter = reporter; + } + + @Override + public void accept(Postable post) { + reporter.post(post); + } + } } |