aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-07-18 10:12:09 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-18 11:41:14 +0200
commit52b4f68592df562dd9f1e28208a1bde72b86a721 (patch)
treee766dd60d843a92d38bcd1fd0899460e9c440851 /src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
parent820a46af10808396873c36d0f331e533118cf0c6 (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.java31
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);
+ }
+ }
}