Make PackageLookupFunction hermetic. It was only non-hermetic because of deleted packages, and we can just aggressively delete the nodes in that case.
PiperOrigin-RevId: 228225515
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index 074f43f..e563a5a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -17,6 +17,7 @@
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -355,7 +356,7 @@
for (PackageIdentifier deletedPackage : deletedPackages) {
packagesToInvalidate.add(PackageLookupValue.key(deletedPackage));
}
- recordingDiffer.invalidate(packagesToInvalidate);
+ memoizingEvaluator.delete(Predicates.in(packagesToInvalidate));
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
index ae534ae..7673297 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
@@ -38,9 +38,10 @@
SkyFunctionName.createHermetic("FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS");
public static final SkyFunctionName DIRECTORY_LISTING =
SkyFunctionName.createHermetic("DIRECTORY_LISTING");
- // Non-hermetic because unfortunately package lookups secretly access the set of deleted packages.
+ // Hermetic even though package lookups secretly access the set of deleted packages, becaused
+ // SequencedSkyframeExecutor deletes any affected PACKAGE_LOOKUP nodes when that set changes.
public static final SkyFunctionName PACKAGE_LOOKUP =
- SkyFunctionName.createNonHermetic("PACKAGE_LOOKUP");
+ SkyFunctionName.createHermetic("PACKAGE_LOOKUP");
public static final SkyFunctionName CONTAINING_PACKAGE_LOOKUP =
SkyFunctionName.createHermetic("CONTAINING_PACKAGE_LOOKUP");
// Non-hermetic because accesses the package locator. Also does disk access.