aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Yue Gan <yueg@google.com>2016-04-12 14:10:27 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-04-13 08:08:47 +0000
commit6b88e159d97df777716d5fb3eb137f305882602d (patch)
treef32862f7d79c2c692f68b5ded298d240bb61fc26 /src/main/java/com/google
parent6cb8d820689ad029a9d0dc4ee1100db9b2d96515 (diff)
More detailed error message for sandbox failures in test, when --sandbox_debug and --verbose_failures are on. See discussion in #1049.
RELNOTES: -- MOS_MIGRATED_REVID=119635080
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/SpawnActionContext.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnStrategy.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/worker/WorkerSpawnStrategy.java5
6 files changed, 38 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/SpawnActionContext.java b/src/main/java/com/google/devtools/build/lib/actions/SpawnActionContext.java
index 5e20f85684..e0deb85505 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/SpawnActionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/SpawnActionContext.java
@@ -33,4 +33,11 @@ public interface SpawnActionContext extends Executor.ActionContext {
* execute spawns remotely, i.e., force remote execution.
*/
boolean willExecuteRemotely(boolean remotable);
+
+ /**
+ * If an ExecException should be rethrown by the strategy that executed this.
+ * Currently only works for LinuxSandboxedStrategy:
+ * If true, will throw ExecException and give reproduction instruction for sandbox.
+ */
+ boolean shouldPropagateExecException();
}
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnStrategy.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnStrategy.java
index b5f4326ba2..f688fd2191 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnStrategy.java
@@ -259,4 +259,9 @@ final class RemoteSpawnStrategy implements SpawnActionContext {
// Returning true here just helps to estimate the cost of this computation is zero.
return remotable;
}
+
+ @Override
+ public boolean shouldPropagateExecException() {
+ return false;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
index a474521544..a12084a813 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.lib.actions.ResourceManager;
import com.google.devtools.build.lib.actions.ResourceManager.ResourceHandle;
import com.google.devtools.build.lib.actions.ResourceSet;
import com.google.devtools.build.lib.actions.Spawn;
+import com.google.devtools.build.lib.actions.SpawnActionContext;
import com.google.devtools.build.lib.actions.TestExecException;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
import com.google.devtools.build.lib.analysis.config.BinTools;
@@ -166,13 +167,14 @@ public class StandaloneTestStrategy extends TestStrategy {
private TestResultData execute(
ActionExecutionContext actionExecutionContext, Spawn spawn, TestRunnerAction action)
- throws TestExecException, InterruptedException {
+ throws ExecException, InterruptedException {
Executor executor = actionExecutionContext.getExecutor();
Closeable streamed = null;
Path testLogPath = action.getTestLog().getPath();
TestResultData.Builder builder = TestResultData.newBuilder();
long startTime = executor.getClock().currentTimeMillis();
+ SpawnActionContext spawnActionContext = executor.getSpawnActionContext(action.getMnemonic());
try {
try {
if (executionOptions.testOutput.equals(TestOutputFormat.STREAMED)) {
@@ -180,7 +182,7 @@ public class StandaloneTestStrategy extends TestStrategy {
Reporter.outErrForReporter(
actionExecutionContext.getExecutor().getEventHandler()), testLogPath);
}
- executor.getSpawnActionContext(action.getMnemonic()).exec(spawn, actionExecutionContext);
+ spawnActionContext.exec(spawn, actionExecutionContext);
builder.setTestPassed(true)
.setStatus(BlazeTestStatus.PASSED)
@@ -195,6 +197,9 @@ public class StandaloneTestStrategy extends TestStrategy {
.setTestPassed(false)
.setStatus(e.hasTimedOut() ? BlazeTestStatus.TIMEOUT : BlazeTestStatus.FAILED)
.addFailedLogs(testLogPath.getPathString());
+ if (spawnActionContext.shouldPropagateExecException()) {
+ throw e;
+ }
} finally {
long duration = executor.getClock().currentTimeMillis() - startTime;
builder.addTestTimes(duration);
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
index 99d7183182..4aabf17897 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java
@@ -68,8 +68,10 @@ import java.util.concurrent.atomic.AtomicInteger;
/**
* Strategy that uses sandboxing to execute a process.
*/
-@ExecutionStrategy(name = {"sandboxed"},
- contextType = SpawnActionContext.class)
+@ExecutionStrategy(
+ name = {"sandboxed"},
+ contextType = SpawnActionContext.class
+)
public class LinuxSandboxedStrategy implements SpawnActionContext {
private final ExecutorService backgroundWorkers;
@@ -684,4 +686,9 @@ public class LinuxSandboxedStrategy implements SpawnActionContext {
public String toString() {
return "sandboxed";
}
+
+ @Override
+ public boolean shouldPropagateExecException() {
+ return verboseFailures && sandboxDebug;
+ }
}
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 9c269633c9..6f009af507 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
@@ -196,4 +196,9 @@ public class StandaloneSpawnStrategy implements SpawnActionContext {
}
return AppleHostInfo.getSdkRoot(execRoot, developerDir, iosSdkVersion, appleSdkPlatform);
}
+
+ @Override
+ public boolean shouldPropagateExecException() {
+ return false;
+ }
}
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 3433e98706..dd07b80013 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
@@ -269,4 +269,9 @@ public final class WorkerSpawnStrategy implements SpawnActionContext {
public boolean willExecuteRemotely(boolean remotable) {
return false;
}
+
+ @Override
+ public boolean shouldPropagateExecException() {
+ return false;
+ }
}