Add ActionKeyContext to Action#getKey.
This key context can be used by actions to share partial key computations, for instance when computing MD5s for nested sets.
RELNOTES: None
PiperOrigin-RevId: 177359607
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java
index fecdcca..3fdb7a0 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunctionTest.java
@@ -23,6 +23,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionInputHelper;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
@@ -83,7 +84,8 @@
.put(SkyFunctions.ARTIFACT, new DummyArtifactFunction(artifactValueMap))
.put(
SkyFunctions.ACTION_TEMPLATE_EXPANSION,
- new ActionTemplateExpansionFunction(Suppliers.ofInstance(false)))
+ new ActionTemplateExpansionFunction(
+ new ActionKeyContext(), Suppliers.ofInstance(false)))
.build(),
differencer);
driver = new SequentialBuildDriver(evaluator);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index 0ab2a6b..4004e85 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -436,7 +436,8 @@
differencer.inject(
ImmutableMap.of(
OWNER_KEY,
- new ActionLookupValue(ImmutableList.<ActionAnalysisMetadata>copyOf(actions), false)));
+ new ActionLookupValue(
+ actionKeyContext, ImmutableList.<ActionAnalysisMetadata>copyOf(actions), false)));
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index dd504a5..ff83c4a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -17,6 +17,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionLookupValue.ActionLookupKey;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.ServerDirectories;
@@ -59,6 +60,7 @@
protected MemoizingEvaluator evaluator;
protected Path root;
protected Path middlemanPath;
+ protected final ActionKeyContext actionKeyContext = new ActionKeyContext();
/**
* The test action execution function. The Skyframe evaluator's action execution function
@@ -116,7 +118,8 @@
.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
.put(
SkyFunctions.ACTION_TEMPLATE_EXPANSION,
- new ActionTemplateExpansionFunction(Suppliers.ofInstance(false)))
+ new ActionTemplateExpansionFunction(
+ actionKeyContext, Suppliers.ofInstance(false)))
.build(),
differencer);
driver = new SequentialBuildDriver(evaluator);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
index db441e7..015b1f3 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Executor;
@@ -207,7 +208,7 @@
}
@Override
- protected String computeKey() {
+ protected String computeKey(ActionKeyContext actionKeyContext) {
return getPrimaryOutput().getExecPathString() + executionCounter.get();
}
}
@@ -651,7 +652,7 @@
}
@Override
- protected String computeKey() {
+ protected String computeKey(ActionKeyContext actionKeyContext) {
return new Fingerprint().addInt(42).hexDigestAndReset();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index 0969d5f..a6b2483 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -34,6 +34,7 @@
import com.google.devtools.build.lib.actions.ActionExecutionStatusReporter;
import com.google.devtools.build.lib.actions.ActionInputFileCache;
import com.google.devtools.build.lib.actions.ActionInputPrefetcher;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionLogBufferPathGenerator;
import com.google.devtools.build.lib.actions.ActionLookupData;
import com.google.devtools.build.lib.actions.ActionLookupValue;
@@ -121,6 +122,7 @@
private Set<ActionAnalysisMetadata> actions;
protected AtomicReference<EventBus> eventBusRef = new AtomicReference<>();
+ protected final ActionKeyContext actionKeyContext = new ActionKeyContext();
@Before
public final void initialize() throws Exception {
@@ -129,7 +131,7 @@
ResourceManager.instance().setAvailableResources(ResourceSet.createWithRamCpuIo(100, 1, 1));
actions = new HashSet<>();
actionTemplateExpansionFunction =
- new ActionTemplateExpansionFunction(Suppliers.ofInstance(false));
+ new ActionTemplateExpansionFunction(actionKeyContext, Suppliers.ofInstance(false));
}
protected void clearActions() {
@@ -180,7 +182,8 @@
ActionExecutionStatusReporter statusReporter =
ActionExecutionStatusReporter.create(new StoredEventHandler());
final SkyframeActionExecutor skyframeActionExecutor =
- new SkyframeActionExecutor(eventBusRef, new AtomicReference<>(statusReporter));
+ new SkyframeActionExecutor(
+ actionKeyContext, eventBusRef, new AtomicReference<>(statusReporter));
Path actionOutputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/action_out/");
skyframeActionExecutor.setActionLogBufferPathGenerator(
@@ -238,7 +241,8 @@
if (evaluator.getExistingValue(OWNER_KEY) == null) {
differencer.inject(
ImmutableMap.of(
- OWNER_KEY, new ActionLookupValue(ImmutableList.copyOf(actions), false)));
+ OWNER_KEY,
+ new ActionLookupValue(actionKeyContext, ImmutableList.copyOf(actions), false)));
}
}
@@ -263,7 +267,8 @@
executor,
keepGoing,
/*explain=*/ false,
- new ActionCacheChecker(actionCache, null, ALWAYS_EXECUTE_FILTER, null),
+ new ActionCacheChecker(
+ actionCache, null, actionKeyContext, ALWAYS_EXECUTE_FILTER, null),
null);
skyframeActionExecutor.setActionExecutionProgressReportingObjects(
EMPTY_PROGRESS_SUPPLIER, EMPTY_COMPLETION_RECEIVER);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
index fac36eb..6c15a1f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java
@@ -34,6 +34,7 @@
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputFileCache;
import com.google.devtools.build.lib.actions.ActionInputHelper;
+import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
@@ -742,10 +743,12 @@
Action noGenerateOutputAction = new DummyAction(
ImmutableList.<Artifact>of(treeFileArtifactB), expectedOutputTreeFileArtifact2);
- actionTemplateExpansionFunction = new DummyActionTemplateExpansionFunction(
- ImmutableMultimap.<ActionTemplate<?>, Action>of(
- actionTemplate, generateOutputAction,
- actionTemplate, noGenerateOutputAction));
+ actionTemplateExpansionFunction =
+ new DummyActionTemplateExpansionFunction(
+ actionKeyContext,
+ ImmutableMultimap.<ActionTemplate<?>, Action>of(
+ actionTemplate, generateOutputAction,
+ actionTemplate, noGenerateOutputAction));
buildArtifact(artifact2);
}
@@ -782,10 +785,12 @@
ImmutableList.<Artifact>of(treeFileArtifactB),
ImmutableList.<Artifact>of(expectedOutputTreeFileArtifact2));
- actionTemplateExpansionFunction = new DummyActionTemplateExpansionFunction(
- ImmutableMultimap.<ActionTemplate<?>, Action>of(
- actionTemplate, generateOutputAction,
- actionTemplate, noGenerateOutputAction));
+ actionTemplateExpansionFunction =
+ new DummyActionTemplateExpansionFunction(
+ actionKeyContext,
+ ImmutableMultimap.<ActionTemplate<?>, Action>of(
+ actionTemplate, generateOutputAction,
+ actionTemplate, noGenerateOutputAction));
try {
buildArtifact(artifact2);
@@ -826,11 +831,13 @@
Action throwingAction = new ThrowingDummyAction(
ImmutableList.<Artifact>of(treeFileArtifactB),
ImmutableList.<Artifact>of(expectedOutputTreeFileArtifact2));
-
- actionTemplateExpansionFunction = new DummyActionTemplateExpansionFunction(
- ImmutableMultimap.<ActionTemplate<?>, Action>of(
- actionTemplate, generateOutputAction,
- actionTemplate, throwingAction));
+
+ actionTemplateExpansionFunction =
+ new DummyActionTemplateExpansionFunction(
+ actionKeyContext,
+ ImmutableMultimap.<ActionTemplate<?>, Action>of(
+ actionTemplate, generateOutputAction,
+ actionTemplate, throwingAction));
try {
buildArtifact(artifact2);
@@ -870,11 +877,13 @@
Action anotherThrowingAction = new ThrowingDummyAction(
ImmutableList.<Artifact>of(treeFileArtifactB),
ImmutableList.<Artifact>of(expectedOutputTreeFileArtifact2));
-
- actionTemplateExpansionFunction = new DummyActionTemplateExpansionFunction(
- ImmutableMultimap.<ActionTemplate<?>, Action>of(
- actionTemplate, throwingAction,
- actionTemplate, anotherThrowingAction));
+
+ actionTemplateExpansionFunction =
+ new DummyActionTemplateExpansionFunction(
+ actionKeyContext,
+ ImmutableMultimap.<ActionTemplate<?>, Action>of(
+ actionTemplate, throwingAction,
+ actionTemplate, anotherThrowingAction));
try {
buildArtifact(artifact2);
@@ -1217,10 +1226,13 @@
/** A dummy action template expansion function that just returns the injected actions */
private static class DummyActionTemplateExpansionFunction implements SkyFunction {
+ private final ActionKeyContext actionKeyContext;
private final Multimap<ActionTemplate<?>, Action> actionTemplateToActionMap;
DummyActionTemplateExpansionFunction(
+ ActionKeyContext actionKeyContext,
Multimap<ActionTemplate<?>, Action> actionTemplateToActionMap) {
+ this.actionKeyContext = actionKeyContext;
this.actionTemplateToActionMap = actionTemplateToActionMap;
}
@@ -1229,7 +1241,9 @@
ActionTemplateExpansionKey key = (ActionTemplateExpansionKey) skyKey.argument();
ActionTemplate<?> actionTemplate = key.getActionTemplate();
return new ActionTemplateExpansionValue(
- Preconditions.checkNotNull(actionTemplateToActionMap.get(actionTemplate)), false);
+ actionKeyContext,
+ Preconditions.checkNotNull(actionTemplateToActionMap.get(actionTemplate)),
+ false);
}
@Override
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
index 54b4e48..3e156be 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
@@ -228,7 +228,8 @@
differencer.inject(
ImmutableMap.of(
OWNER_KEY,
- new ActionLookupValue(ImmutableList.<ActionAnalysisMetadata>copyOf(actions), false)));
+ new ActionLookupValue(
+ actionKeyContext, ImmutableList.<ActionAnalysisMetadata>copyOf(actions), false)));
}
}