aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/CommandExecutor.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/server/ServerCommand.java10
5 files changed, 55 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
index 7d275a4cb0..f7fadb52ba 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -33,7 +33,6 @@ import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.flags.InvocationPolicyEnforcer;
-import com.google.devtools.build.lib.flags.InvocationPolicyParser;
import com.google.devtools.build.lib.runtime.commands.ProjectFileSupport;
import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.util.AbruptExitException;
@@ -246,7 +245,12 @@ public class BlazeCommandDispatcher {
* client process, or throws {@link ShutdownBlazeServerException} to
* indicate that a command wants to shutdown the Blaze server.
*/
- int exec(List<String> args, OutErr outErr, LockingMode lockingMode, String clientDescription,
+ int exec(
+ InvocationPolicy invocationPolicy,
+ List<String> args,
+ OutErr outErr,
+ LockingMode lockingMode,
+ String clientDescription,
long firstContactTime) throws ShutdownBlazeServerException, InterruptedException {
OriginalCommandLineEvent originalCommandLine = new OriginalCommandLineEvent(args);
Preconditions.checkNotNull(clientDescription);
@@ -303,8 +307,8 @@ public class BlazeCommandDispatcher {
outErr.printErrLn("Server shut down " + shutdownReason);
return ExitCode.LOCAL_ENVIRONMENTAL_ERROR.getNumericExitCode();
}
- return execExclusively(
- originalCommandLine, args, outErr, firstContactTime, commandName, command, waitTimeInMs);
+ return execExclusively(originalCommandLine, invocationPolicy, args, outErr, firstContactTime,
+ commandName, command, waitTimeInMs);
} catch (ShutdownBlazeServerException e) {
shutdownReason = "explicitly by client " + currentClientDescription;
throw e;
@@ -318,6 +322,7 @@ public class BlazeCommandDispatcher {
private int execExclusively(
OriginalCommandLineEvent originalCommandLine,
+ InvocationPolicy invocationPolicy,
List<String> args,
OutErr outErr,
long firstContactTime,
@@ -395,12 +400,7 @@ public class BlazeCommandDispatcher {
InvocationPolicy combinedPolicy =
InvocationPolicy.newBuilder()
.mergeFrom(runtime.getModuleInvocationPolicy())
- .mergeFrom(
- InvocationPolicyParser.parsePolicy(
- getRuntime()
- .getStartupOptionsProvider()
- .getOptions(BlazeServerStartupOptions.class)
- .invocationPolicy))
+ .mergeFrom(invocationPolicy)
.build();
InvocationPolicyEnforcer optionsPolicyEnforcer = new InvocationPolicyEnforcer(combinedPolicy);
optionsPolicyEnforcer.enforce(optionsParser, commandName);
@@ -546,8 +546,8 @@ public class BlazeCommandDispatcher {
@VisibleForTesting
public int exec(List<String> args, LockingMode lockingMode, String clientDescription,
OutErr originalOutErr) throws ShutdownBlazeServerException, InterruptedException {
- return exec(args, originalOutErr, LockingMode.ERROR_OUT, clientDescription,
- runtime.getClock().currentTimeMillis());
+ return exec(InvocationPolicy.getDefaultInstance(), args, originalOutErr, LockingMode.ERROR_OUT,
+ clientDescription, runtime.getClock().currentTimeMillis());
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index cf8aff0bad..10812a4c01 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.buildeventstream.PathConverter;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.OutputFilter;
import com.google.devtools.build.lib.flags.CommandNameCache;
+import com.google.devtools.build.lib.flags.InvocationPolicyParser;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.RuleClassProvider;
@@ -747,13 +748,17 @@ public final class BlazeRuntime {
+ commandLineOptions.getStartupArgs());
BlazeRuntime runtime;
+ InvocationPolicy policy;
try {
runtime = newRuntime(modules, commandLineOptions.getStartupArgs(), null);
+ policy = InvocationPolicyParser.parsePolicy(
+ runtime.getStartupOptionsProvider().getOptions(BlazeServerStartupOptions.class)
+ .invocationPolicy);
} catch (OptionsParsingException e) {
- OutErr.SYSTEM_OUT_ERR.printErr(e.getMessage());
+ OutErr.SYSTEM_OUT_ERR.printErrLn(e.getMessage());
return ExitCode.COMMAND_LINE_ERROR.getNumericExitCode();
} catch (AbruptExitException e) {
- OutErr.SYSTEM_OUT_ERR.printErr(e.getMessage());
+ OutErr.SYSTEM_OUT_ERR.printErrLn(e.getMessage());
return e.getExitCode().getNumericExitCode();
}
@@ -761,7 +766,7 @@ public final class BlazeRuntime {
try {
LOG.info(getRequestLogString(commandLineOptions.getOtherArgs()));
- return dispatcher.exec(commandLineOptions.getOtherArgs(), OutErr.SYSTEM_OUT_ERR,
+ return dispatcher.exec(policy, commandLineOptions.getOtherArgs(), OutErr.SYSTEM_OUT_ERR,
LockingMode.ERROR_OUT, "batch client", runtime.getClock().currentTimeMillis());
} catch (BlazeCommandDispatcher.ShutdownBlazeServerException e) {
return e.getExitStatus();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandExecutor.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandExecutor.java
index 6f5b7b6e8b..3b70c8656a 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandExecutor.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.runtime;
+import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.server.ServerCommand;
import com.google.devtools.build.lib.util.io.OutErr;
import java.io.PrintWriter;
@@ -39,12 +40,18 @@ public class CommandExecutor implements ServerCommand {
}
@Override
- public int exec(List<String> args, OutErr outErr, BlazeCommandDispatcher.LockingMode lockingMode,
- String clientDescription, long firstContactTime) throws InterruptedException {
+ public int exec(
+ InvocationPolicy invocationPolicy,
+ List<String> args,
+ OutErr outErr,
+ BlazeCommandDispatcher.LockingMode lockingMode,
+ String clientDescription,
+ long firstContactTime) throws InterruptedException {
LOG.info(BlazeRuntime.getRequestLogString(args));
try {
- return dispatcher.exec(args, outErr, lockingMode, clientDescription, firstContactTime);
+ return dispatcher.exec(invocationPolicy, args, outErr, lockingMode, clientDescription,
+ firstContactTime);
} catch (BlazeCommandDispatcher.ShutdownBlazeServerException e) {
if (e.getCause() != null) {
StringWriter message = new StringWriter();
diff --git a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
index 19e038f552..676337e8c6 100644
--- a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
@@ -22,8 +22,10 @@ import com.google.common.net.InetAddresses;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.common.util.concurrent.Uninterruptibles;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.flags.InvocationPolicyParser;
import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher.LockingMode;
import com.google.devtools.build.lib.runtime.CommandExecutor;
+import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.server.CommandProtos.CancelRequest;
import com.google.devtools.build.lib.server.CommandProtos.CancelResponse;
import com.google.devtools.build.lib.server.CommandProtos.PingRequest;
@@ -38,6 +40,7 @@ import com.google.devtools.build.lib.util.ThreadUtils;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.common.options.OptionsParsingException;
import com.google.protobuf.ByteString;
import io.grpc.Server;
import io.grpc.StatusRuntimeException;
@@ -840,14 +843,20 @@ public class GrpcServerImpl implements RPCServer {
new RpcOutputStream(command.id, responseCookie, StreamType.STDOUT, sink),
new RpcOutputStream(command.id, responseCookie, StreamType.STDERR, sink));
- exitCode =
- commandExecutor.exec(
- args.build(),
- rpcOutErr,
- request.getBlockForLock() ? LockingMode.WAIT : LockingMode.ERROR_OUT,
- request.getClientDescription(),
- clock.currentTimeMillis());
-
+ try {
+ InvocationPolicy policy = InvocationPolicyParser.parsePolicy(request.getInvocationPolicy());
+ exitCode =
+ commandExecutor.exec(
+ policy,
+ args.build(),
+ rpcOutErr,
+ request.getBlockForLock() ? LockingMode.WAIT : LockingMode.ERROR_OUT,
+ request.getClientDescription(),
+ clock.currentTimeMillis());
+ } catch (OptionsParsingException e) {
+ rpcOutErr.printErrLn(e.getMessage());
+ exitCode = ExitCode.COMMAND_LINE_ERROR.getNumericExitCode();
+ }
} catch (InterruptedException e) {
exitCode = ExitCode.INTERRUPTED.getNumericExitCode();
commandId = ""; // The default value, the client will ignore it
diff --git a/src/main/java/com/google/devtools/build/lib/server/ServerCommand.java b/src/main/java/com/google/devtools/build/lib/server/ServerCommand.java
index 7b0a075f75..ef5f727bdb 100644
--- a/src/main/java/com/google/devtools/build/lib/server/ServerCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/server/ServerCommand.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.server;
import com.google.devtools.build.lib.runtime.BlazeCommandDispatcher;
+import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.util.io.OutErr;
import java.util.List;
@@ -27,8 +28,13 @@ public interface ServerCommand {
* Executes the request, writing any output or error messages into err.
* Returns 0 on success; any other value or exception indicates an error.
*/
- int exec(List<String> args, OutErr outErr, BlazeCommandDispatcher.LockingMode lockingMode,
- String clientDescription, long firstContactTime) throws InterruptedException;
+ int exec(
+ InvocationPolicy policy,
+ List<String> args,
+ OutErr outErr,
+ BlazeCommandDispatcher.LockingMode lockingMode,
+ String clientDescription,
+ long firstContactTime) throws InterruptedException;
/**
* Whether the server needs to be shut down.