diff options
author | Mark Schaller <mschaller@google.com> | 2015-09-01 22:44:58 +0000 |
---|---|---|
committer | John Field <jfield@google.com> | 2015-09-02 00:58:32 +0000 |
commit | 226ce681b487a6d7aa1e1cd052ca2cc29d6f2c92 (patch) | |
tree | 57df04af8b9a4e573e384c46f5add978f9724abb /src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java | |
parent | 8299504a4976470ed69c379987bcb94b01b97195 (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.java | 49 |
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(); } |