Alert whenever an ActionLookupValue is missing. In practice, this should never happen, and probably indicates a crash coming very soon.
PiperOrigin-RevId: 244428074
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 f5874ea..047587d 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
@@ -57,6 +57,7 @@
import com.google.devtools.build.lib.actions.extra.CppCompileInfo;
import com.google.devtools.build.lib.actions.extra.EnvironmentVariable;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
+import com.google.devtools.build.lib.bugreport.BugReport;
import com.google.devtools.build.lib.cmdline.LabelConstants;
import com.google.devtools.build.lib.collect.CollectionUtils;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -1701,6 +1702,13 @@
Iterables.transform(
usedModules, module -> (ActionLookupKey) module.getArtifactOwner()));
if (env.valuesMissing()) {
+ ImmutableList<SkyKey> missingKeys =
+ actionLookupValues.entrySet().stream()
+ .filter(e -> e.getValue() == null)
+ .map(Map.Entry::getKey)
+ .collect(ImmutableList.toImmutableList());
+ BugReport.sendBugReport(
+ new IllegalStateException("Missing keys: " + missingKeys + ". Modules " + usedModules));
return null;
}
ArrayList<ActionLookupData> executionValueLookups = new ArrayList<>(usedModules.size());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
index 3b0f6d9..d8b5b5f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException;
import com.google.devtools.build.lib.actions.ArtifactSkyKey;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
+import com.google.devtools.build.lib.bugreport.BugReport;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -58,6 +59,7 @@
// Because of the phase boundary separating analysis and execution, all needed
// ActionLookupValues must have already been evaluated, so a missing ActionLookupValue is
// unexpected. However, we tolerate this case.
+ BugReport.sendBugReport(new IllegalStateException("Unexpected absent value for " + key));
return null;
}
ActionTemplate<?> actionTemplate = value.getActionTemplate(key.getActionIndex());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
index 9a7d7a6..503a124 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
@@ -22,6 +22,7 @@
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
import com.google.devtools.build.lib.analysis.test.TestProvider;
+import com.google.devtools.build.lib.bugreport.BugReport;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
@@ -58,6 +59,16 @@
ActionLookupValue actionLookupValue =
ArtifactFunction.getActionLookupValue(actionLookupKey, env, testArtifact);
if (actionLookupValue == null) {
+ BugReport.sendBugReport(
+ new IllegalStateException(
+ "Unexpected absent value for "
+ + actionLookupKey
+ + " from "
+ + testArtifact
+ + " and "
+ + ct
+ + " for "
+ + skyKey));
return null;
}
env.getValue(getActionLookupData(testArtifact, actionLookupKey, actionLookupValue));