diff options
author | 2017-07-21 13:58:33 +0200 | |
---|---|---|
committer | 2017-07-24 09:51:02 +0200 | |
commit | 7599a4d9fc11369821a6bb7f026d670163abc90e (patch) | |
tree | 34d0dc02020844bd5f02351f3ca95c38ac26eccc /src/main/java/com/google/devtools | |
parent | b69acfaa1c281ac2e8fd7450f07bb3735d24ae23 (diff) |
Add ActionInputPrefetcher to ActionExecutionContext
This is more consistent with other values, and removes the need to inject it
into the constructor of the various strategy implementations.
PiperOrigin-RevId: 162729187
Diffstat (limited to 'src/main/java/com/google/devtools')
8 files changed, 33 insertions, 37 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java index 4359349581..816eb10595 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java @@ -41,6 +41,7 @@ public class ActionExecutionContext implements Closeable { private final Executor executor; private final ActionInputFileCache actionInputFileCache; + private final ActionInputPrefetcher actionInputPrefetcher; private final MetadataHandler metadataHandler; private final FileOutErr fileOutErr; private final ImmutableMap<String, String> clientEnv; @@ -51,12 +52,14 @@ public class ActionExecutionContext implements Closeable { private ActionExecutionContext( Executor executor, ActionInputFileCache actionInputFileCache, + ActionInputPrefetcher actionInputPrefetcher, MetadataHandler metadataHandler, FileOutErr fileOutErr, Map<String, String> clientEnv, @Nullable ArtifactExpander artifactExpander, @Nullable SkyFunction.Environment env) { this.actionInputFileCache = actionInputFileCache; + this.actionInputPrefetcher = actionInputPrefetcher; this.metadataHandler = metadataHandler; this.fileOutErr = fileOutErr; this.clientEnv = ImmutableMap.copyOf(clientEnv); @@ -68,6 +71,7 @@ public class ActionExecutionContext implements Closeable { public ActionExecutionContext( Executor executor, ActionInputFileCache actionInputFileCache, + ActionInputPrefetcher actionInputPrefetcher, MetadataHandler metadataHandler, FileOutErr fileOutErr, Map<String, String> clientEnv, @@ -75,6 +79,7 @@ public class ActionExecutionContext implements Closeable { this( executor, actionInputFileCache, + actionInputPrefetcher, metadataHandler, fileOutErr, clientEnv, @@ -82,32 +87,27 @@ public class ActionExecutionContext implements Closeable { null); } - public static ActionExecutionContext normal( + public static ActionExecutionContext forInputDiscovery( Executor executor, ActionInputFileCache actionInputFileCache, + ActionInputPrefetcher actionInputPrefetcher, MetadataHandler metadataHandler, FileOutErr fileOutErr, Map<String, String> clientEnv, - ArtifactExpander artifactExpander) { + Environment env) { return new ActionExecutionContext( executor, actionInputFileCache, + actionInputPrefetcher, metadataHandler, fileOutErr, clientEnv, - artifactExpander, - null); + null, + env); } - public static ActionExecutionContext forInputDiscovery( - Executor executor, - ActionInputFileCache actionInputFileCache, - MetadataHandler metadataHandler, - FileOutErr fileOutErr, - Map<String, String> clientEnv, - Environment env) { - return new ActionExecutionContext( - executor, actionInputFileCache, metadataHandler, fileOutErr, clientEnv, null, env); + public ActionInputPrefetcher getActionInputPrefetcher() { + return actionInputPrefetcher; } public ActionInputFileCache getActionInputFileCache() { @@ -224,6 +224,7 @@ public class ActionExecutionContext implements Closeable { return new ActionExecutionContext( executor, actionInputFileCache, + actionInputPrefetcher, metadataHandler, fileOutErr, clientEnv, diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java index bd44d70446..ef87660e9e 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java @@ -681,6 +681,7 @@ public class ExecutionTool { : ModifiedFileSet.NOTHING_MODIFIED, options.finalizeActions, fileCache, + prefetcher, request.getBuildOptions().progressReportInterval); } diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java index dc398a474d..c8cde04074 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.ActionCacheChecker; import com.google.devtools.build.lib.actions.ActionExecutionException; 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.Artifact; import com.google.devtools.build.lib.actions.BuildFailedException; import com.google.devtools.build.lib.actions.Executor; @@ -70,6 +71,7 @@ public class SkyframeBuilder implements Builder { private final boolean finalizeActionsToOutputService; private final ModifiedFileSet modifiedOutputFiles; private final ActionInputFileCache fileCache; + private final ActionInputPrefetcher actionInputPrefetcher; private final ActionCacheChecker actionCacheChecker; private final int progressReportInterval; @@ -77,7 +79,7 @@ public class SkyframeBuilder implements Builder { public SkyframeBuilder(SkyframeExecutor skyframeExecutor, ActionCacheChecker actionCacheChecker, boolean keepGoing, int numJobs, ModifiedFileSet modifiedOutputFiles, boolean finalizeActionsToOutputService, ActionInputFileCache fileCache, - int progressReportInterval) { + ActionInputPrefetcher actionInputPrefetcher, int progressReportInterval) { this.skyframeExecutor = skyframeExecutor; this.actionCacheChecker = actionCacheChecker; this.keepGoing = keepGoing; @@ -85,6 +87,7 @@ public class SkyframeBuilder implements Builder { this.finalizeActionsToOutputService = finalizeActionsToOutputService; this.modifiedOutputFiles = modifiedOutputFiles; this.fileCache = fileCache; + this.actionInputPrefetcher = actionInputPrefetcher; this.progressReportInterval = progressReportInterval; } @@ -103,7 +106,7 @@ public class SkyframeBuilder implements Builder { TopLevelArtifactContext topLevelArtifactContext) throws BuildFailedException, AbruptExitException, TestExecException, InterruptedException { skyframeExecutor.prepareExecution(modifiedOutputFiles, lastExecutionTimeRange); - skyframeExecutor.setFileCache(fileCache); + skyframeExecutor.configureActionExecutor(fileCache, actionInputPrefetcher); // Note that executionProgressReceiver accesses builtTargets concurrently (after wrapping in a // synchronized collection), so unsynchronized access to this variable is unsafe while it runs. ExecutionProgressReceiver executionProgressReceiver = diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionContextProvider.java index d48cd8c0d6..99448b8377 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionContextProvider.java +++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionContextProvider.java @@ -39,7 +39,6 @@ final class RemoteActionContextProvider extends ActionContextProvider { private final RemoteActionCache cache; private final GrpcRemoteExecutor executor; - private RemoteSpawnRunner spawnRunner; private RemoteSpawnStrategy spawnStrategy; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java index be611c8757..1f4b1188c4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionStatusReporter; import com.google.devtools.build.lib.actions.ActionGraph; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionInputFileCache; +import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.ActionLogBufferPathGenerator; import com.google.devtools.build.lib.actions.ActionLookupData; import com.google.devtools.build.lib.actions.ActionLookupValue; @@ -142,6 +143,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto private boolean keepGoing; private boolean hadExecutionError; private ActionInputFileCache perBuildFileCache; + private ActionInputPrefetcher actionInputPrefetcher; /** These variables are nulled out between executions. */ private ProgressSupplier progressSupplier; private ActionCompletedReceiver completionReceiver; @@ -463,6 +465,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto return new ActionExecutionContext( executorEngine, new DelegatingPairFileCache(graphFileCache, perBuildFileCache), + actionInputPrefetcher, metadataHandler, fileOutErr, clientEnv, @@ -571,6 +574,7 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto ActionExecutionContext.forInputDiscovery( executorEngine, new DelegatingPairFileCache(graphFileCache, perBuildFileCache), + actionInputPrefetcher, metadataHandler, actionLogBufferPathGenerator.generate(), clientEnv, @@ -605,8 +609,9 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto return hadExecutionError && !keepGoing; } - void setFileCache(ActionInputFileCache fileCache) { + void configure(ActionInputFileCache fileCache, ActionInputPrefetcher actionInputPrefetcher) { this.perBuildFileCache = fileCache; + this.actionInputPrefetcher = actionInputPrefetcher; } private class ActionRunner implements Callable<ActionExecutionValue> { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index b37a1ed163..c1feb56a85 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -41,6 +41,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContextFactory; import com.google.devtools.build.lib.actions.ActionExecutionStatusReporter; import com.google.devtools.build.lib.actions.ActionGraph; import com.google.devtools.build.lib.actions.ActionInputFileCache; +import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.ActionLogBufferPathGenerator; import com.google.devtools.build.lib.actions.ActionLookupValue; import com.google.devtools.build.lib.actions.Artifact; @@ -522,8 +523,9 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { Preconditions.checkState(active); } - public void setFileCache(ActionInputFileCache fileCache) { - this.skyframeActionExecutor.setFileCache(fileCache); + public void configureActionExecutor( + ActionInputFileCache fileCache, ActionInputPrefetcher actionInputPrefetcher) { + this.skyframeActionExecutor.configure(fileCache, actionInputPrefetcher); } public void dump(boolean summarize, PrintStream out) { diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java index 9300b5f9b7..ba42ed9965 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java @@ -13,13 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.standalone; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionContext; import com.google.devtools.build.lib.actions.ActionExecutionContext; -import com.google.devtools.build.lib.actions.ActionInputFileCache; -import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactResolver; import com.google.devtools.build.lib.actions.ExecutionStrategy; @@ -67,19 +64,12 @@ public class StandaloneActionContextProvider extends ActionContextProvider { } private final CommandEnvironment env; - private ActionInputPrefetcher actionInputPrefetcher; public StandaloneActionContextProvider(CommandEnvironment env) { this.env = env; } @Override - public void init( - ActionInputFileCache actionInputFileCache, ActionInputPrefetcher actionInputPrefetcher) { - this.actionInputPrefetcher = Preconditions.checkNotNull(actionInputPrefetcher); - } - - @Override public Iterable<? extends ActionContext> getActionContexts() { ExecutionOptions executionOptions = env.getOptions().getOptions(ExecutionOptions.class); LocalExecutionOptions localExecutionOptions = @@ -98,7 +88,6 @@ public class StandaloneActionContextProvider extends ActionContextProvider { return ImmutableList.of( new StandaloneSpawnStrategy( env.getExecRoot(), - actionInputPrefetcher, localExecutionOptions, executionOptions.verboseFailures, env.getRuntime().getProductName(), diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java index 82794d14a4..f62e2b7bdf 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java @@ -17,7 +17,6 @@ import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionInputFileCache; -import com.google.devtools.build.lib.actions.ActionInputPrefetcher; import com.google.devtools.build.lib.actions.ActionStatusMessage; import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; import com.google.devtools.build.lib.actions.ExecException; @@ -53,15 +52,12 @@ import java.util.concurrent.atomic.AtomicInteger; @ExecutionStrategy(name = { "standalone", "local" }, contextType = SpawnActionContext.class) public class StandaloneSpawnStrategy implements SpawnActionContext { private final boolean verboseFailures; - private final ActionInputPrefetcher actionInputPrefetcher; private final LocalSpawnRunner localSpawnRunner; private final AtomicInteger execCount = new AtomicInteger(); public StandaloneSpawnStrategy( - Path execRoot, ActionInputPrefetcher actionInputPrefetcher, - LocalExecutionOptions localExecutionOptions, boolean verboseFailures, String productName, - ResourceManager resourceManager) { - this.actionInputPrefetcher = actionInputPrefetcher; + Path execRoot, LocalExecutionOptions localExecutionOptions, boolean verboseFailures, + String productName, ResourceManager resourceManager) { this.verboseFailures = verboseFailures; LocalEnvProvider localEnvProvider = OS.getCurrent() == OS.DARWIN ? new XCodeLocalEnvProvider() @@ -93,7 +89,7 @@ public class StandaloneSpawnStrategy implements SpawnActionContext { @Override public void prefetchInputs(Iterable<ActionInput> inputs) throws IOException { if (Spawns.shouldPrefetchInputsForLocalExecution(spawn)) { - actionInputPrefetcher.prefetchFiles(inputs); + actionExecutionContext.getActionInputPrefetcher().prefetchFiles(inputs); } } |