From 7a0ef3b00eec3da2e2640d4d12f977bff3b52648 Mon Sep 17 00:00:00 2001 From: Emil Kattainen Date: Tue, 24 May 2022 08:15:18 +0300 Subject: [PATCH] Implement --remote_print_execution_messages Adds a flag for controlling when to print messages from remotely executed actions. --- .../build/lib/remote/RemoteSpawnRunner.java | 9 ++++++- .../lib/remote/options/RemoteOptions.java | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java index 01c01ae8688011..d1e4b0d5e21095 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java +++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java @@ -61,6 +61,7 @@ import com.google.devtools.build.lib.remote.common.BulkTransferException; import com.google.devtools.build.lib.remote.common.OperationObserver; import com.google.devtools.build.lib.remote.options.RemoteOptions; +import com.google.devtools.build.lib.remote.options.RemoteOptions.ExecutionMessagePrintMode; import com.google.devtools.build.lib.remote.util.Utils; import com.google.devtools.build.lib.remote.util.Utils.InMemoryOutput; import com.google.devtools.build.lib.sandbox.SandboxHelpers; @@ -274,7 +275,13 @@ public SpawnResult exec(Spawn spawn, SpawnExecutionContext context) FileOutErr outErr = context.getFileOutErr(); String message = result.getMessage(); - if (!result.success() && !message.isEmpty()) { + boolean printMessage = (!result.success() && + remoteOptions.remotePrintExecutionMessages == ExecutionMessagePrintMode.FAILURE || + result.success() && + remoteOptions.remotePrintExecutionMessages == ExecutionMessagePrintMode.SUCCESS || + remoteOptions.remotePrintExecutionMessages == ExecutionMessagePrintMode.ALL) + && !message.isEmpty(); + if (printMessage) { outErr.printErr(message + "\n"); } diff --git a/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java b/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java index cf5621ba9b5604..507a221b96cd4a 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java +++ b/src/main/java/com/google/devtools/build/lib/remote/options/RemoteOptions.java @@ -574,6 +574,19 @@ public RemoteOutputsStrategyConverter() { help = "Maximum number of open files allowed during BEP artifact upload.") public int maximumOpenFiles; + @Option( + name = "remote_print_execution_messages", + defaultValue = "failure", + converter = ExecutionMessagePrintMode.Converter.class, + category = "remote", + documentationCategory = OptionDocumentationCategory.LOGGING, + effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, + help = + "Choose when to print remote execution messages. Valid values are `failure`, " + + "to print only on failures, `success` to print only on successes and " + + "`all` to print always.") + public ExecutionMessagePrintMode remotePrintExecutionMessages; + // The below options are not configurable by users, only tests. // This is part of the effort to reduce the overall number of flags. @@ -643,4 +656,18 @@ private static FailureDetail createFailureDetail(String message, Code detailedCo .setRemoteExecution(RemoteExecution.newBuilder().setCode(detailedCode)) .build(); } + + /** An enum for specifying different modes for printing remote execution messages. */ + public enum ExecutionMessagePrintMode { + FAILURE, // Print execution messages only on failure + SUCCESS, // Print execution messages only on success + ALL; // Print execution messages always + + /** Converts to {@link ExecutionMessagePrintMode}. */ + public static class Converter extends EnumConverter { + public Converter() { + super(ExecutionMessagePrintMode.class, "execution message print mode"); + } + } + } }