Skyframe changes to support SpawnActionTemplate.
1. Adds ActionTemplateExpansion{Function, Value} for ActionTemplate expansion.
2. Changes ArtifactFunction to support evaluating TreeFileArtifacts and TreeArtifacts generated by ActionTemplate.
--
MOS_MIGRATED_REVID=124160939
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
index 28f7d0c..a72ef48 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
@@ -103,16 +103,6 @@
new ConcurrentHashMap<>();
/**
- * Contains per-fragment FileArtifactValues when those values must be stored separately.
- * Bona-fide Artifacts are stored in {@link #additionalOutputData} instead.
- * See {@link #getAdditionalOutputData()} for details.
- * Unlike additionalOutputData, this map is discarded (the relevant FileArtifactValues
- * are stored in outputTreeArtifactData's values instead).
- */
- private final ConcurrentMap<TreeFileArtifact, FileArtifactValue> cachedTreeFileArtifactData =
- new ConcurrentHashMap<>();
-
- /**
* Data for TreeArtifactValues, constructed from outputArtifactData and
* additionalOutputFileData.
*/
@@ -287,8 +277,7 @@
// We are dealing with artifacts inside a tree artifact.
FileArtifactValue value =
FileArtifactValue.createWithDigest(artifact.getPath(), injectedDigest, data.getSize());
- FileArtifactValue oldValue = cachedTreeFileArtifactData.putIfAbsent(
- (TreeFileArtifact) artifact, value);
+ FileArtifactValue oldValue = additionalOutputData.putIfAbsent(artifact, value);
checkInconsistentData(artifact, oldValue, value);
return new Metadata(value.getDigest());
}
@@ -375,7 +364,7 @@
Maps.newHashMapWithExpectedSize(contents.size());
for (TreeFileArtifact treeFileArtifact : contents) {
- FileArtifactValue cachedValue = cachedTreeFileArtifactData.get(treeFileArtifact);
+ FileArtifactValue cachedValue = additionalOutputData.get(treeFileArtifact);
if (cachedValue == null) {
FileValue fileValue = outputArtifactData.get(treeFileArtifact);
// This is similar to what's present in getRealMetadataForArtifact, except
@@ -385,11 +374,11 @@
if (fileValue == null) {
fileValue = constructFileValue(treeFileArtifact, /*statNoFollow=*/ null);
// A minor hack: maybeStoreAdditionalData will force the data to be stored
- // in cachedTreeFileArtifactData.
+ // in additionalOutputData.
maybeStoreAdditionalData(treeFileArtifact, fileValue, null);
}
cachedValue = Preconditions.checkNotNull(
- cachedTreeFileArtifactData.get(treeFileArtifact), treeFileArtifact);
+ additionalOutputData.get(treeFileArtifact), treeFileArtifact);
}
values.put(treeFileArtifact, cachedValue);
@@ -500,7 +489,6 @@
outputDirectoryListings.clear();
outputTreeArtifactData.clear();
additionalOutputData.clear();
- cachedTreeFileArtifactData.clear();
}
@Override