bazel actions: remove unchecked exceptions in command expansion
CL 192288783 introduced Starlark evaluation into the execution phase,
for lazily computed command lines. This created the possibility of errors,
both deterministic (in evaluation) and nondeterministic (due to thread
interruption) during the creation of command line arguments.
Rather than handle the errors correctly by propagating them up to a
point at which they could be dealt with, two hacks were used instead:
(1) InterruptedExceptions were treated the same way as deterministic
exceptions, leading to problems such as b/168033469 in which
Ctrl-C interrupts cause errors that are cached, persisting until
process restart.
(2) Deterministic errors were wrapped in unchecked exceptions and
tunneled through public API code.
This change is an attempt to rectify the problems by bubbling up
both kinds of errors---{CommandLineExpansion,Interrupted}Exception---
to a point at which they can be dealt with. In some cases (e.g. a
toString method) all we can do is handle the exception, print
some kind of error, and reassert the thread interrupt flag.
In some cases (e.g. CommandLine.{arguments,addToFingerprint})
an interface that used to declare only 'throws CLEE' now declares both
CLEE, IE, because the two kinds of errors have been separated.
In other cases (e.g. ArgvFragment.{eval,addToFingerprint})
an interface now declares both exceptions where before it declared
neither, because we no longer rely on unchecked exceptions to
tunnel both kinds of errors. If this latter category seems too large
and onerous, we could restore the use of unchecked exceptions for
tunnelling across MapFn.expandToCommandLine.
As the now-deleted TODO comment wryly notes, there are "numerous callers".
PiperOrigin-RevId: 342915786
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index b119cd4..2fc1542 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -268,6 +268,7 @@
":runtime/command_dispatcher",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
"//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index bedb246..11c368d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -477,7 +477,7 @@
@Override
public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ActionOwner owner = getOwner();
ExtraActionInfo.Builder result =
ExtraActionInfo.newBuilder()
@@ -550,7 +550,7 @@
}
@Override
- public Sequence<String> getStarlarkArgv() throws EvalException {
+ public Sequence<String> getStarlarkArgv() throws EvalException, InterruptedException {
return null;
}
@@ -561,7 +561,7 @@
}
@Override
- public String getStarlarkContent() throws IOException, EvalException {
+ public String getStarlarkContent() throws IOException, EvalException, InterruptedException {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Action.java b/src/main/java/com/google/devtools/build/lib/actions/Action.java
index 03c87ab..6b8b398 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Action.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Action.java
@@ -230,5 +230,5 @@
* different thread than the one this action is executed on.
*/
ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException;
+ throws CommandLineExpansionException, InterruptedException;
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
index 5dfe942..94f7fa4 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
@@ -225,6 +225,11 @@
} catch (CommandLineExpansionException e) {
// Command-line not available, so just not report it
logger.atInfo().withCause(e).log("Could not compute commandline of reported action");
+ } catch (InterruptedException unused) {
+ // Command-line not available, so just not report it
+ // TODO(b/168033469): dubious; reconsider.
+ Thread.currentThread().interrupt();
+ logger.atInfo().log("Interrupted while expanding action command line");
}
return GenericBuildEvent.protoChaining(this).setAction(actionBuilder.build()).build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyCacher.java b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyCacher.java
index 0abcd57..b06e760 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyCacher.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyCacher.java
@@ -63,6 +63,10 @@
return fp.hexDigestAndReset();
} catch (CommandLineExpansionException e) {
return KEY_ERROR;
+ } catch (InterruptedException unused) {
+ Thread.currentThread().interrupt();
+ // TODO(b/168033469): fix: this is not safe wrt caching of failures.
+ return KEY_ERROR;
}
}
@@ -78,5 +82,5 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException;
+ throws CommandLineExpansionException, InterruptedException;
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
index 21ddc43..8be622d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionKeyContext.java
@@ -24,12 +24,14 @@
private final NestedSetFingerprintCache nestedSetFingerprintCache =
new NestedSetFingerprintCache();
- public <T> void addNestedSetToFingerprint(Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ public <T> void addNestedSetToFingerprint(Fingerprint fingerprint, NestedSet<T> nestedSet)
+ throws CommandLineExpansionException, InterruptedException {
nestedSetFingerprintCache.addNestedSetToFingerprint(fingerprint, nestedSet);
}
public <T> void addNestedSetToFingerprint(
- CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet)
+ throws CommandLineExpansionException, InterruptedException {
nestedSetFingerprintCache.addNestedSetToFingerprint(mapFn, fingerprint, nestedSet);
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index 2b04039..a7f86bb 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -36,6 +36,7 @@
"ArtifactResolver.java",
"ArtifactRoot.java",
"Artifacts.java",
+ "CommandLineExpansionException.java",
"CommandLineItem.java",
"ExecutionRequirements.java",
"FileArtifactValue.java",
@@ -194,7 +195,11 @@
java_library(
name = "commandline_item",
- srcs = ["CommandLineItem.java"],
+ srcs = [
+ "CommandLineExpansionException.java",
+ "CommandLineItem.java",
+ ],
+ deps = ["//third_party:jsr305"],
)
java_library(
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java b/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java
index 8b2e000..49757d8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandAction.java
@@ -31,7 +31,7 @@
* <p>In most cases, this expands any params files. One notable exception is C/C++ compilation
* with the "compiler_param_file" feature.
*/
- List<String> getArguments() throws CommandLineExpansionException;
+ List<String> getArguments() throws CommandLineExpansionException, InterruptedException;
/**
* Returns a map of command line variables to their values that constitute the environment in
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
index e369905..3f42263 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLine.java
@@ -30,7 +30,7 @@
@VisibleForSerialization
static class EmptyCommandLine extends CommandLine {
@Override
- public Iterable<String> arguments() throws CommandLineExpansionException {
+ public Iterable<String> arguments() {
return ImmutableList.of();
}
}
@@ -38,7 +38,8 @@
public static final CommandLine EMPTY = new EmptyCommandLine();
/** Returns the command line. */
- public abstract Iterable<String> arguments() throws CommandLineExpansionException;
+ public abstract Iterable<String> arguments()
+ throws CommandLineExpansionException, InterruptedException;
/**
* Returns the evaluated command line with enclosed artifacts expanded by {@code artifactExpander}
@@ -49,7 +50,7 @@
* need to expand them for proper argument evaluation.
*/
public Iterable<String> arguments(ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return arguments();
}
@@ -65,7 +66,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fingerprint)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
for (String s : arguments()) {
fingerprint.addString(s);
}
@@ -105,13 +106,13 @@
}
@Override
- public Iterable<String> arguments() throws CommandLineExpansionException {
+ public Iterable<String> arguments() throws CommandLineExpansionException, InterruptedException {
return IterablesChain.concat(executableArgs, commandLine.arguments());
}
@Override
public Iterable<String> arguments(ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return IterablesChain.concat(executableArgs, commandLine.arguments(artifactExpander));
}
}
@@ -129,13 +130,13 @@
}
@Override
- public Iterable<String> arguments() throws CommandLineExpansionException {
+ public Iterable<String> arguments() throws CommandLineExpansionException, InterruptedException {
return IterablesChain.concat(commandLine.arguments(), executableArgs);
}
@Override
public Iterable<String> arguments(ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return IterablesChain.concat(commandLine.arguments(artifactExpander), executableArgs);
}
}
@@ -180,6 +181,9 @@
return Joiner.on(' ').join(arguments());
} catch (CommandLineExpansionException e) {
return "Error in expanding command line";
+ } catch (InterruptedException unused) {
+ Thread.currentThread().interrupt();
+ return "Interrupted while expanding command line";
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
index e7e9055..5580b1c 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
@@ -25,7 +25,8 @@
(Object object, Consumer<String> args) ->
args.accept(CommandLineItem.expandToCommandLine(object));
- void expandToCommandLine(T object, Consumer<String> args);
+ void expandToCommandLine(T object, Consumer<String> args)
+ throws CommandLineExpansionException, InterruptedException;
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
index ba9f8a0..b7e116b 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
@@ -101,7 +101,7 @@
*/
public ExpandedCommandLines expand(
ArtifactExpander artifactExpander, PathFragment paramFileBasePath, CommandLineLimits limits)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return expand(artifactExpander, paramFileBasePath, limits, PARAM_FILE_ARG_LENGTH_ESTIMATE);
}
@@ -111,7 +111,8 @@
* <p>Suitable for debugging and printing messages to users. This expands all command lines, so it
* is potentially expensive.
*/
- public ImmutableList<String> allArguments() throws CommandLineExpansionException {
+ public ImmutableList<String> allArguments()
+ throws CommandLineExpansionException, InterruptedException {
ImmutableList.Builder<String> arguments = ImmutableList.builder();
for (CommandLineAndParamFileInfo pair : getCommandLines()) {
arguments.addAll(pair.commandLine.arguments());
@@ -125,7 +126,7 @@
PathFragment paramFileBasePath,
CommandLineLimits limits,
int paramFileArgLengthEstimate)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
// Optimize for simple case of single command line
if (commandLines instanceof CommandLine) {
CommandLine commandLine = (CommandLine) commandLines;
@@ -200,7 +201,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fingerprint)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
// Optimize for simple case of single command line
if (commandLines instanceof CommandLine) {
CommandLine commandLine = (CommandLine) commandLines;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index 14f1b5a..2d6be1c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -375,6 +375,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/actions:fileset_output_symlink",
"//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
@@ -1331,6 +1332,7 @@
":actions/deterministic_writer",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/util",
"//third_party:jsr305",
@@ -1360,6 +1362,7 @@
":actions/deterministic_writer",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
@@ -1389,6 +1392,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:middleman_type",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/skyframe:action_template_expansion_value",
@@ -1458,7 +1462,6 @@
":actions/template",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
- "//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
@@ -2054,6 +2057,7 @@
":actions/proto_deterministic_writer",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
@@ -2072,6 +2076,7 @@
":starlark/starlark_custom_command_line",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
@@ -2149,7 +2154,6 @@
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/main/java/net/starlark/java/eval",
"//src/main/java/net/starlark/java/syntax",
- "//third_party:flogger",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
index dbe4df0..7499663 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
@@ -97,12 +97,9 @@
}
@Override
- public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext) {
- try {
- return super.getExtraActionInfo(actionKeyContext).setExtension(infoExtension, getInfo());
- } catch (CommandLineExpansionException e) {
- throw new AssertionError("PseudoAction command line expansion cannot fail");
- }
+ public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
+ throws CommandLineExpansionException, InterruptedException {
+ return super.getExtraActionInfo(actionKeyContext).setExtension(infoExtension, getInfo());
}
public static Artifact getDummyOutput(RuleContext ruleContext) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
index 293fa65..8400379 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
import com.google.devtools.build.lib.actions.CommandLine;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.CommandLineItem;
import com.google.devtools.build.lib.actions.SingleStringArgFormatter;
import com.google.devtools.build.lib.cmdline.Label;
@@ -68,13 +69,15 @@
* @return The index of the next argument, after the ArgvFragment has consumed its args. If the
* ArgvFragment doesn't have any args, it should return {@code argi} unmodified.
*/
- int eval(List<Object> arguments, int argi, ImmutableList.Builder<String> builder);
+ int eval(List<Object> arguments, int argi, ImmutableList.Builder<String> builder)
+ throws CommandLineExpansionException, InterruptedException;
int addToFingerprint(
List<Object> arguments,
int argi,
ActionKeyContext actionKeyContext,
- Fingerprint fingerprint);
+ Fingerprint fingerprint)
+ throws CommandLineExpansionException, InterruptedException;
}
/**
@@ -368,7 +371,8 @@
@SuppressWarnings("unchecked")
@Override
- public int eval(List<Object> arguments, int argi, ImmutableList.Builder<String> builder) {
+ public int eval(List<Object> arguments, int argi, ImmutableList.Builder<String> builder)
+ throws CommandLineExpansionException, InterruptedException {
final List<String> mutatedValues;
CommandLineItem.MapFn<Object> mapFn =
hasMapEach ? (CommandLineItem.MapFn<Object>) arguments.get(argi++) : null;
@@ -430,7 +434,8 @@
List<Object> arguments,
int argi,
ActionKeyContext actionKeyContext,
- Fingerprint fingerprint) {
+ Fingerprint fingerprint)
+ throws CommandLineExpansionException, InterruptedException {
CommandLineItem.MapFn<Object> mapFn =
hasMapEach ? (CommandLineItem.MapFn<Object>) arguments.get(argi++) : null;
if (isNestedSet) {
@@ -1229,16 +1234,19 @@
}
@Override
- public Iterable<String> arguments() {
+ public ImmutableList<String> arguments()
+ throws CommandLineExpansionException, InterruptedException {
return argumentsInternal(null);
}
@Override
- public Iterable<String> arguments(ArtifactExpander artifactExpander) {
+ public ImmutableList<String> arguments(ArtifactExpander artifactExpander)
+ throws CommandLineExpansionException, InterruptedException {
return argumentsInternal(Preconditions.checkNotNull(artifactExpander));
}
- private Iterable<String> argumentsInternal(@Nullable ArtifactExpander artifactExpander) {
+ private ImmutableList<String> argumentsInternal(@Nullable ArtifactExpander artifactExpander)
+ throws CommandLineExpansionException, InterruptedException {
ImmutableList.Builder<String> builder = ImmutableList.builder();
int count = arguments.size();
for (int i = 0; i < count; ) {
@@ -1291,7 +1299,8 @@
public void addToFingerprint(
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
- Fingerprint fingerprint) {
+ Fingerprint fingerprint)
+ throws CommandLineExpansionException, InterruptedException {
int count = arguments.size();
for (int i = 0; i < count; ) {
Object arg = arguments.get(i++);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWriteNestedSetOfPairAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWriteNestedSetOfPairAction.java
index 49eee16..39ca5e0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWriteNestedSetOfPairAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWriteNestedSetOfPairAction.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
@@ -62,7 +63,8 @@
protected void computeKey(
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
- Fingerprint fp) {
+ Fingerprint fp)
+ throws CommandLineExpansionException, InterruptedException {
actionKeyContext.addNestedSetToFingerprint(fp, pairsToWrite);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
index 8e41b91..e0f8f90 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParameterFileWriteAction.java
@@ -107,7 +107,8 @@
* <p>2019-01-10, @leba: Using this method for aquery since it's not performance-critical and the
* includeParamFile option is flag-guarded with warning regarding output size to user.
*/
- public Iterable<String> getArguments() throws CommandLineExpansionException {
+ public Iterable<String> getArguments()
+ throws CommandLineExpansionException, InterruptedException {
Preconditions.checkState(
!hasInputArtifactToExpand,
"This action contains a CommandLine with TreeArtifacts: %s, which must be expanded using "
@@ -117,14 +118,15 @@
}
@VisibleForTesting
- public String getStringContents() throws CommandLineExpansionException, IOException {
+ public String getStringContents()
+ throws CommandLineExpansionException, InterruptedException, IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ParameterFile.writeParameterFile(out, getArguments(), type, ISO_8859_1);
return new String(out.toByteArray(), ISO_8859_1);
}
@Override
- public String getStarlarkContent() throws IOException, EvalException {
+ public String getStarlarkContent() throws IOException, EvalException, InterruptedException {
if (hasInputArtifactToExpand) {
// Tree artifact information isn't available at analysis time.
return null;
@@ -138,7 +140,7 @@
@Override
public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx)
- throws ExecException {
+ throws ExecException, InterruptedException {
final Iterable<String> arguments;
try {
ArtifactExpander artifactExpander = Preconditions.checkNotNull(ctx.getArtifactExpander());
@@ -179,7 +181,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
fp.addString(GUID);
fp.addString(String.valueOf(makeExecutable));
fp.addString(type.toString());
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 9d6c357..500ca75 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -238,7 +238,7 @@
}
@Override
- public List<String> getArguments() throws CommandLineExpansionException {
+ public List<String> getArguments() throws CommandLineExpansionException, InterruptedException {
return ImmutableList.copyOf(commandLines.allArguments());
}
@@ -257,7 +257,7 @@
}
@Override
- public Sequence<String> getStarlarkArgv() throws EvalException {
+ public Sequence<String> getStarlarkArgv() throws EvalException, InterruptedException {
try {
return StarlarkList.immutableCopyOf(getArguments());
} catch (CommandLineExpansionException ex) {
@@ -273,13 +273,14 @@
/** Returns command argument, argv[0]. */
@VisibleForTesting
- public String getCommandFilename() throws CommandLineExpansionException {
+ public String getCommandFilename() throws CommandLineExpansionException, InterruptedException {
return Iterables.getFirst(getArguments(), null);
}
/** Returns the (immutable) list of arguments, excluding the command name, argv[0]. */
@VisibleForTesting
- public List<String> getRemainingArguments() throws CommandLineExpansionException {
+ public List<String> getRemainingArguments()
+ throws CommandLineExpansionException, InterruptedException {
return ImmutableList.copyOf(Iterables.skip(getArguments(), 1));
}
@@ -351,11 +352,12 @@
* spawn should override the other getSpawn() methods instead.
*/
@VisibleForTesting
- public final Spawn getSpawn() throws CommandLineExpansionException {
+ public final Spawn getSpawn() throws CommandLineExpansionException, InterruptedException {
return getSpawn(getInputs());
}
- final Spawn getSpawn(NestedSet<Artifact> inputs) throws CommandLineExpansionException {
+ final Spawn getSpawn(NestedSet<Artifact> inputs)
+ throws CommandLineExpansionException, InterruptedException {
return new ActionSpawn(
commandLines.allArguments(),
ImmutableMap.of(),
@@ -369,7 +371,7 @@
* client environment.
*/
public Spawn getSpawn(ActionExecutionContext actionExecutionContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return getSpawn(
actionExecutionContext.getArtifactExpander(),
actionExecutionContext.getClientEnv(),
@@ -380,7 +382,7 @@
ArtifactExpander artifactExpander,
Map<String, String> clientEnv,
Map<Artifact, ImmutableList<FilesetOutputSymlink>> filesetMappings)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ExpandedCommandLines expandedCommandLines =
commandLines.expand(artifactExpander, getPrimaryOutput().getExecPath(), commandLineLimits);
return new ActionSpawn(
@@ -391,7 +393,7 @@
filesetMappings);
}
- Spawn getSpawnForExtraAction() throws CommandLineExpansionException {
+ Spawn getSpawnForExtraAction() throws CommandLineExpansionException, InterruptedException {
return getSpawn(getInputs());
}
@@ -400,7 +402,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
fp.addString(GUID);
commandLines.addToFingerprint(actionKeyContext, artifactExpander, fp);
fp.addString(getMnemonic());
@@ -440,6 +442,9 @@
message.append(argument);
message.append('\n');
}
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ message.append("Interrupted while expanding command line\n");
} catch (CommandLineExpansionException e) {
message.append("Could not expand command line: ");
message.append(e);
@@ -463,7 +468,7 @@
@Override
public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ExtraActionInfo.Builder builder = super.getExtraActionInfo(actionKeyContext);
if (extraActionInfoSupplier == null) {
SpawnInfo spawnInfo = getExtraActionSpawnInfo();
@@ -481,7 +486,8 @@
* <p>Subclasses of SpawnAction may override this in order to provide action-specific behaviour.
* This can be necessary, for example, when the action discovers inputs.
*/
- protected SpawnInfo getExtraActionSpawnInfo() throws CommandLineExpansionException {
+ protected SpawnInfo getExtraActionSpawnInfo()
+ throws CommandLineExpansionException, InterruptedException {
SpawnInfo.Builder info = SpawnInfo.newBuilder();
Spawn spawn = getSpawnForExtraAction();
info.addAllArgument(spawn.getArguments());
@@ -1301,18 +1307,18 @@
}
@Override
- public Iterable<String> arguments() throws CommandLineExpansionException {
+ public Iterable<String> arguments() throws CommandLineExpansionException, InterruptedException {
return expandArguments(null);
}
@Override
public Iterable<String> arguments(ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return expandArguments(artifactExpander);
}
private Iterable<String> expandArguments(@Nullable ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ImmutableList.Builder<String> result = ImmutableList.builder();
int count = values.length;
for (int i = 0; i < count; ++i) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
index c16d7cc..efc0bf3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
@@ -126,7 +126,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
TreeFileArtifact inputTreeFileArtifact =
TreeFileArtifact.createTreeOutput(inputTreeArtifact, "dummy_for_key");
TreeFileArtifact outputTreeFileArtifact =
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java
index 8feed55..a8e42fb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/StarlarkAction.java
@@ -210,7 +210,7 @@
}
@Override
- Spawn getSpawnForExtraAction() throws CommandLineExpansionException {
+ Spawn getSpawnForExtraAction() throws CommandLineExpansionException, InterruptedException {
return getSpawn(allInputs);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
index c9def4d..d158d193 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraActionInfoFileWriteAction.java
@@ -63,7 +63,7 @@
@Override
public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx)
- throws ExecException {
+ throws ExecException, InterruptedException {
try {
return new ProtoDeterministicWriter(
shadowedAction.getExtraActionInfo(ctx.getActionKeyContext()).build());
@@ -82,7 +82,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
fp.addString(UUID);
fp.addString(shadowedAction.getKey(actionKeyContext, artifactExpander));
fp.addBytes(shadowedAction.getExtraActionInfo(actionKeyContext).build().toByteArray());
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
index ba1fbbd..01a86f4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
@@ -72,6 +72,9 @@
printer.append(Joiner.on(" ").join(build().arguments()));
} catch (CommandLineExpansionException e) {
printer.append("Cannot expand command line: " + e.getMessage());
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ printer.append("Interrupted while expanding command line: " + e.getMessage());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
index 1387477..a5ad079 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
@@ -19,7 +19,6 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Interner;
import com.google.common.collect.Sets;
-import com.google.common.flogger.GoogleLogger;
import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
@@ -64,8 +63,6 @@
@AutoCodec
public class StarlarkCustomCommandLine extends CommandLine {
- private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
-
private final StarlarkSemantics starlarkSemantics;
private final ImmutableList<Object> arguments;
/**
@@ -189,7 +186,7 @@
List<String> builder,
@Nullable ArtifactExpander artifactExpander,
StarlarkSemantics starlarkSemantics)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
final Location location =
((features & HAS_LOCATION) != 0) ? (Location) arguments.get(argi++) : null;
final List<Object> originalValues;
@@ -376,7 +373,7 @@
Fingerprint fingerprint,
StarlarkSemantics starlarkSemantics,
@Nullable ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
final Location location =
((features & HAS_LOCATION) != 0) ? (Location) arguments.get(argi++) : null;
StarlarkCallable mapEach =
@@ -392,9 +389,6 @@
(features & EXPAND_DIRECTORIES) != 0 ? artifactExpander : null);
try {
actionKeyContext.addNestedSetToFingerprint(commandLineItemMapFn, fingerprint, values);
- } catch (UncheckedCommandLineExpansionException e) {
- // We wrap the CommandLineExpansionException below, unwrap here
- throw e.cause;
} finally {
// The cache holds an entry for a NestedSet for every (map_fn, hasArtifactExpanderBit).
// Clearing the artifactExpander itself saves us from storing the contents of it in the
@@ -611,8 +605,7 @@
return argi;
}
- private int addToFingerprint(List<Object> arguments, int argi, Fingerprint fingerprint)
- throws CommandLineExpansionException {
+ private int addToFingerprint(List<Object> arguments, int argi, Fingerprint fingerprint) {
Object object = arguments.get(argi++);
String stringValue = CommandLineItem.expandToCommandLine(object);
fingerprint.addString(stringValue);
@@ -706,13 +699,13 @@
}
@Override
- public Iterable<String> arguments() throws CommandLineExpansionException {
+ public Iterable<String> arguments() throws CommandLineExpansionException, InterruptedException {
return arguments(null);
}
@Override
public Iterable<String> arguments(@Nullable ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
List<String> result = new ArrayList<>();
// If we're grouping arguments, keep track of the result indexes corresponding to the
@@ -769,7 +762,7 @@
ActionKeyContext actionKeyContext,
@Nullable ArtifactExpander artifactExpander,
Fingerprint fingerprint)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
for (int argi = 0; argi < arguments.size(); ) {
Object arg = arguments.get(argi++);
if (arg instanceof VectorArg) {
@@ -827,7 +820,7 @@
Location loc,
@Nullable ArtifactExpander artifactExpander,
StarlarkSemantics starlarkSemantics)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
try (Mutability mu = Mutability.create("map_each")) {
StarlarkThread thread = new StarlarkThread(mu, starlarkSemantics);
// TODO(b/77140311): Error if we issue print statements.
@@ -876,10 +869,6 @@
// before printing it.
throw new CommandLineExpansionException(
errorMessage(e.getMessageWithStack(), loc, e.getCause()));
- } catch (InterruptedException e) {
- logger.atWarning().withCause(e).log("Interrupted while applying map_each at %s", loc);
- Thread.currentThread().interrupt();
- throw new CommandLineExpansionException(errorMessage("Thread was interrupted", loc, null));
}
}
@@ -910,21 +899,11 @@
}
@Override
- public void expandToCommandLine(Object object, Consumer<String> args) {
+ public void expandToCommandLine(Object object, Consumer<String> args)
+ throws CommandLineExpansionException, InterruptedException {
Preconditions.checkState(artifactExpander != null || !hasArtifactExpander);
- try {
- applyMapEach(
- mapFn,
- maybeExpandDirectory(object),
- args,
- location,
- artifactExpander,
- starlarkSemantics);
- } catch (CommandLineExpansionException e) {
- // Rather than update CommandLineItem#expandToCommandLine and the numerous callers,
- // we wrap this in a runtime exception and handle it above
- throw new UncheckedCommandLineExpansionException(e);
- }
+ applyMapEach(
+ mapFn, maybeExpandDirectory(object), args, location, artifactExpander, starlarkSemantics);
}
private List<Object> maybeExpandDirectory(Object object) throws CommandLineExpansionException {
@@ -1002,14 +981,6 @@
return causeMessage;
}
- private static class UncheckedCommandLineExpansionException extends RuntimeException {
- final CommandLineExpansionException cause;
-
- UncheckedCommandLineExpansionException(CommandLineExpansionException cause) {
- this.cause = cause;
- }
- }
-
/**
* When we expand filesets the user might still expect a File object (since the results may be fed
* into map_each. Therefore we synthesize a File object from the fileset symlink.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
index 2f64c41..07efb9c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
@@ -370,7 +370,7 @@
ActionKeyContext actionKeyContext,
@Nullable Artifact.ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
// TODO(b/150305897): use addUUID?
fp.addString(GUID);
fp.addIterableStrings(executionSettings.getArgs().arguments());
@@ -947,7 +947,7 @@
}
@Override
- public List<String> getArguments() throws CommandLineExpansionException {
+ public List<String> getArguments() throws CommandLineExpansionException, InterruptedException {
return TestStrategy.expandedArgsFromAction(this);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
index 6f7e171..124cd1e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
@@ -144,7 +144,11 @@
public static ImmutableList<String> getArgs(TestRunnerAction testAction) throws ExecException {
try {
return expandedArgsFromAction(testAction);
- } catch (CommandLineExpansionException e) {
+ } catch (CommandLineExpansionException | InterruptedException e) {
+ // TODO(b/168033469): plumb InterruptedException up through callers.
+ if (e instanceof InterruptedException) {
+ Thread.currentThread().interrupt();
+ }
throw new UserExecException(
e,
FailureDetail.newBuilder()
@@ -163,7 +167,7 @@
* @throws CommandLineExpansionException
*/
public static ImmutableList<String> expandedArgsFromAction(TestRunnerAction testAction)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
List<String> args = Lists.newArrayList();
// TODO(ulfjack): `executedOnWindows` is incorrect for remote execution, where we need to
// consider the target configuration, not the machine Bazel happens to run on. Change this to
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetExecutionSettings.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetExecutionSettings.java
index 7ab603c..709e295 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetExecutionSettings.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetExecutionSettings.java
@@ -74,6 +74,11 @@
ImmutableList.Builder<String> testTargetArgs = new ImmutableList.Builder<>();
try {
testTargetArgs.addAll(targetArgs.arguments());
+ } catch (InterruptedException unused) {
+ Thread.currentThread().interrupt();
+ // Don't fail the build and ignore the runfiles arguments.
+ // TODO(b/168033469): dubious; reconsider.
+ ruleContext.ruleError("Interrupted while expanding test target arguments");
} catch (CommandLineExpansionException e) {
// Don't fail the build and ignore the runfiles arguments.
ruleContext.ruleError("Could not expand test target arguments: " + e.getMessage());
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCache.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCache.java
index 46eddd8..35aa803 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCache.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCache.java
@@ -17,6 +17,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.CommandLineItem;
import com.google.devtools.build.lib.actions.CommandLineItem.MapFn;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -36,12 +37,14 @@
private final Set<Class<?>> seenMapFns = new HashSet<>();
private final Multiset<Class<?>> seenParametrizedMapFns = HashMultiset.create();
- public <T> void addNestedSetToFingerprint(Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ public <T> void addNestedSetToFingerprint(Fingerprint fingerprint, NestedSet<T> nestedSet)
+ throws CommandLineExpansionException, InterruptedException {
addNestedSetToFingerprint(CommandLineItem.MapFn.DEFAULT, fingerprint, nestedSet);
}
public <T> void addNestedSetToFingerprint(
- CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet)
+ throws CommandLineExpansionException, InterruptedException {
if (mapFn instanceof CommandLineItem.CapturingMapFn) {
addNestedSetToFingerprintSlow(mapFn, fingerprint, nestedSet);
return;
@@ -58,7 +61,8 @@
}
private <T> void addNestedSetToFingerprintSlow(
- MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet) {
+ MapFn<? super T> mapFn, Fingerprint fingerprint, NestedSet<T> nestedSet)
+ throws CommandLineExpansionException, InterruptedException {
for (T object : nestedSet.toList()) {
addToFingerprint(mapFn, fingerprint, object);
}
@@ -75,7 +79,8 @@
CommandLineItem.MapFn<? super T> mapFn,
Fingerprint fingerprint,
DigestMap digestMap,
- Object children) {
+ Object children)
+ throws CommandLineExpansionException, InterruptedException {
if (children instanceof Object[]) {
if (!digestMap.readDigest(children, fingerprint)) {
Fingerprint childrenFingerprint = new Fingerprint();
@@ -91,7 +96,8 @@
@VisibleForTesting
<T> void addToFingerprint(
- CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, T object) {
+ CommandLineItem.MapFn<? super T> mapFn, Fingerprint fingerprint, T object)
+ throws CommandLineExpansionException, InterruptedException {
mapFn.expandToCommandLine(object, fingerprint::addString);
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BUILD b/src/main/java/com/google/devtools/build/lib/query2/BUILD
index 76c4385..10f6e32 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/query2/BUILD
@@ -25,6 +25,7 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/parameter_file_write_action",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
index b95ce64..a39ea46 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
@@ -98,7 +98,7 @@
}
private void writeAction(ActionAnalysisMetadata action, PrintStream printStream)
- throws IOException, CommandLineExpansionException {
+ throws IOException, CommandLineExpansionException, InterruptedException {
if (options.includeParamFiles && action instanceof ParameterFileWriteAction) {
ParameterFileWriteAction parameterFileWriteAction = (ParameterFileWriteAction) action;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 641634b..2aa4fbe 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -36,6 +36,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
"//src/main/java/com/google/devtools/build/lib/actions:middleman_type",
@@ -50,7 +51,6 @@
"//src/main/java/com/google/devtools/build/lib/analysis:buildinfo/build_info_collection",
"//src/main/java/com/google/devtools/build/lib/analysis:buildinfo/build_info_key",
"//src/main/java/com/google/devtools/build/lib/analysis:compilation_helper",
- "//src/main/java/com/google/devtools/build/lib/analysis:config/auto_cpu_converter",
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
"//src/main/java/com/google/devtools/build/lib/analysis:config/compilation_mode",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
index 2a8c200..f64d8c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
@@ -21,6 +21,7 @@
import com.google.common.collect.Streams;
import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.bugreport.BugReport;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.Depset;
@@ -118,7 +119,8 @@
Linkstamp(
Artifact artifact,
NestedSet<Artifact> declaredIncludeSrcs,
- ActionKeyContext actionKeyContext) {
+ ActionKeyContext actionKeyContext)
+ throws CommandLineExpansionException, InterruptedException {
this.artifact = Preconditions.checkNotNull(artifact);
this.declaredIncludeSrcs = Preconditions.checkNotNull(declaredIncludeSrcs);
Fingerprint fp = new Fingerprint();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index f6ce7c0..2b6e7f7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -21,6 +21,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionRegistry;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RuleErrorConsumer;
@@ -372,14 +373,19 @@
}
public CcLinkingContext buildCcLinkingContextFromLibrariesToLink(
- List<LibraryToLink> librariesToLink, CcCompilationContext ccCompilationContext) {
+ List<LibraryToLink> librariesToLink, CcCompilationContext ccCompilationContext)
+ throws InterruptedException {
ImmutableList.Builder<Linkstamp> linkstampBuilder = ImmutableList.builder();
for (Artifact linkstamp : linkstamps.build().toList()) {
- linkstampBuilder.add(
- new Linkstamp(
- linkstamp,
- ccCompilationContext.getDeclaredIncludeSrcs(),
- actionConstructionContext.getActionKeyContext()));
+ try {
+ linkstampBuilder.add(
+ new Linkstamp( // throws InterruptedException
+ linkstamp,
+ ccCompilationContext.getDeclaredIncludeSrcs(),
+ actionConstructionContext.getActionKeyContext()));
+ } catch (CommandLineExpansionException ex) {
+ throw new AssertionError("unexpected failure of command line expansion", ex);
+ }
}
CcLinkingContext ccLinkingContext = CcLinkingContext.EMPTY;
if (!neverlink) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 0a7741c..5388813 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -933,7 +933,7 @@
@Override
public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CppCompileInfo.Builder info = CppCompileInfo.newBuilder();
info.setTool(compileCommandLine.getToolPath());
@@ -1316,7 +1316,7 @@
ActionKeyContext actionKeyContext,
@Nullable Artifact.ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
computeKey(
actionKeyContext,
fp,
@@ -1349,7 +1349,8 @@
NestedSet<PathFragment> declaredIncludeDirs,
List<PathFragment> builtInIncludeDirectories,
NestedSet<Artifact> inputsForInvalidation,
- boolean validateTopLevelHeaderInclusions) {
+ boolean validateTopLevelHeaderInclusions)
+ throws CommandLineExpansionException, InterruptedException {
fp.addUUID(actionClassId);
env.addTo(fp);
fp.addStringMap(environmentVariables);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
index 55403d2..8e1477e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
@@ -153,7 +153,7 @@
ActionKeyContext actionKeyContext,
@Nullable Artifact.ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CompileCommandLine commandLine =
CppCompileAction.buildCommandLine(
sourceTreeArtifact,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index 4328f03..dd8f8bc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -330,7 +330,7 @@
@Override
public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
// The uses of getLinkConfiguration in this method may not be consistent with the computed key.
// I.e., this may be incrementally incorrect.
CppLinkInfo.Builder info = CppLinkInfo.newBuilder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java
index 118d0c3..b2341cc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendAction.java
@@ -210,7 +210,8 @@
protected void computeKey(
ActionKeyContext actionKeyContext,
@Nullable Artifact.ArtifactExpander artifactExpander,
- Fingerprint fp) {
+ Fingerprint fp)
+ throws InterruptedException {
fp.addString(GUID);
try {
fp.addStrings(getArguments());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 3bc3b51..8e7c201 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -189,7 +189,7 @@
ActionKeyContext actionKeyContext,
@Nullable Artifact.ArtifactExpander artifactExpander,
Fingerprint fp)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
fp.addUUID(GUID);
fp.addInt(classpathMode.ordinal());
executableLine.addToFingerprint(actionKeyContext, artifactExpander, fp);
@@ -265,7 +265,7 @@
ActionExecutionContext actionExecutionContext,
ReducedClasspath reducedClasspath,
boolean fallback)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CustomCommandLine.Builder classpathLine = CustomCommandLine.builder();
if (fallback) {
classpathLine.addExecPaths("--classpath", transitiveInputs);
@@ -304,7 +304,7 @@
}
private JavaSpawn getFullSpawn(ActionExecutionContext actionExecutionContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CommandLines.ExpandedCommandLines expandedCommandLines =
getCommandLines()
.expand(
@@ -439,7 +439,7 @@
@Override
public ExtraActionInfo.Builder getExtraActionInfo(ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ExtraActionInfo.Builder builder = super.getExtraActionInfo(actionKeyContext);
CommandLines commandLinesWithoutExecutable =
CommandLines.builder()
@@ -501,7 +501,7 @@
}
@Override
- public Sequence<String> getStarlarkArgv() throws EvalException {
+ public Sequence<String> getStarlarkArgv() throws EvalException, InterruptedException {
try {
return StarlarkList.immutableCopyOf(getArguments());
} catch (CommandLineExpansionException ex) {
@@ -516,7 +516,7 @@
}
@Override
- public List<String> getArguments() throws CommandLineExpansionException {
+ public List<String> getArguments() throws CommandLineExpansionException, InterruptedException {
return ImmutableList.copyOf(getCommandLines().allArguments());
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD b/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
index 0d5417c..d67208f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
@@ -28,6 +28,7 @@
"//src/main/java/com/google/devtools/build/lib:runtime/blaze_command_result",
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:middleman_type",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_options",
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java
index 9c471c5..9479c9f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java
@@ -217,6 +217,10 @@
actionGraph,
env.getSkyframeExecutor().getActionKeyContext());
}
+ } catch (InterruptedException unused) {
+ env.getReporter().handle(Event.error("Interrupted"));
+ // TODO(b/173521404): report code for INTERRUPTED.
+ throw new PrintActionException("Interrupted", Code.COMMAND_LINE_EXPANSION_FAILURE);
} catch (CommandLineExpansionException e) {
String message = "Error expanding command line: " + e;
env.getReporter().handle(Event.error(null, message));
@@ -237,7 +241,7 @@
ActionGraph actionGraph,
ActionKeyContext actionKeyContext,
List<String> files)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
Set<String> filesDesired = new LinkedHashSet<>(files);
ActionFilter filter = new DefaultActionFilter(filesDesired, actionMnemonicMatcher);
gatherActionsForFile(configuredTarget, filter, env, actionGraph, actionKeyContext);
@@ -248,7 +252,7 @@
Target target,
ActionGraph actionGraph,
ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
if (!(target instanceof Rule)) {
return;
}
@@ -283,7 +287,7 @@
CommandEnvironment env,
ActionGraph actionGraph,
ActionKeyContext actionKeyContext)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
NestedSet<Artifact> artifacts = OutputGroupInfo.get(configuredTarget)
.getOutputGroup(OutputGroupInfo.FILES_TO_COMPILE);
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index feaa567..bd586a8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -173,11 +173,12 @@
/**
* Compute the arguments the binary should be run with by concatenating the arguments in its
- * {@code args=} attribute and the arguments on the Blaze command line.
+ * {@code args} attribute and the arguments on the Blaze command line.
*/
+ // TODO(bazel-team): audit the use of null values by caller. It looks unsafe.
@Nullable
- private List<String> computeArgs(CommandEnvironment env, ConfiguredTarget targetToRun,
- List<String> commandLineArgs) {
+ private List<String> computeArgs(
+ CommandEnvironment env, ConfiguredTarget targetToRun, List<String> commandLineArgs) {
List<String> args = Lists.newArrayList();
FilesToRunProvider provider = targetToRun.getProvider(FilesToRunProvider.class);
@@ -186,6 +187,10 @@
CommandLine targetArgs = runfilesSupport.getArgs();
try {
Iterables.addAll(args, targetArgs.arguments());
+ } catch (InterruptedException ex) {
+ // TODO(b/173521404): report a specific FailureDetail for "interrupted".
+ env.getReporter().handle(Event.error("Interrupted while expanding target command line"));
+ return null;
} catch (CommandLineExpansionException e) {
env.getReporter().handle(Event.error("Could not expand target command line: " + e));
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index c853e4c..d10bbfc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -222,6 +222,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
"//src/main/java/com/google/devtools/build/lib/actions:fileset_output_symlink",
"//src/main/java/com/google/devtools/build/lib/actionsketch:action_sketch",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java
index 7357544..eba13d4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java
@@ -122,7 +122,7 @@
}
private void dumpSingleAction(ConfiguredTarget configuredTarget, ActionAnalysisMetadata action)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
// Store the content of param files.
if (includeParamFiles && (action instanceof ParameterFileWriteAction)) {
@@ -238,7 +238,7 @@
}
public void dumpAspect(AspectValue aspectValue, ConfiguredTargetValue configuredTargetValue)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
return;
@@ -249,7 +249,7 @@
}
public void dumpConfiguredTarget(ConfiguredTargetValue configuredTargetValue)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
return;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
index 960b615..a201b7a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
@@ -117,7 +117,7 @@
}
private void dumpSingleAction(ConfiguredTarget configuredTarget, ActionAnalysisMetadata action)
- throws CommandLineExpansionException, IOException {
+ throws CommandLineExpansionException, InterruptedException, IOException {
// Store the content of param files.
if (includeParamFiles && (action instanceof ParameterFileWriteAction)) {
@@ -235,7 +235,7 @@
}
public void dumpAspect(AspectValue aspectValue, ConfiguredTargetValue configuredTargetValue)
- throws CommandLineExpansionException, IOException {
+ throws CommandLineExpansionException, InterruptedException, IOException {
ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
return;
@@ -246,7 +246,7 @@
}
public void dumpConfiguredTarget(ConfiguredTargetValue configuredTargetValue)
- throws CommandLineExpansionException, IOException {
+ throws CommandLineExpansionException, InterruptedException, IOException {
ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
return;
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
index c184c21..a6510bd 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/ActionApi.java
@@ -69,7 +69,7 @@
structField = true,
allowReturnNones = true)
@Nullable
- Sequence<String> getStarlarkArgv() throws EvalException;
+ Sequence<String> getStarlarkArgv() throws EvalException, InterruptedException;
@StarlarkMethod(
name = "args",
@@ -85,7 +85,7 @@
structField = true,
allowReturnNones = true)
@Nullable
- Sequence<CommandLineArgsApi> getStarlarkArgs() throws EvalException;
+ Sequence<CommandLineArgsApi> getStarlarkArgs() throws EvalException, InterruptedException;
/**
* If the action writes a file whose content is known at analysis time, returns that content;
@@ -110,7 +110,7 @@
structField = true,
allowReturnNones = true)
@Nullable
- String getStarlarkContent() throws IOException, EvalException;
+ String getStarlarkContent() throws IOException, EvalException, InterruptedException;
@StarlarkMethod(
name = "substitutions",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
index d962300..07bff36 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
@@ -820,7 +820,7 @@
}
@Test
- public void testCombinedArgs() {
+ public void testCombinedArgs() throws Exception {
CustomCommandLine cl =
builder()
.add("--arg")
@@ -889,7 +889,7 @@
}
@Test
- public void testTreeFileArtifactExecPathArgs() {
+ public void testTreeFileArtifactExecPathArgs() throws Exception {
SpecialArtifact treeArtifactOne = createTreeArtifact("myArtifact/treeArtifact1");
SpecialArtifact treeArtifactTwo = createTreeArtifact("myArtifact/treeArtifact2");
@@ -948,7 +948,7 @@
}
@Test
- public void testKeyComputation() {
+ public void testKeyComputation() throws Exception {
NestedSet<String> values = NestedSetBuilder.<String>stableOrder().add("a").add("b").build();
ImmutableList<CustomCommandLine> commandLines =
ImmutableList.<CustomCommandLine>builder()
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/BUILD
index 5a32602..41d1afb 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BUILD
@@ -39,6 +39,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/actions:execution_requirements",
"//src/main/java/com/google/devtools/build/lib/actions:fileset_output_symlink",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/binary_file_write_action",
@@ -70,7 +71,6 @@
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_provider",
"//src/main/java/com/google/devtools/build/lib/analysis:config/host_transition",
- "//src/main/java/com/google/devtools/build/lib/analysis:config/invalid_configuration_exception",
"//src/main/java/com/google/devtools/build/lib/analysis:config/per_label_options",
"//src/main/java/com/google/devtools/build/lib/analysis:config/run_under",
"//src/main/java/com/google/devtools/build/lib/analysis:config/run_under_converter",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
index 767a4ce..cd19ef5 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD
@@ -40,6 +40,7 @@
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifact_owner",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/parameter_file_write_action",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_options",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index a35d746..34237f5 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -798,7 +798,7 @@
/** Locates the first parameter file used by the action and returns its args. */
@Nullable
protected final Iterable<String> paramFileArgsForAction(Action action)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CommandLine commandLine = paramFileCommandLineForAction(action);
return commandLine != null ? commandLine.arguments() : null;
}
@@ -810,7 +810,7 @@
*/
@Nullable
protected final Iterable<String> paramFileArgsOrActionArgs(CommandAction action)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
CommandLine commandLine = paramFileCommandLineForAction(action);
return commandLine != null ? commandLine.arguments() : action.getArguments();
}
@@ -818,7 +818,7 @@
/** Locates the first parameter file used by the action and returns its contents. */
@Nullable
protected final String paramFileStringContentsForAction(Action action)
- throws CommandLineExpansionException, IOException {
+ throws CommandLineExpansionException, InterruptedException, IOException {
if (action instanceof SpawnAction) {
CommandLines commandLines = ((SpawnAction) action).getCommandLines();
for (CommandLineAndParamFileInfo pair : commandLines.getCommandLines()) {
@@ -920,7 +920,7 @@
}
protected final List<String> getGeneratingSpawnActionArgs(Artifact artifact)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
SpawnAction a = getGeneratingSpawnAction(artifact);
return a.getArguments();
}
diff --git a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCacheTest.java b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCacheTest.java
index 7de57e5..89457fd 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCacheTest.java
@@ -19,6 +19,7 @@
import com.google.common.base.Objects;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
+import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.CommandLineItem;
import com.google.devtools.build.lib.actions.CommandLineItem.CapturingMapFn;
import com.google.devtools.build.lib.actions.CommandLineItem.MapFn;
@@ -37,7 +38,8 @@
private Multiset<Object> fingerprinted = HashMultiset.create();
@Override
- <T> void addToFingerprint(MapFn<? super T> mapFn, Fingerprint fingerprint, T object) {
+ <T> void addToFingerprint(MapFn<? super T> mapFn, Fingerprint fingerprint, T object)
+ throws CommandLineExpansionException, InterruptedException {
super.addToFingerprint(mapFn, fingerprint, object);
fingerprinted.add(object);
}
@@ -51,7 +53,7 @@
}
@Test
- public void testBasic() {
+ public void testBasic() throws Exception {
NestedSet<String> nestedSet = NestedSetBuilder.<String>stableOrder().add("a").add("b").build();
// This test does reimplement the inner algorithm of the cache, but serves
@@ -72,7 +74,7 @@
}
@Test
- public void testOnlyFingerprintedOncePerString() {
+ public void testOnlyFingerprintedOncePerString() throws Exception {
// Leaving leaf nodes with a single item will defeat this check
// The nested set builder will effectively inline single-item objects into their parent,
// meaning they will get hashed multiple times.
@@ -93,7 +95,7 @@
}
@Test
- public void testMapFn() {
+ public void testMapFn() throws Exception {
// Make sure that the map function assigns completely different key spaces
NestedSet<String> a = NestedSetBuilder.<String>stableOrder().add("a0").add("a1").build();
@@ -118,7 +120,7 @@
}
@Test
- public void testMultipleInstancesOfMapFnThrows() {
+ public void testMultipleInstancesOfMapFnThrows() throws Exception {
NestedSet<String> nestedSet =
NestedSetBuilder.<String>stableOrder().add("a0").add("a1").build();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
index 937ff3d..5f3e92a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
@@ -371,7 +371,7 @@
}
private void checkDepsCheckerOutputArtifact(Artifact artifact, String expectedCheckingMode)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
assertThat(artifact.isTreeArtifact()).isFalse();
assertThat(artifact.getExecPathString()).endsWith("_aar/bar/jdeps.proto");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
index cf03432..cd8ae47 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
@@ -118,7 +118,7 @@
}
protected List<String> resourceArguments(ValidatedAndroidResources resource)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
return getGeneratingSpawnActionArgs(resource.getApk());
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
index 7b4e976..9d2cba0 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -18,6 +18,7 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
"//src/main/java/com/google/devtools/build/lib/cmdline",
@@ -77,6 +78,7 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
"//src/main/java/com/google/devtools/build/lib/analysis:file_provider",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
index 365ad74..c7f6936 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
@@ -651,8 +651,8 @@
shard_count = 4,
deps = [
":StarlarkCcCommonTestHelper",
- "//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
"//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilderTest.java b/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilderTest.java
index 8432fbb..32ac28f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilderTest.java
@@ -146,7 +146,7 @@
}
@Test
- public void commandline_derivedArtifact() {
+ public void commandline_derivedArtifact() throws Exception {
// Verify that the command line contains the correct path to a generated protocol buffers.
CustomCommandLine cmdLine =
createCommandLineFromToolchains(
@@ -395,7 +395,7 @@
* the external repo root, and physical should be the physical file location.
*/
@Test
- public void testIncludeMapsOfExternalFiles() {
+ public void testIncludeMapsOfExternalFiles() throws Exception {
assertThat(
protoArgv(
/* transitiveSources */ ImmutableList.of(
@@ -439,7 +439,8 @@
private static Iterable<String> protoArgv(
Iterable<ProtoSource> transitiveSources,
- @Nullable Iterable<ProtoSource> importableProtoSources) {
+ @Nullable Iterable<ProtoSource> importableProtoSources)
+ throws Exception {
CustomCommandLine.Builder commandLine = CustomCommandLine.builder();
NestedSet<ProtoSource> importableProtoSourceSet =
importableProtoSources != null
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/BUILD b/src/test/java/com/google/devtools/build/lib/starlark/BUILD
index c126752..b12055a 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/starlark/BUILD
@@ -28,6 +28,7 @@
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
+ "//src/main/java/com/google/devtools/build/lib/actions:commandline_item",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/parameter_file_write_action",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/substitution",
"//src/main/java/com/google/devtools/build/lib/analysis:actions/template_expansion_action",
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
index 297ebe4..f060623 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java
@@ -3086,12 +3086,13 @@
};
}
- private String getDigest(CommandLine commandLine) throws CommandLineExpansionException {
+ private String getDigest(CommandLine commandLine)
+ throws CommandLineExpansionException, InterruptedException {
return getDigest(commandLine, /*artifactExpander=*/ null);
}
private String getDigest(CommandLine commandLine, ArtifactExpander artifactExpander)
- throws CommandLineExpansionException {
+ throws CommandLineExpansionException, InterruptedException {
Fingerprint fingerprint = new Fingerprint();
commandLine.addToFingerprint(actionKeyContext, artifactExpander, fingerprint);
return fingerprint.hexDigestAndReset();