Move action-cache updating to inside ActionExecutionFunction, in preparation for allowing it to be restarted in case of missing deps.
Note that this means that action-cache writing is no longer part of the ACTION_COMPLETE profiling unit.
--
MOS_MIGRATED_REVID=89702039
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
index cda9cb9..e3a8ff8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
@@ -81,6 +81,12 @@
return null;
}
+ private void removeCacheEntry(Action action) {
+ for (Artifact output : action.getOutputs()) {
+ actionCache.remove(output.getExecPathString());
+ }
+ }
+
/**
* Validate metadata state for action input or output artifacts.
*
@@ -166,6 +172,9 @@
}
}
if (mustExecute(action, entry, handler, metadataHandler, actionInputs)) {
+ if (entry != null) {
+ removeCacheEntry(action);
+ }
return new Token(getKeyString(action));
}
@@ -207,6 +216,10 @@
throws IOException {
Preconditions.checkArgument(token != null);
String key = token.cacheKey;
+ if (actionCache.get(key) != null) {
+ // This cache entry has already been updated by a shared action. We don't need to do it again.
+ return;
+ }
ActionCache.Entry entry = actionCache.createEntry(action.getKey());
for (Artifact output : action.getOutputs()) {
// Remove old records from the cache if they used different key.