Prevent leaking all artifacts to all actions with
ArtifactNestedSetFunction#artifactSkyKeyToSkyValue.
RELNOTES: None
PiperOrigin-RevId: 320000030
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index f53b21a..20ce194 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -1359,8 +1359,6 @@
IntFunction<S> actionInputMapSinkFactory,
AccumulateInputResultsFactory<S, R> accumulateInputResultsFactory)
throws ActionExecutionException, InterruptedException {
- Map<SkyKey, SkyValue> artifactSkyKeyToSkyValue =
- ArtifactNestedSetFunction.getInstance().getArtifactSkyKeyToSkyValue();
ImmutableList<Artifact> allInputsList = allInputs.toList();
// Some keys have more than 1 corresponding Artifact (e.g. actions with 2 outputs).
@@ -1372,7 +1370,6 @@
new ActionExecutionFunctionExceptionHandler(
skyKeyToArtifactOrSet,
inputDeps,
- artifactSkyKeyToSkyValue,
action,
mandatoryInputs,
skyframeActionExecutor);
@@ -1393,7 +1390,7 @@
Map<Artifact, Collection<Artifact>> expandedArtifacts = Maps.newHashMapWithExpectedSize(128);
for (Artifact input : allInputsList) {
- SkyValue value = artifactSkyKeyToSkyValue.get(Artifact.key(input));
+ SkyValue value = ArtifactNestedSetFunction.getInstance().getValueForKey(Artifact.key(input));
if (value instanceof MissingFileArtifactValue) {
if (actionExecutionFunctionExceptionHandler.isMandatory(input)) {
actionExecutionFunctionExceptionHandler.accumulateMissingFileArtifactValue(
@@ -1587,7 +1584,6 @@
ValueOrException3<
IOException, ActionExecutionException, ArtifactNestedSetEvalException>>
inputDeps;
- private final Map<SkyKey, SkyValue> artifactSkyKeyToSkyValue;
private final Action action;
private final Set<Artifact> mandatoryInputs;
private final SkyframeActionExecutor skyframeActionExecutor;
@@ -1602,13 +1598,11 @@
ValueOrException3<
IOException, ActionExecutionException, ArtifactNestedSetEvalException>>
inputDeps,
- Map<SkyKey, SkyValue> artifactSkyKeyToSkyValue,
Action action,
Set<Artifact> mandatoryInputs,
SkyframeActionExecutor skyframeActionExecutor) {
this.skyKeyToArtifactSet = skyKeyToArtifactSet;
this.inputDeps = inputDeps;
- this.artifactSkyKeyToSkyValue = artifactSkyKeyToSkyValue;
this.action = action;
this.mandatoryInputs = mandatoryInputs;
this.skyframeActionExecutor = skyframeActionExecutor;
@@ -1630,7 +1624,7 @@
if (key instanceof ArtifactNestedSetKey || value == null) {
continue;
}
- artifactSkyKeyToSkyValue.put(key, value);
+ ArtifactNestedSetFunction.getInstance().updateValueForKey(key, value);
} catch (IOException e) {
for (Artifact input : skyKeyToArtifactSet.get(key)) {
handleIOException(input, e);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetFunction.java
index 2d3b6d0..92eeee3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetFunction.java
@@ -189,8 +189,12 @@
artifactSkyKeyToSkyValue = Maps.newConcurrentMap();
}
- Map<SkyKey, SkyValue> getArtifactSkyKeyToSkyValue() {
- return artifactSkyKeyToSkyValue;
+ SkyValue getValueForKey(SkyKey skyKey) {
+ return artifactSkyKeyToSkyValue.get(skyKey);
+ }
+
+ void updateValueForKey(SkyKey skyKey, SkyValue skyValue) {
+ artifactSkyKeyToSkyValue.put(skyKey, skyValue);
}
@Override