aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java
index 594258afe5..08d24b2652 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java
@@ -16,13 +16,13 @@ package com.google.devtools.build.lib.worker;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.base.Charsets;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Multimap;
import com.google.common.hash.HashCode;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputFileCache;
@@ -173,6 +173,7 @@ public final class WorkerSpawnStrategy implements SandboxedSpawnActionContext {
private final Path execRoot;
private final boolean verboseFailures;
private final int maxRetries;
+ private final Multimap<String, String> extraFlags;
private final boolean workerVerbose;
public WorkerSpawnStrategy(
@@ -180,12 +181,15 @@ public final class WorkerSpawnStrategy implements SandboxedSpawnActionContext {
WorkerPool workers,
boolean verboseFailures,
int maxRetries,
- boolean workerVerbose) {
+ boolean workerVerbose,
+ Multimap<String, String> extraFlags) {
+ Preconditions.checkNotNull(workers);
this.workers = Preconditions.checkNotNull(workers);
this.execRoot = blazeDirs.getExecRoot();
this.verboseFailures = verboseFailures;
this.maxRetries = maxRetries;
this.workerVerbose = workerVerbose;
+ this.extraFlags = extraFlags;
}
@Override
@@ -243,16 +247,21 @@ public final class WorkerSpawnStrategy implements SandboxedSpawnActionContext {
FileOutErr outErr = actionExecutionContext.getFileOutErr();
- ImmutableList<String> args = ImmutableList.<String>builder()
- .addAll(spawn.getArguments().subList(0, spawn.getArguments().size() - 1))
- .add("--persistent_worker")
- .build();
+ ImmutableList<String> args =
+ ImmutableList.<String>builder()
+ .addAll(spawn.getArguments().subList(0, spawn.getArguments().size() - 1))
+ .add("--persistent_worker")
+ .addAll(
+ MoreObjects.firstNonNull(
+ extraFlags.get(spawn.getMnemonic()), ImmutableList.<String>of()))
+ .build();
ImmutableMap<String, String> env = spawn.getEnvironment();
try {
ActionInputFileCache inputFileCache = actionExecutionContext.getActionInputFileCache();
- HashCode workerFilesHash = combineActionInputHashes(spawn.getToolFiles(), inputFileCache);
+ HashCode workerFilesHash = WorkerFilesHash.getWorkerFilesHash(
+ spawn.getToolFiles(), actionExecutionContext);
Map<PathFragment, Path> inputFiles =
new SpawnHelpers(execRoot).getMounts(spawn, actionExecutionContext);
Set<PathFragment> outputFiles = SandboxHelpers.getOutputFiles(spawn);
@@ -329,17 +338,6 @@ public final class WorkerSpawnStrategy implements SandboxedSpawnActionContext {
}
}
- private HashCode combineActionInputHashes(
- Iterable<? extends ActionInput> toolFiles, ActionInputFileCache actionInputFileCache)
- throws IOException {
- Hasher hasher = Hashing.sha256().newHasher();
- for (ActionInput tool : toolFiles) {
- hasher.putString(tool.getExecPathString(), Charset.defaultCharset());
- hasher.putBytes(actionInputFileCache.getDigest(tool));
- }
- return hasher.hash();
- }
-
private WorkResponse execInWorker(
EventHandler eventHandler,
WorkerKey key,