Create a dedicated graph lookup reason for rewinding and add a wildcard to `createIfAbsentBatch` to match `getBatch`.
PiperOrigin-RevId: 452172428
Change-Id: I2ed3fbd0a92568b231aa06471ee0be1cb574f987
diff --git a/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
index 385bd2b..01e1f6b3 100644
--- a/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java
@@ -989,7 +989,7 @@
}
Map<SkyKey, ? extends NodeEntry> additionalNodesToRestart =
- evaluatorContext.getBatchValues(key, Reason.INVALIDATION, additionalKeysToRestart);
+ evaluatorContext.getBatchValues(key, Reason.REWINDING, additionalKeysToRestart);
ArrayList<SkyKey> missingNodes = null;
for (SkyKey keyToRestart : additionalKeysToRestart) {
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
index 1eafcdd..c3bf37e 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
@@ -39,7 +39,7 @@
@Override
Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys);
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys);
@Nullable
@Override
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraphImpl.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraphImpl.java
index be14b84..6d8c9e1 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraphImpl.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraphImpl.java
@@ -82,7 +82,7 @@
@Override
public Map<SkyKey, NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
Map<SkyKey, NodeEntry> result = CompactHashMap.createWithExpectedSize(Iterables.size(keys));
for (SkyKey key : keys) {
result.put(key, nodeMap.computeIfAbsent(key, newNodeEntryFunction));
diff --git a/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java b/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
index 9503244..22e0d89 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
@@ -45,7 +45,8 @@
* @param reason the reason the nodes are being requested.
*/
Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) throws InterruptedException;
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
+ throws InterruptedException;
/**
* Like {@link QueryableGraph#getBatchAsync}, except it creates a new node for each key not
diff --git a/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java b/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
index d6da81d..a620d1f 100644
--- a/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java
@@ -53,7 +53,7 @@
*/
Map<SkyKey, ? extends NodeEntry> getBatch(
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
- throws InterruptedException;
+ throws InterruptedException;
/**
* A version of {@link #getBatch} that returns an {@link InterruptibleSupplier} to possibly
@@ -154,6 +154,12 @@
DONE_CHECKING,
/**
+ * The node is being looked up so that it can be {@linkplain
+ * ThinNodeEntry.DirtyType#FORCE_REBUILD force rebuilt} by rewinding.
+ */
+ REWINDING,
+
+ /**
* The node is being looked up to service {@link WalkableGraph#getValue},
* {@link WalkableGraph#getException}, {@link WalkableGraph#getMissingAndExceptions}, or
* {@link WalkableGraph#getSuccessfulValues}.
diff --git a/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java b/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
index f9922b9..9d4d934 100644
--- a/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
+++ b/src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java
@@ -115,7 +115,7 @@
@Override
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys)
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
throws InterruptedException {
return makeDeterministic(super.createIfAbsentBatch(requestor, reason, keys));
}
diff --git a/src/test/java/com/google/devtools/build/skyframe/DeterministicInMemoryGraph.java b/src/test/java/com/google/devtools/build/skyframe/DeterministicInMemoryGraph.java
index 39b9169..29cacf9 100644
--- a/src/test/java/com/google/devtools/build/skyframe/DeterministicInMemoryGraph.java
+++ b/src/test/java/com/google/devtools/build/skyframe/DeterministicInMemoryGraph.java
@@ -30,7 +30,7 @@
@Override
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
try {
return super.createIfAbsentBatch(requestor, reason, keys);
} catch (InterruptedException e) {
diff --git a/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java b/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
index 53a3824..1426139 100644
--- a/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
+++ b/src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java
@@ -17,7 +17,6 @@
import com.google.common.base.Joiner;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Maps;
-import com.google.common.collect.Maps.EntryTransformer;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.util.GroupedList;
import com.google.devtools.build.lib.util.GroupedList.GroupedListHelper;
@@ -55,15 +54,6 @@
protected final Listener graphListener;
- protected final EntryTransformer<SkyKey, ThinNodeEntry, NodeEntry> wrapEntry =
- new EntryTransformer<SkyKey, ThinNodeEntry, NodeEntry>() {
- @Nullable
- @Override
- public NotifyingNodeEntry transformEntry(SkyKey key, @Nullable ThinNodeEntry nodeEntry) {
- return wrapEntry(key, nodeEntry);
- }
- };
-
NotifyingHelper(Listener graphListener) {
this.graphListener = new ErrorRecordingDelegatingListener(graphListener);
}
@@ -96,8 +86,7 @@
notifyingHelper.graphListener.accept(key, EventType.GET_BATCH, Order.BEFORE, reason);
}
return Maps.transformEntries(
- delegate.getBatch(requestor, reason, keys),
- notifyingHelper.wrapEntry);
+ delegate.getBatch(requestor, reason, keys), notifyingHelper::wrapEntry);
}
@Nullable
@@ -129,14 +118,13 @@
@Override
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys)
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
throws InterruptedException {
for (SkyKey key : keys) {
notifyingHelper.graphListener.accept(key, EventType.CREATE_IF_ABSENT, Order.BEFORE, null);
}
return Maps.transformEntries(
- delegate.createIfAbsentBatch(requestor, reason, keys),
- notifyingHelper.wrapEntry);
+ delegate.createIfAbsentBatch(requestor, reason, keys), notifyingHelper::wrapEntry);
}
@Override
diff --git a/src/test/java/com/google/devtools/build/skyframe/NotifyingInMemoryGraph.java b/src/test/java/com/google/devtools/build/skyframe/NotifyingInMemoryGraph.java
index 2a7ad76..1ff2a7d 100644
--- a/src/test/java/com/google/devtools/build/skyframe/NotifyingInMemoryGraph.java
+++ b/src/test/java/com/google/devtools/build/skyframe/NotifyingInMemoryGraph.java
@@ -26,7 +26,7 @@
@Override
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
+ @Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
try {
return super.createIfAbsentBatch(requestor, reason, keys);
} catch (InterruptedException e) {