Include intermediate output key as a typed parameter for ParallelVisitor.
This will allow for stricter type checking as well as the ability to store output keys other than just skykeys.
This CL is mostly a no-op but has one subtle change: In AbstractEdgeVisitor (now AbstractTargetOuputtingVisitor), we acquire the semaphore only while fetching the packages but don't immediately process the results using the callback. We do this already in other visitors so this is more consistent, nor is it a good idea to have a semaphore lock around an unknown callback that may possibly try acquire keys too.
PiperOrigin-RevId: 253080306
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
index 9c767df..ac42439 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
@@ -19,8 +19,6 @@
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.concurrent.MultisetSemaphore;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.query2.engine.Callback;
@@ -61,17 +59,13 @@
SkyQueryEnvironment env,
QueryExpression expression,
QueryExpressionContext<Target> context,
- Callback<Target> callback,
- MultisetSemaphore<PackageIdentifier> packageSemaphore) {
+ Callback<Target> callback) {
return env.eval(
expression,
context,
ParallelVisitor.createParallelVisitorCallback(
new RdepsUnboundedVisitor.Factory(
- env,
- /*unfilteredUniverse=*/ Predicates.alwaysTrue(),
- callback,
- packageSemaphore)));
+ env, /*unfilteredUniverse=*/ Predicates.alwaysTrue(), callback)));
}
static QueryTaskFuture<Void> getAllRdepsBoundedParallel(
@@ -79,18 +73,13 @@
QueryExpression expression,
int depth,
QueryExpressionContext<Target> context,
- Callback<Target> callback,
- MultisetSemaphore<PackageIdentifier> packageSemaphore) {
+ Callback<Target> callback) {
return env.eval(
expression,
context,
ParallelVisitor.createParallelVisitorCallback(
new RdepsBoundedVisitor.Factory(
- env,
- depth,
- /*universe=*/ Predicates.alwaysTrue(),
- callback,
- packageSemaphore)));
+ env, depth, /*universe=*/ Predicates.alwaysTrue(), callback)));
}
static QueryTaskFuture<Void> getRdepsInUniverseUnboundedParallel(
@@ -98,14 +87,12 @@
QueryExpression expression,
Predicate<SkyKey> unfilteredUniverse,
QueryExpressionContext<Target> context,
- Callback<Target> callback,
- MultisetSemaphore<PackageIdentifier> packageSemaphore) {
+ Callback<Target> callback) {
return env.eval(
expression,
context,
ParallelVisitor.createParallelVisitorCallback(
- new RdepsUnboundedVisitor.Factory(
- env, unfilteredUniverse, callback, packageSemaphore)));
+ new RdepsUnboundedVisitor.Factory(env, unfilteredUniverse, callback)));
}
static QueryTaskFuture<Predicate<SkyKey>> getDTCSkyKeyPredicateFuture(
@@ -145,18 +132,12 @@
int depth,
Predicate<SkyKey> universe,
QueryExpressionContext<Target> context,
- Callback<Target> callback,
- MultisetSemaphore<PackageIdentifier> packageSemaphore) {
+ Callback<Target> callback) {
return env.eval(
expression,
context,
ParallelVisitor.createParallelVisitorCallback(
- new RdepsBoundedVisitor.Factory(
- env,
- depth,
- universe,
- callback,
- packageSemaphore)));
+ new RdepsBoundedVisitor.Factory(env, depth, universe, callback)));
}
/** Specialized parallel variant of {@link SkyQueryEnvironment#getRBuildFiles}. */
@@ -180,14 +161,12 @@
QueryExpression expression,
QueryExpressionContext<Target> context,
Callback<Target> callback,
- MultisetSemaphore<PackageIdentifier> packageSemaphore,
boolean depsNeedFiltering) {
return env.eval(
expression,
context,
ParallelVisitor.createParallelVisitorCallback(
- new DepsUnboundedVisitor.Factory(
- env, callback, packageSemaphore, depsNeedFiltering, context)));
+ new DepsUnboundedVisitor.Factory(env, callback, depsNeedFiltering, context)));
}
static class DepAndRdep {