From d1f4a167f8080d460dd532eb83b87ab0d0eb4f86 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 25 Oct 2016 14:51:55 +0000 Subject: Add a new concept of failure causes Not all possible reasons for failure are uniquely identified by a label. Therefore, add a new data type describing possible root causes of failures and use it. The new type is added in causes/*.java and coresponds to Haskell's one-line definition data Cause = LabelCause Label | ActionCause Path Label deriving Show With future clean up of other failure causes inadequately described by a label, we expect that type to be extended by new constructors (i.e., new classes implementing Cause). -- Change-Id: I6fec74c78cec6abb9c10e32743b05a792888fead Reviewed-on: https://bazel-review.googlesource.com/#/c/6617 MOS_MIGRATED_REVID=137156390 --- src/BUILD | 1 + src/main/java/com/google/devtools/build/lib/BUILD | 2 ++ .../lib/actions/ActionExecutionException.java | 41 ++++++++++++++-------- .../com/google/devtools/build/lib/actions/BUILD | 1 + .../build/lib/actions/BuildFailedException.java | 33 ++++++++++------- .../build/lib/analysis/AspectCompleteEvent.java | 16 ++++----- .../build/lib/analysis/TargetCompleteEvent.java | 19 +++++----- .../devtools/build/lib/causes/ActionFailed.java | 41 ++++++++++++++++++++++ .../com/google/devtools/build/lib/causes/BUILD | 15 ++++++++ .../google/devtools/build/lib/causes/Cause.java | 25 +++++++++++++ .../devtools/build/lib/causes/LabelCause.java | 35 ++++++++++++++++++ .../lib/skyframe/ActionExecutionFunction.java | 18 ++++++---- .../build/lib/skyframe/CompletionFunction.java | 31 ++++++++-------- 13 files changed, 208 insertions(+), 70 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/causes/ActionFailed.java create mode 100644 src/main/java/com/google/devtools/build/lib/causes/BUILD create mode 100644 src/main/java/com/google/devtools/build/lib/causes/Cause.java create mode 100644 src/main/java/com/google/devtools/build/lib/causes/LabelCause.java diff --git a/src/BUILD b/src/BUILD index fe5c15cb59..53143be660 100644 --- a/src/BUILD +++ b/src/BUILD @@ -299,6 +299,7 @@ filegroup( "//src/main/cpp:srcs", "//src/main/java/com/google/devtools/build/docgen:srcs", "//src/main/java/com/google/devtools/build/lib:srcs", + "//src/main/java/com/google/devtools/build/lib/causes:srcs", "//src/main/java/com/google/devtools/build/skyframe:srcs", "//src/main/java/com/google/devtools/common/options:srcs", "//src/main/java/com/google/devtools/skylark:srcs", diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 111786eee2..0478519a09 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -22,6 +22,7 @@ filegroup( "//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader:srcs", "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:srcs", "//src/main/java/com/google/devtools/build/lib/buildeventstream/transports:srcs", + "//src/main/java/com/google/devtools/build/lib/causes:srcs", "//src/main/java/com/google/devtools/build/lib/cmdline:srcs", "//src/main/java/com/google/devtools/build/lib/query2:srcs", "//src/main/java/com/google/devtools/build/lib/remote:srcs", @@ -520,6 +521,7 @@ java_library( ":util", ":vfs", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/causes", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/common/options", diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java index 88efb974b8..315163bcba 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java @@ -13,14 +13,14 @@ // limitations under the License. package com.google.devtools.build.lib.actions; -import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.causes.ActionFailed; +import com.google.devtools.build.lib.causes.Cause; 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; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.util.ExitCode; - import javax.annotation.Nullable; /** @@ -31,7 +31,7 @@ import javax.annotation.Nullable; public class ActionExecutionException extends Exception { private final Action action; - private final NestedSet