aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/extra
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2015-03-18 21:59:16 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-03-20 14:32:58 +0000
commita7c84b508c3c0a31e589de0de006b6cb9b7fd515 (patch)
tree11338ff270a4d9a0b319ab10dfbfa97244ac4d4f /src/main/java/com/google/devtools/build/lib/rules/extra
parentbedbc441984d8a8dbf623b9a7669a4692eeeefff (diff)
Delay updating inputs of an action when processing the action cache until it is known that the action is a cache hit.
This adds momentary memory overhead when checking the action cache, but should prevent a host of potential errors. Note that this cl assumes that an action that discovers its inputs does *not* take the names of its inputs into account when calculating its key, which is already stated as part of the javadoc of Action#getKey. -- MOS_MIGRATED_REVID=88971626
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/extra')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java
index a1f82a9785..343b44302c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java
@@ -152,28 +152,26 @@ public final class ExtraAction extends SpawnAction {
return result.addAll(extraActionInputs).build();
}
- private void updateInputs(Iterable<Artifact> shadowedActionInputs) {
+ @Override
+ public void updateInputs(Iterable<Artifact> shadowedActionInputs) {
+ shadowedAction.updateInputs(shadowedActionInputs);
+ Preconditions.checkArgument(shadowedAction.inputsKnown(), "%s %s", this, shadowedAction);
synchronized (this) {
setInputs(createInputs(shadowedActionInputs, extraActionInputs));
inputsKnown = true;
}
}
+ @Nullable
@Override
- public boolean updateInputsFromCache(ArtifactResolver artifactResolver,
+ public Iterable<Artifact> resolveInputsFromCache(ArtifactResolver artifactResolver,
PackageRootResolver resolver, Collection<PathFragment> inputPaths) {
// We update the inputs directly from the shadowed action.
Set<PathFragment> extraActionPathFragments =
ImmutableSet.copyOf(Artifact.asPathFragments(extraActionInputs));
- boolean noMissingDependencies = shadowedAction.updateInputsFromCache(artifactResolver, resolver,
+ return shadowedAction.resolveInputsFromCache(artifactResolver,
+ resolver,
Collections2.filter(inputPaths, Predicates.in(extraActionPathFragments)));
- if (!noMissingDependencies) {
- // This update needs to be rerun.
- return false;
- }
- Preconditions.checkState(shadowedAction.inputsKnown(), "%s %s", this, shadowedAction);
- updateInputs(shadowedAction.getInputs());
- return true;
}
/**