aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-07-21 13:58:33 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-24 09:51:02 +0200
commit7599a4d9fc11369821a6bb7f026d670163abc90e (patch)
tree34d0dc02020844bd5f02351f3ca95c38ac26eccc /src/main/java/com/google/devtools
parentb69acfaa1c281ac2e8fd7450f07bb3735d24ae23 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/RemoteActionContextProvider.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java10
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);
}
}