Skip to content

Commit a0a0d09

Browse files
justinhorvitzcopybara-github
authored andcommitted
Create a dedicated graph lookup reason for rewinding and add a wildcard to createIfAbsentBatch to match getBatch.
PiperOrigin-RevId: 452172428 Change-Id: I2ed3fbd0a92568b231aa06471ee0be1cb574f987
1 parent 93f6e51 commit a0a0d09

File tree

9 files changed

+18
-23
lines changed

9 files changed

+18
-23
lines changed

src/main/java/com/google/devtools/build/skyframe/AbstractParallelEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -989,7 +989,7 @@ private boolean maybeHandleRestart(SkyKey key, NodeEntry entry, SkyValue returne
989989
}
990990

991991
Map<SkyKey, ? extends NodeEntry> additionalNodesToRestart =
992-
evaluatorContext.getBatchValues(key, Reason.INVALIDATION, additionalKeysToRestart);
992+
evaluatorContext.getBatchValues(key, Reason.REWINDING, additionalKeysToRestart);
993993

994994
ArrayList<SkyKey> missingNodes = null;
995995
for (SkyKey keyToRestart : additionalKeysToRestart) {

src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static InMemoryGraph createEdgeless() {
3939

4040
@Override
4141
Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
42-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys);
42+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys);
4343

4444
@Nullable
4545
@Override

src/main/java/com/google/devtools/build/skyframe/InMemoryGraphImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected InMemoryNodeEntry newNodeEntry(SkyKey key) {
8282

8383
@Override
8484
public Map<SkyKey, NodeEntry> createIfAbsentBatch(
85-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
85+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
8686
Map<SkyKey, NodeEntry> result = CompactHashMap.createWithExpectedSize(Iterables.size(keys));
8787
for (SkyKey key : keys) {
8888
result.put(key, nodeMap.computeIfAbsent(key, newNodeEntryFunction));

src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public interface ProcessableGraph extends QueryableGraph {
4545
* @param reason the reason the nodes are being requested.
4646
*/
4747
Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
48-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) throws InterruptedException;
48+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
49+
throws InterruptedException;
4950

5051
/**
5152
* Like {@link QueryableGraph#getBatchAsync}, except it creates a new node for each key not

src/main/java/com/google/devtools/build/skyframe/QueryableGraph.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public interface QueryableGraph {
5353
*/
5454
Map<SkyKey, ? extends NodeEntry> getBatch(
5555
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
56-
throws InterruptedException;
56+
throws InterruptedException;
5757

5858
/**
5959
* A version of {@link #getBatch} that returns an {@link InterruptibleSupplier} to possibly
@@ -153,6 +153,12 @@ enum Reason {
153153
/** The node is being looked up merely to see if it is done or not. */
154154
DONE_CHECKING,
155155

156+
/**
157+
* The node is being looked up so that it can be {@linkplain
158+
* ThinNodeEntry.DirtyType#FORCE_REBUILD force rebuilt} by rewinding.
159+
*/
160+
REWINDING,
161+
156162
/**
157163
* The node is being looked up to service {@link WalkableGraph#getValue},
158164
* {@link WalkableGraph#getException}, {@link WalkableGraph#getMissingAndExceptions}, or

src/test/java/com/google/devtools/build/skyframe/DeterministicHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public void remove(SkyKey key) {
115115

116116
@Override
117117
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
118-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys)
118+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
119119
throws InterruptedException {
120120
return makeDeterministic(super.createIfAbsentBatch(requestor, reason, keys));
121121
}

src/test/java/com/google/devtools/build/skyframe/DeterministicInMemoryGraph.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class DeterministicInMemoryGraph extends DeterministicHelper.DeterministicProces
3030

3131
@Override
3232
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
33-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
33+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
3434
try {
3535
return super.createIfAbsentBatch(requestor, reason, keys);
3636
} catch (InterruptedException e) {

src/test/java/com/google/devtools/build/skyframe/NotifyingHelper.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.google.common.base.Joiner;
1818
import com.google.common.base.MoreObjects;
1919
import com.google.common.collect.Maps;
20-
import com.google.common.collect.Maps.EntryTransformer;
2120
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
2221
import com.google.devtools.build.lib.util.GroupedList;
2322
import com.google.devtools.build.lib.util.GroupedList.GroupedListHelper;
@@ -55,15 +54,6 @@ public ProcessableGraph transform(ProcessableGraph graph) {
5554

5655
protected final Listener graphListener;
5756

58-
protected final EntryTransformer<SkyKey, ThinNodeEntry, NodeEntry> wrapEntry =
59-
new EntryTransformer<SkyKey, ThinNodeEntry, NodeEntry>() {
60-
@Nullable
61-
@Override
62-
public NotifyingNodeEntry transformEntry(SkyKey key, @Nullable ThinNodeEntry nodeEntry) {
63-
return wrapEntry(key, nodeEntry);
64-
}
65-
};
66-
6757
NotifyingHelper(Listener graphListener) {
6858
this.graphListener = new ErrorRecordingDelegatingListener(graphListener);
6959
}
@@ -96,8 +86,7 @@ static class NotifyingQueryableGraph implements QueryableGraph {
9686
notifyingHelper.graphListener.accept(key, EventType.GET_BATCH, Order.BEFORE, reason);
9787
}
9888
return Maps.transformEntries(
99-
delegate.getBatch(requestor, reason, keys),
100-
notifyingHelper.wrapEntry);
89+
delegate.getBatch(requestor, reason, keys), notifyingHelper::wrapEntry);
10190
}
10291

10392
@Nullable
@@ -129,14 +118,13 @@ public void remove(SkyKey key) {
129118

130119
@Override
131120
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
132-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys)
121+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys)
133122
throws InterruptedException {
134123
for (SkyKey key : keys) {
135124
notifyingHelper.graphListener.accept(key, EventType.CREATE_IF_ABSENT, Order.BEFORE, null);
136125
}
137126
return Maps.transformEntries(
138-
delegate.createIfAbsentBatch(requestor, reason, keys),
139-
notifyingHelper.wrapEntry);
127+
delegate.createIfAbsentBatch(requestor, reason, keys), notifyingHelper::wrapEntry);
140128
}
141129

142130
@Override

src/test/java/com/google/devtools/build/skyframe/NotifyingInMemoryGraph.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class NotifyingInMemoryGraph extends NotifyingHelper.NotifyingProcessableGraph
2626

2727
@Override
2828
public Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
29-
@Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
29+
@Nullable SkyKey requestor, Reason reason, Iterable<? extends SkyKey> keys) {
3030
try {
3131
return super.createIfAbsentBatch(requestor, reason, keys);
3232
} catch (InterruptedException e) {

0 commit comments

Comments
 (0)