Add a "nonce version" fingerprint to ActionLookupValue, potentially populated for the ActionLookupValues that need it: *ConfiguredTargetValue and AspectValue. These need it because they contain objects that use reference equality for comparisons (notably, CcLinkingParams). Following an idea coming from shahan@.
PiperOrigin-RevId: 231319823
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 8115236..bebbc06 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -79,6 +79,7 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.ValueOrException;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -88,6 +89,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Semaphore;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
@@ -136,6 +138,8 @@
private final Semaphore cpuBoundSemaphore;
private final BuildOptions defaultBuildOptions;
@Nullable private final ConfiguredTargetProgressReceiver configuredTargetProgress;
+ private final Supplier<BigInteger> nonceVersion;
+
/**
* Indicates whether the set of packages transitively loaded for a given {@link
* ConfiguredTargetValue} will be needed for package root resolution later in the build. If not,
@@ -152,7 +156,8 @@
boolean storeTransitivePackagesForPackageRootResolution,
boolean shouldUnblockCpuWorkWhenFetchingDeps,
BuildOptions defaultBuildOptions,
- @Nullable ConfiguredTargetProgressReceiver configuredTargetProgress) {
+ @Nullable ConfiguredTargetProgressReceiver configuredTargetProgress,
+ Supplier<BigInteger> nonceVersion) {
this.buildViewProvider = buildViewProvider;
this.ruleClassProvider = ruleClassProvider;
this.cpuBoundSemaphore = cpuBoundSemaphore;
@@ -161,6 +166,7 @@
this.shouldUnblockCpuWorkWhenFetchingDeps = shouldUnblockCpuWorkWhenFetchingDeps;
this.defaultBuildOptions = defaultBuildOptions;
this.configuredTargetProgress = configuredTargetProgress;
+ this.nonceVersion = nonceVersion;
}
@Override
@@ -831,7 +837,8 @@
ruleConfiguredTarget,
transitivePackagesForPackageRootResolution == null
? null
- : transitivePackagesForPackageRootResolution.build());
+ : transitivePackagesForPackageRootResolution.build(),
+ nonceVersion.get());
} else {
GeneratingActions generatingActions;
// Check for conflicting actions within this configured target (that indicates a bug in the
@@ -849,7 +856,8 @@
generatingActions,
transitivePackagesForPackageRootResolution == null
? null
- : transitivePackagesForPackageRootResolution.build());
+ : transitivePackagesForPackageRootResolution.build(),
+ nonceVersion.get());
}
}