diff options
author | Marian Lobur <loburm@google.com> | 2015-02-11 08:49:36 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-02-11 08:49:36 +0000 |
commit | 4e0f8560d754f021f784b3e48acb18a4ec99fd97 (patch) | |
tree | 09d928dc7668b118b70787b78309cf66427f1b23 /src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java | |
parent | cdc90e9279fdd127720cb0bf8548ce3e1b4f6042 (diff) |
Replace some calls to ArtifactFactory.resolveSourceArtifact(PathFragment execPath), with a skyframe native implementation ArtifactFactory.resolveSourceArtifact(Iterable<PathFragment> execPaths, PackageRootResolver resolver).
--
MOS_MIGRATED_REVID=86062289
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java | 20 |
1 files changed, 15 insertions, 5 deletions
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 2525c8dea8..4b970e3540 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 @@ -134,7 +134,7 @@ public class ActionCacheChecker { // Note: the handler should only be used for DEPCHECKER events; there's no // guarantee it will be available for other events. public Token getTokenIfNeedToExecute(Action action, EventHandler handler, - MetadataHandler metadataHandler) { + MetadataHandler metadataHandler, PackageRootResolver resolver) { // TODO(bazel-team): (2010) For RunfilesAction/SymlinkAction and similar actions that // produce only symlinks we should not check whether inputs are valid at all - all that matters // that inputs and outputs are still exist (and new inputs have not appeared). All other checks @@ -157,7 +157,15 @@ public class ActionCacheChecker { if (!inputsKnown) { Preconditions.checkState(action.discoversInputs()); entry = getCacheEntry(action); - updateActionInputs(action, entry); + boolean ranSuccessfully = updateActionInputs(action, entry, resolver); + // If during update of inputs skyframe was missing some dependencies (for example, + // ContainingPackageLookupValue inside of ArtifactFactory.resolveSourceArtifact), we need to + // wait for those dependencies to be resolved. So next time when we will call corresponding + // ActionExecutionFunction all those dependencies will have been resolved and we can continue + // action execution process. + if (!ranSuccessfully) { + return Token.NEED_TO_RERUN; + } } if (mustExecute(action, entry, handler, metadataHandler)) { return new Token(getKeyString(action)); @@ -220,9 +228,10 @@ public class ActionCacheChecker { actionCache.put(key, entry); } - protected void updateActionInputs(Action action, ActionCache.Entry entry) { + protected boolean updateActionInputs(Action action, ActionCache.Entry entry, + PackageRootResolver resolver) { if (entry == null || entry.isCorrupted()) { - return; + return true; } List<PathFragment> outputs = new ArrayList<>(); @@ -238,7 +247,7 @@ public class ActionCacheChecker { inputs.add(execPath); } } - action.updateInputsFromCache(artifactResolver, inputs); + return action.updateInputsFromCache(artifactResolver, resolver, inputs); } /** @@ -332,6 +341,7 @@ public class ActionCacheChecker { /** Wrapper for all context needed by the ActionCacheChecker to handle a single action. */ public static final class Token { + public static final Token NEED_TO_RERUN = new Token("need to rerun"); private final String cacheKey; private Token(String cacheKey) { |