Automated rollback of commit a8ca83fc01e6312fe0e145e8d63fad8b84713e09.
*** Reason for rollback ***
Appears to be cause of NPEs showing up in internal integration tests.
Mostly clean rollback --BuildDriverFunction changes, which later changes have
come to rely on.
PiperOrigin-RevId: 436472087
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageFunction.java
index 324a172..e7f9a4e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTargetsInPackageFunction.java
@@ -20,7 +20,6 @@
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.TargetPatternResolverUtil;
-import com.google.devtools.build.skyframe.GraphTraversingHelper;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyKey;
@@ -51,13 +50,14 @@
Event.error(
"package contains errors: " + packageId.getPackageFragment().getPathString()));
}
- return GraphTraversingHelper.declareDependenciesAndCheckIfValuesMissing(
- env,
- Iterables.transform(
- TargetPatternResolverUtil.resolvePackageTargets(pkg, argument.getFilteringPolicy()),
- TO_TRANSITIVE_TRAVERSAL_KEY))
- ? null
- : CollectTargetsInPackageValue.INSTANCE;
+ env.getValues(
+ Iterables.transform(
+ TargetPatternResolverUtil.resolvePackageTargets(pkg, argument.getFilteringPolicy()),
+ TO_TRANSITIVE_TRAVERSAL_KEY));
+ if (env.valuesMissing()) {
+ return null;
+ }
+ return CollectTargetsInPackageValue.INSTANCE;
}
private static final Function<Target, SkyKey> TO_TRANSITIVE_TRAVERSAL_KEY =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTestSuitesInPackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTestSuitesInPackageFunction.java
index 41a78ad..85671af 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectTestSuitesInPackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectTestSuitesInPackageFunction.java
@@ -21,7 +21,6 @@
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.TargetUtils;
-import com.google.devtools.build.skyframe.GraphTraversingHelper;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyKey;
@@ -68,9 +67,11 @@
CollectTestSuitesInPackageValue.key(label.getPackageIdentifier()));
}
collectTestSuiteInPkgDeps.remove(skyKey);
- return GraphTraversingHelper.declareDependenciesAndCheckIfValuesMissing(
- env, collectTestSuiteInPkgDeps)
- ? null
- : CollectTestSuitesInPackageValue.INSTANCE;
+ env.getValues(collectTestSuiteInPkgDeps);
+
+ if (env.valuesMissing()) {
+ return null;
+ }
+ return CollectTestSuitesInPackageValue.INSTANCE;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
index 7171920..00fef49 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
@@ -24,7 +24,8 @@
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyValue;
+import java.util.Map;
import javax.annotation.Nullable;
/**
@@ -92,15 +93,16 @@
} else {
packageAndMaybeConfiguration = ImmutableSet.of(packageKey, configurationKeyMaybe);
}
- SkyframeIterableResult packageAndMaybeConfigurationValues =
- env.getOrderedValuesAndExceptions(packageAndMaybeConfiguration);
+ Map<SkyKey, SkyValue> packageAndMaybeConfigurationValues =
+ env.getValues(packageAndMaybeConfiguration);
// Don't test env.valuesMissing(), because values may already be missing from the caller.
- PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.next();
+ PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.get(packageKey);
if (packageValue == null) {
return null;
}
if (configurationKeyMaybe != null) {
- configuration = (BuildConfigurationValue) packageAndMaybeConfigurationValues.next();
+ configuration =
+ (BuildConfigurationValue) packageAndMaybeConfigurationValues.get(configurationKeyMaybe);
if (configuration == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index ac56de2..a6fc2141 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -479,15 +479,12 @@
} else {
packageAndMaybeConfiguration = ImmutableSet.of(packageKey, configurationKeyMaybe);
}
- SkyframeLookupResult packageAndMaybeConfigurationValues =
- env.getValuesAndExceptions(packageAndMaybeConfiguration);
+ Map<SkyKey, SkyValue> packageAndMaybeConfigurationValues =
+ env.getValues(packageAndMaybeConfiguration);
if (env.valuesMissing()) {
return null;
}
PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.get(packageKey);
- if (packageValue == null) {
- return null;
- }
Package pkg = packageValue.getPackage();
if (configurationKeyMaybe != null) {
configuration =
@@ -994,7 +991,7 @@
Map<SkyKey, ConfiguredTargetAndData> result = Maps.newHashMapWithExpectedSize(deps.size());
Set<SkyKey> aliasPackagesToFetch = new HashSet<>();
List<Dependency> aliasDepsToRedo = new ArrayList<>();
- SkyframeLookupResult aliasPackageValues = null;
+ Map<SkyKey, SkyValue> aliasPackageValues = null;
Collection<Dependency> depsToProcess = deps;
for (int i = 0; i < 2; i++) {
for (Dependency dep : depsToProcess) {
@@ -1076,7 +1073,7 @@
if (aliasDepsToRedo.isEmpty()) {
break;
}
- aliasPackageValues = env.getValuesAndExceptions(aliasPackagesToFetch);
+ aliasPackageValues = env.getValues(aliasPackagesToFetch);
depsToProcess = aliasDepsToRedo;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
index 01bcb9f..2885689 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
@@ -35,9 +35,7 @@
import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
@@ -170,15 +168,17 @@
globSubdir,
patternTail,
globberOperation);
- SkyframeIterableResult listingAndRecursiveGlobResult =
- env.getOrderedValuesAndExceptions(
+ Map<SkyKey, SkyValue> listingAndRecursiveGlobMap =
+ env.getValues(
ImmutableList.of(keyForRecursiveGlobInCurrentDirectory, directoryListingKey));
if (env.valuesMissing()) {
return null;
}
- GlobValue globValue = (GlobValue) listingAndRecursiveGlobResult.next();
+ GlobValue globValue =
+ (GlobValue) listingAndRecursiveGlobMap.get(keyForRecursiveGlobInCurrentDirectory);
matches.addTransitive(globValue.getMatches());
- listingValue = (DirectoryListingValue) listingAndRecursiveGlobResult.next();
+ listingValue =
+ (DirectoryListingValue) listingAndRecursiveGlobMap.get(directoryListingKey);
}
}
@@ -233,9 +233,8 @@
}
}
- Set<SkyKey> subdirAndSymlinksKeys = Sets.union(subdirMap.keySet(), symlinkFileMap.keySet());
- SkyframeIterableResult subdirAndSymlinksResult =
- env.getOrderedValuesAndExceptions(subdirAndSymlinksKeys);
+ Map<SkyKey, SkyValue> subdirAndSymlinksResult =
+ env.getValues(Sets.union(subdirMap.keySet(), symlinkFileMap.keySet()));
if (env.valuesMissing()) {
return null;
}
@@ -243,17 +242,14 @@
// Second pass: process the symlinks and subdirectories from the first pass, and maybe
// collect further SkyKeys if fully resolved symlink targets are themselves directories.
// Also process any known directories.
- for (SkyKey subdirAndSymlinksKey : subdirAndSymlinksKeys) {
- if (symlinkFileMap.containsKey(subdirAndSymlinksKey)) {
- FileValue symlinkFileValue = (FileValue) subdirAndSymlinksResult.next();
- if (symlinkFileValue == null) {
- return null;
- }
+ for (Map.Entry<SkyKey, SkyValue> lookedUpKeyAndValue : subdirAndSymlinksResult.entrySet()) {
+ if (symlinkFileMap.containsKey(lookedUpKeyAndValue.getKey())) {
+ FileValue symlinkFileValue = (FileValue) lookedUpKeyAndValue.getValue();
if (!symlinkFileValue.isSymlink()) {
throw new GlobFunctionException(
new InconsistentFilesystemException(
"readdir and stat disagree about whether "
- + ((RootedPath) subdirAndSymlinksKey.argument()).asPath()
+ + ((RootedPath) lookedUpKeyAndValue.getKey().argument()).asPath()
+ " is a symlink."),
Transience.TRANSIENT);
}
@@ -282,7 +278,7 @@
throw new GlobFunctionException(symlinkException, Transience.PERSISTENT);
}
- Dirent dirent = symlinkFileMap.get(subdirAndSymlinksKey);
+ Dirent dirent = symlinkFileMap.get(lookedUpKeyAndValue.getKey());
String fileName = dirent.getName();
if (symlinkFileValue.isDirectory()) {
SkyKey keyToRequest = getSkyKeyForSubdir(fileName, glob, subdirPattern);
@@ -293,28 +289,18 @@
sortedResultMap.put(dirent, glob.getSubdir().getRelative(fileName));
}
} else {
- SkyValue value = subdirAndSymlinksResult.next();
- if (value == null) {
- return null;
- }
- processSubdir(Map.entry(subdirAndSymlinksKey, value), subdirMap, glob, sortedResultMap);
+ processSubdir(lookedUpKeyAndValue, subdirMap, glob, sortedResultMap);
}
}
- Set<SkyKey> symlinkSubdirKeys = symlinkSubdirMap.keySet();
- SkyframeIterableResult symlinkSubdirResult =
- env.getOrderedValuesAndExceptions(symlinkSubdirKeys);
+ Map<SkyKey, SkyValue> symlinkSubdirResult = env.getValues(symlinkSubdirMap.keySet());
if (env.valuesMissing()) {
return null;
}
// Third pass: do needed subdirectories of symlinked directories discovered during the second
// pass.
- for (SkyKey symlinkSubdirKey : symlinkSubdirKeys) {
- processSubdir(
- Map.entry(symlinkSubdirKey, symlinkSubdirResult.next()),
- symlinkSubdirMap,
- glob,
- sortedResultMap);
+ for (Map.Entry<SkyKey, SkyValue> lookedUpKeyAndValue : symlinkSubdirResult.entrySet()) {
+ processSubdir(lookedUpKeyAndValue, symlinkSubdirMap, glob, sortedResultMap);
}
for (Map.Entry<Dirent, Object> fileMatches : sortedResultMap.entrySet()) {
addToMatches(fileMatches.getValue(), matches);