aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
diff options
context:
space:
mode:
authorGravatar Mark Schaller <mschaller@google.com>2015-09-01 22:44:58 +0000
committerGravatar John Field <jfield@google.com>2015-09-02 00:58:32 +0000
commit226ce681b487a6d7aa1e1cd052ca2cc29d6f2c92 (patch)
tree57df04af8b9a4e573e384c46f5add978f9724abb /src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
parent8299504a4976470ed69c379987bcb94b01b97195 (diff)
Refactor NodeEntry, create node representation without a value
This CL introduces a ThinNodeEntry, which is a NodeEntry without the means of accessing its value. The InvalidatingNodeVisitor does not need to access nodes' values while doing its work, so it is provided with a ThinNodeQueryableGraph, capable of producing only ThinNodeEntries. -- MOS_MIGRATED_REVID=102088111
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java49
1 files changed, 31 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java b/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
index cfe03e2fc6..6e553be7b6 100644
--- a/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
@@ -44,18 +44,22 @@ public final class EagerInvalidator {
public static void delete(DirtiableGraph graph, Iterable<SkyKey> diff,
EvaluationProgressReceiver invalidationReceiver, InvalidationState state,
boolean traverseGraph, DirtyKeyTracker dirtyKeyTracker) throws InterruptedException {
- InvalidatingNodeVisitor visitor =
- createDeletingVisitorIfNeeded(graph, diff, invalidationReceiver, state, traverseGraph,
- dirtyKeyTracker);
+ DeletingNodeVisitor visitor =
+ createDeletingVisitorIfNeeded(
+ graph, diff, invalidationReceiver, state, traverseGraph, dirtyKeyTracker);
if (visitor != null) {
visitor.run();
}
}
@Nullable
- static InvalidatingNodeVisitor createDeletingVisitorIfNeeded(DirtiableGraph graph,
- Iterable<SkyKey> diff, EvaluationProgressReceiver invalidationReceiver,
- InvalidationState state, boolean traverseGraph, DirtyKeyTracker dirtyKeyTracker) {
+ static DeletingNodeVisitor createDeletingVisitorIfNeeded(
+ DirtiableGraph graph,
+ Iterable<SkyKey> diff,
+ EvaluationProgressReceiver invalidationReceiver,
+ InvalidationState state,
+ boolean traverseGraph,
+ DirtyKeyTracker dirtyKeyTracker) {
state.update(diff);
return state.isEmpty() ? null
: new DeletingNodeVisitor(graph, invalidationReceiver, state, traverseGraph,
@@ -63,9 +67,12 @@ public final class EagerInvalidator {
}
@Nullable
- static InvalidatingNodeVisitor createInvalidatingVisitorIfNeeded(DirtiableGraph graph,
- Iterable<SkyKey> diff, EvaluationProgressReceiver invalidationReceiver,
- InvalidationState state, DirtyKeyTracker dirtyKeyTracker,
+ static DirtyingNodeVisitor createInvalidatingVisitorIfNeeded(
+ ThinNodeQueryableGraph graph,
+ Iterable<SkyKey> diff,
+ EvaluationProgressReceiver invalidationReceiver,
+ InvalidationState state,
+ DirtyKeyTracker dirtyKeyTracker,
Function<ThreadPoolExecutorParams, ThreadPoolExecutor> executorFactory) {
state.update(diff);
return state.isEmpty() ? null
@@ -74,9 +81,12 @@ public final class EagerInvalidator {
}
@Nullable
- static InvalidatingNodeVisitor createInvalidatingVisitorIfNeeded(DirtiableGraph graph,
- Iterable<SkyKey> diff, EvaluationProgressReceiver invalidationReceiver,
- InvalidationState state, DirtyKeyTracker dirtyKeyTracker) {
+ static DirtyingNodeVisitor createInvalidatingVisitorIfNeeded(
+ DirtiableGraph graph,
+ Iterable<SkyKey> diff,
+ EvaluationProgressReceiver invalidationReceiver,
+ InvalidationState state,
+ DirtyKeyTracker dirtyKeyTracker) {
return createInvalidatingVisitorIfNeeded(graph, diff, invalidationReceiver, state,
dirtyKeyTracker, AbstractQueueVisitor.EXECUTOR_FACTORY);
}
@@ -85,18 +95,21 @@ public final class EagerInvalidator {
* Invalidates given values and their upward transitive closure in the graph, using an executor
* constructed with the provided factory, if necessary.
*/
- public static void invalidate(DirtiableGraph graph, Iterable<SkyKey> diff,
- EvaluationProgressReceiver invalidationReceiver, InvalidationState state,
+ public static void invalidate(
+ ThinNodeQueryableGraph graph,
+ Iterable<SkyKey> diff,
+ EvaluationProgressReceiver invalidationReceiver,
+ InvalidationState state,
DirtyKeyTracker dirtyKeyTracker,
Function<ThreadPoolExecutorParams, ThreadPoolExecutor> executorFactory)
- throws InterruptedException {
+ throws InterruptedException {
// If we are invalidating, we must be in an incremental build by definition, so we must
// maintain a consistent graph state by traversing the graph and invalidating transitive
// dependencies. If edges aren't present, it would be impossible to check the dependencies of
// a dirty node in any case.
- InvalidatingNodeVisitor visitor =
- createInvalidatingVisitorIfNeeded(graph, diff, invalidationReceiver, state,
- dirtyKeyTracker, executorFactory);
+ DirtyingNodeVisitor visitor =
+ createInvalidatingVisitorIfNeeded(
+ graph, diff, invalidationReceiver, state, dirtyKeyTracker, executorFactory);
if (visitor != null) {
visitor.run();
}