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.