diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java | 70 |
1 files changed, 49 insertions, 21 deletions
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 38604ed50d..972d020e3b 100644 --- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java +++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java @@ -39,7 +39,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; - import javax.annotation.Nullable; /** @@ -112,13 +111,16 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { @Override public void delete(final Predicate<SkyKey> deletePredicate) { valuesToDelete.addAll( - Maps.filterEntries(graph.getAllValues(), new Predicate<Entry<SkyKey, NodeEntry>>() { - @Override - public boolean apply(Entry<SkyKey, NodeEntry> input) { - Preconditions.checkNotNull(input.getKey(), "Null SkyKey in entry: %s", input); - return input.getValue().isDirty() || deletePredicate.apply(input.getKey()); - } - }).keySet()); + Maps.filterEntries( + graph.getAllValues(), + new Predicate<Entry<SkyKey, ? extends NodeEntry>>() { + @Override + public boolean apply(Entry<SkyKey, ? extends NodeEntry> input) { + Preconditions.checkNotNull(input.getKey(), "Null SkyKey in entry: %s", input); + return input.getValue().isDirty() || deletePredicate.apply(input.getKey()); + } + }) + .keySet()); } @Override @@ -209,12 +211,18 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { SkyValue newValue = entry.getValue(); NodeEntry prevEntry = graph.get(null, Reason.OTHER, key); if (prevEntry != null && prevEntry.isDone()) { - Iterable<SkyKey> directDeps = prevEntry.getDirectDeps(); - Preconditions.checkState(Iterables.isEmpty(directDeps), - "existing entry for %s has deps: %s", key, directDeps); - if (newValue.equals(prevEntry.getValue()) - && !valuesToDirty.contains(key) && !valuesToDelete.contains(key)) { - it.remove(); + try { + Iterable<SkyKey> directDeps = prevEntry.getDirectDeps(); + Preconditions.checkState( + Iterables.isEmpty(directDeps), "existing entry for %s has deps: %s", key, directDeps); + if (newValue.equals(prevEntry.getValue()) + && !valuesToDirty.contains(key) + && !valuesToDelete.contains(key)) { + it.remove(); + } + } catch (InterruptedException e) { + throw new IllegalStateException( + "InMemoryGraph does not throw: " + entry + ", " + prevEntry, e); } } } @@ -227,7 +235,11 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { if (valuesToInject.isEmpty()) { return; } - ParallelEvaluator.injectValues(valuesToInject, version, graph, dirtyKeyTracker); + try { + ParallelEvaluator.injectValues(valuesToInject, version, graph, dirtyKeyTracker); + } catch (InterruptedException e) { + throw new IllegalStateException("InMemoryGraph doesn't throw interrupts", e); + } // Start with a new map to avoid bloat since clear() does not downsize the map. valuesToInject = new HashMap<>(); } @@ -268,13 +280,21 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { @Override @Nullable public SkyValue getExistingValueForTesting(SkyKey key) { NodeEntry entry = getExistingEntryForTesting(key); - return isDone(entry) ? entry.getValue() : null; + try { + return isDone(entry) ? entry.getValue() : null; + } catch (InterruptedException e) { + throw new IllegalStateException("InMemoryGraph does not throw" + key + ", " + entry, e); + } } @Override @Nullable public ErrorInfo getExistingErrorForTesting(SkyKey key) { NodeEntry entry = getExistingEntryForTesting(key); - return isDone(entry) ? entry.getErrorInfo() : null; + try { + return isDone(entry) ? entry.getErrorInfo() : null; + } catch (InterruptedException e) { + throw new IllegalStateException("InMemoryGraph does not throw" + key + ", " + entry, e); + } } @Nullable @@ -300,7 +320,11 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { for (NodeEntry entry : graph.getAllValues().values()) { nodes++; if (entry.isDone()) { - edges += Iterables.size(entry.getDirectDeps()); + try { + edges += Iterables.size(entry.getDirectDeps()); + } catch (InterruptedException e) { + throw new IllegalStateException("InMemoryGraph doesn't throw: " + entry, e); + } } } out.println("Node count: " + nodes); @@ -315,14 +339,18 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { } }; - for (Entry<SkyKey, NodeEntry> mapPair : graph.getAllValues().entrySet()) { + for (Entry<SkyKey, ? extends NodeEntry> mapPair : graph.getAllValues().entrySet()) { SkyKey key = mapPair.getKey(); NodeEntry entry = mapPair.getValue(); if (entry.isDone()) { out.print(keyFormatter.apply(key)); out.print("|"); - out.println(Joiner.on('|').join( - Iterables.transform(entry.getDirectDeps(), keyFormatter))); + try { + out.println( + Joiner.on('|').join(Iterables.transform(entry.getDirectDeps(), keyFormatter))); + } catch (InterruptedException e) { + throw new IllegalStateException("InMemoryGraph doesn't throw: " + entry, e); + } } } } |