aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2015-11-04 20:21:40 +0000
committerGravatar John Field <jfield@google.com>2015-11-05 16:49:45 +0000
commit026de57e5e4e1d853808cd817d4f6f32dc0efa58 (patch)
treeb4d890ab2cbf63150251c8f50cc8616b33035c61 /src/test/java/com
parent4bb27491c877a6b77efdc0a4ba78b1f265934097 (diff)
workers: Pass a map of input filenames -> digest of file contents to workers so that they can cache and reuse state for unchanged inputs over multiple builds.
-- MOS_MIGRATED_REVID=107066408
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java17
-rw-r--r--src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java7
2 files changed, 24 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
index 78c03ff012..21c089c088 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorker.java
@@ -20,6 +20,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.worker.ExampleWorkerOptions.ExampleWorkOptions;
+import com.google.devtools.build.lib.worker.WorkerProtocol.Input;
import com.google.devtools.build.lib.worker.WorkerProtocol.WorkRequest;
import com.google.devtools.build.lib.worker.WorkerProtocol.WorkResponse;
import com.google.devtools.common.options.OptionsParser;
@@ -30,7 +31,9 @@ import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map.Entry;
import java.util.UUID;
/**
@@ -47,6 +50,9 @@ public class ExampleWorker {
// If true, returns corrupt responses instead of correct protobufs.
static boolean poisoned = false;
+ // Keep state across multiple builds.
+ static final LinkedHashMap<String, String> inputs = new LinkedHashMap<>();
+
public static void main(String[] args) throws Exception {
if (ImmutableSet.copyOf(args).contains("--persistent_worker")) {
OptionsParser parser = OptionsParser.newOptionsParser(ExampleWorkerOptions.class);
@@ -73,6 +79,11 @@ public class ExampleWorker {
break;
}
+ inputs.clear();
+ for (Input input : request.getInputsList()) {
+ inputs.put(input.getPath(), input.getDigest().toStringUtf8());
+ }
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int exitCode = 0;
@@ -142,6 +153,12 @@ public class ExampleWorker {
}
outputs.add(residueStr);
+ if (options.printInputs) {
+ for (Entry<String, String> input : inputs.entrySet()) {
+ outputs.add("INPUT " + input.getKey() + " " + input.getValue());
+ }
+ }
+
String outputStr = Joiner.on('\n').join(outputs);
if (options.outputFile.isEmpty()) {
System.out.println(outputStr);
diff --git a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
index 6a159ae512..7456e4b331 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/ExampleWorkerOptions.java
@@ -44,6 +44,13 @@ public class ExampleWorkerOptions extends OptionsBase {
help = "Writes a counter that increases with each work unit processed into the output."
)
public boolean writeCounter;
+
+ @Option(
+ name = "print_inputs",
+ defaultValue = "false",
+ help = "Writes a list of input files and their digests."
+ )
+ public boolean printInputs;
}
@Option(name = "persistent_worker", defaultValue = "false")