Provide more reporting options to SkyFunctions
With more specific information to be reported by Skyfunctions, e.g.,
to inform the build-event protocol on missing files, the EventHandler
interface is no longer enough. Therefore, provide an enriched context
for reporting events.
--
Change-Id: I2d06166fe4d5b9054e24ad8c752fafc039e3f9f8
Reviewed-on: https://cr.bazel.build/8794
PiperOrigin-RevId: 148463437
MOS_MIGRATED_REVID=148463437
diff --git a/src/main/java/com/google/devtools/build/skyframe/BuildDriver.java b/src/main/java/com/google/devtools/build/skyframe/BuildDriver.java
index 654dfae..ec6ccbf 100644
--- a/src/main/java/com/google/devtools/build/skyframe/BuildDriver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/BuildDriver.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.skyframe;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.common.options.OptionsClassProvider;
import javax.annotation.Nullable;
@@ -22,11 +22,11 @@
/** A BuildDriver wraps a MemoizingEvaluator, passing along the proper Version. */
public interface BuildDriver {
/**
- * See {@link MemoizingEvaluator#evaluate}, which has the same semantics except for the
- * inclusion of a {@link Version} value.
+ * See {@link MemoizingEvaluator#evaluate}, which has the same semantics except for the inclusion
+ * of a {@link Version} value.
*/
<T extends SkyValue> EvaluationResult<T> evaluate(
- Iterable<SkyKey> roots, boolean keepGoing, int numThreads, EventHandler reporter)
+ Iterable<SkyKey> roots, boolean keepGoing, int numThreads, ExtendedEventHandler reporter)
throws InterruptedException;
/**
diff --git a/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java b/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
index c7aa46e..2a4e999 100644
--- a/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
+++ b/src/main/java/com/google/devtools/build/skyframe/CyclesReporter.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.skyframe;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.Preconditions;
/**
@@ -33,17 +33,20 @@
public interface SingleCycleReporter {
/**
- * Reports the given cycle and returns {@code true}, or return {@code false} if this
- * {@link SingleCycleReporter} doesn't know how to report the cycle.
+ * Reports the given cycle and returns {@code true}, or return {@code false} if this {@link
+ * SingleCycleReporter} doesn't know how to report the cycle.
*
* @param topLevelKey the top level key that transitively depended on the cycle
* @param cycleInfo the cycle
- * @param alreadyReported whether the cycle has already been reported to the
- * {@link CyclesReporter}.
+ * @param alreadyReported whether the cycle has already been reported to the {@link
+ * CyclesReporter}.
* @param eventHandler the eventHandler to which to report the error
*/
- boolean maybeReportCycle(SkyKey topLevelKey, CycleInfo cycleInfo, boolean alreadyReported,
- EventHandler eventHandler);
+ boolean maybeReportCycle(
+ SkyKey topLevelKey,
+ CycleInfo cycleInfo,
+ boolean alreadyReported,
+ ExtendedEventHandler eventHandler);
}
private final ImmutableList<SingleCycleReporter> cycleReporters;
@@ -64,8 +67,8 @@
* @param topLevelKey This key represents the top level value key that returned cycle errors.
* @param eventHandler the eventHandler to which to report the error
*/
- public void reportCycles(Iterable<CycleInfo> cycles, SkyKey topLevelKey,
- EventHandler eventHandler) {
+ public void reportCycles(
+ Iterable<CycleInfo> cycles, SkyKey topLevelKey, ExtendedEventHandler eventHandler) {
Preconditions.checkNotNull(eventHandler);
for (CycleInfo cycleInfo : cycles) {
boolean alreadyReported = false;
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index c0f0ed4..68998b3 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -21,7 +21,7 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.Differencer.Diff;
import com.google.devtools.build.skyframe.InvalidatingNodeVisitor.DeletingInvalidationState;
@@ -136,8 +136,12 @@
}
@Override
- public <T extends SkyValue> EvaluationResult<T> evaluate(Iterable<SkyKey> roots, Version version,
- boolean keepGoing, int numThreads, EventHandler eventHandler)
+ public <T extends SkyValue> EvaluationResult<T> evaluate(
+ Iterable<SkyKey> roots,
+ Version version,
+ boolean keepGoing,
+ int numThreads,
+ ExtendedEventHandler eventHandler)
throws InterruptedException {
// NOTE: Performance critical code. See bug "Null build performance parity".
IntVersion intVersion = (IntVersion) version;
diff --git a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
index 114ccb4..d690c4a 100644
--- a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
@@ -18,7 +18,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.collect.nestedset.NestedSetVisitor;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadHostile;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import java.io.PrintStream;
import java.util.Map;
import javax.annotation.Nullable;
@@ -49,8 +49,8 @@
Version version,
boolean keepGoing,
int numThreads,
- EventHandler reporter)
- throws InterruptedException;
+ ExtendedEventHandler reporter)
+ throws InterruptedException;
/**
* Ensures that after the next completed {@link #evaluate} call the current values of any value
diff --git a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
index d904805..34515c8 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluator.java
@@ -22,7 +22,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.util.BlazeClock;
@@ -100,7 +100,7 @@
ProcessableGraph graph,
Version graphVersion,
ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
- final EventHandler reporter,
+ final ExtendedEventHandler reporter,
EmittedEventState emittedEventState,
EventFilter storedEventFilter,
boolean keepGoing,
@@ -127,7 +127,7 @@
ProcessableGraph graph,
Version graphVersion,
ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
- final EventHandler reporter,
+ final ExtendedEventHandler reporter,
EmittedEventState emittedEventState,
EventFilter storedEventFilter,
boolean keepGoing,
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 9365ffa..49782ce 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
@@ -19,7 +19,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.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.MemoizingEvaluator.EmittedEventState;
import com.google.devtools.build.skyframe.QueryableGraph.Reason;
@@ -44,7 +44,7 @@
private final QueryableGraph graph;
private final Version graphVersion;
private final ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions;
- private final EventHandler reporter;
+ private final ExtendedEventHandler reporter;
private final NestedSetVisitor<TaggedEvents> replayingNestedSetEventVisitor;
private final boolean keepGoing;
private final boolean storeErrorsAlongsideValues;
@@ -62,7 +62,7 @@
QueryableGraph graph,
Version graphVersion,
ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
- EventHandler reporter,
+ ExtendedEventHandler reporter,
EmittedEventState emittedEventState,
boolean keepGoing,
boolean storeErrorsAlongsideValues,
@@ -95,7 +95,7 @@
QueryableGraph graph,
Version graphVersion,
ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
- EventHandler reporter,
+ ExtendedEventHandler reporter,
EmittedEventState emittedEventState,
boolean keepGoing,
boolean storeErrorsAlongsideValues,
@@ -191,7 +191,7 @@
return replayingNestedSetEventVisitor;
}
- EventHandler getReporter() {
+ ExtendedEventHandler getReporter() {
return reporter;
}
@@ -210,9 +210,9 @@
/** Receives the events from the NestedSet and delegates to the reporter. */
private static class NestedSetEventReceiver implements NestedSetVisitor.Receiver<TaggedEvents> {
- private final EventHandler reporter;
+ private final ExtendedEventHandler reporter;
- public NestedSetEventReceiver(EventHandler reporter) {
+ public NestedSetEventReceiver(ExtendedEventHandler reporter) {
this.reporter = reporter;
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
index a528dad..684db93 100644
--- a/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
@@ -15,7 +15,7 @@
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.QueryableGraph.Reason;
import java.util.Map;
@@ -27,10 +27,10 @@
*/
public class QueryableGraphBackedSkyFunctionEnvironment extends AbstractSkyFunctionEnvironment {
private final QueryableGraph queryableGraph;
- private final EventHandler eventHandler;
+ private final ExtendedEventHandler eventHandler;
public QueryableGraphBackedSkyFunctionEnvironment(
- QueryableGraph queryableGraph, EventHandler eventHandler) {
+ QueryableGraph queryableGraph, ExtendedEventHandler eventHandler) {
this.queryableGraph = queryableGraph;
this.eventHandler = eventHandler;
}
@@ -75,7 +75,7 @@
}
@Override
- public EventHandler getListener() {
+ public ExtendedEventHandler getListener() {
return eventHandler;
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
index f28a800..7f4c9fe 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SequentialBuildDriver.java
@@ -13,7 +13,7 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.common.options.OptionsClassProvider;
import javax.annotation.Nullable;
@@ -32,7 +32,7 @@
@Override
public <T extends SkyValue> EvaluationResult<T> evaluate(
- Iterable<SkyKey> roots, boolean keepGoing, int numThreads, EventHandler reporter)
+ Iterable<SkyKey> roots, boolean keepGoing, int numThreads, ExtendedEventHandler reporter)
throws InterruptedException {
try {
return memoizingEvaluator.evaluate(roots, curVersion, keepGoing, numThreads, reporter);
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java
index 6bd52c6..ee1d93c 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java
@@ -15,7 +15,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import java.util.Map;
import javax.annotation.Nullable;
@@ -267,10 +267,10 @@
boolean valuesMissing();
/**
- * Returns the {@link EventHandler} that a SkyFunction should use to print any errors,
- * warnings, or progress messages during execution of {@link SkyFunction#compute}.
+ * Returns the {@link EventHandler} that a SkyFunction should use to print any errors, warnings,
+ * or progress messages during execution of {@link SkyFunction#compute}.
*/
- EventHandler getListener();
+ ExtendedEventHandler getListener();
/** Returns whether we are currently in error bubbling. */
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
index 28fb512..93e90cd 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
@@ -27,7 +27,7 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.util.GroupedList;
import com.google.devtools.build.lib.util.GroupedList.GroupedListHelper;
@@ -479,7 +479,7 @@
}
@Override
- public EventHandler getListener() {
+ public ExtendedEventHandler getListener() {
checkActive();
return eventHandler;
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java b/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
index 8f3dd04..5b98079 100644
--- a/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
@@ -14,7 +14,7 @@
package com.google.devtools.build.skyframe;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.skyframe.QueryableGraph.Reason;
import java.util.Collection;
import java.util.Map;
@@ -99,7 +99,8 @@
/** Provides a WalkableGraph on demand after preparing it. */
interface WalkableGraphFactory {
EvaluationResult<SkyValue> prepareAndGet(
- SkyKey universeKey, int numThreads, EventHandler eventHandler) throws InterruptedException;
+ SkyKey universeKey, int numThreads, ExtendedEventHandler eventHandler)
+ throws InterruptedException;
/**
* Returns true if this instance has already been used to {@link #prepareAndGet} {@code