aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-11-14 19:55:50 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-11-15 15:59:08 +0000
commit5bd26b24a643432c962b6256876b6729199c03d9 (patch)
tree9475e4cbc373a57504c41812e4cd593a7cc7d84e /src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
parentb7eeaa37705c7f4282d0c9bd654fb2540c361d7a (diff)
Make TargetPattern evaluation during query evaluation more parallel-friendly by introducing TargetPattern#parEval, which allows TargetPatterns' evaluations to explicitly have parallel implementations (no need to secretly use a FJP).
-- MOS_MIGRATED_REVID=139101922
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java47
1 files changed, 38 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 8ca4cc5232..9e33d50bf6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -224,7 +224,6 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
graphBackedRecursivePackageProvider,
eventHandler,
TargetPatternEvaluator.DEFAULT_FILTERING_POLICY,
- forkJoinPool,
packageSemaphore);
}
@@ -580,6 +579,18 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
return new ThreadSafeReverseDepSkyKeyUniquifier(DEFAULT_THREAD_COUNT);
}
+ private Pair<TargetPattern, ImmutableSet<PathFragment>> getPatternAndExcludes(String pattern)
+ throws TargetParsingException, InterruptedException {
+ TargetPatternKey targetPatternKey =
+ ((TargetPatternKey)
+ TargetPatternValue.key(
+ pattern, TargetPatternEvaluator.DEFAULT_FILTERING_POLICY, parserPrefix)
+ .argument());
+ ImmutableSet<PathFragment> subdirectoriesToExclude =
+ targetPatternKey.getAllSubdirectoriesToExclude(blacklistPatternsSupplier);
+ return Pair.of(targetPatternKey.getParsedPattern(), subdirectoriesToExclude);
+ }
+
@ThreadSafe
@Override
public void getTargetsMatchingPattern(
@@ -587,15 +598,33 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
throws QueryException, InterruptedException {
// Directly evaluate the target pattern, making use of packages in the graph.
try {
- TargetPatternKey targetPatternKey =
- ((TargetPatternKey)
- TargetPatternValue.key(
- pattern, TargetPatternEvaluator.DEFAULT_FILTERING_POLICY, parserPrefix)
- .argument());
- TargetPattern parsedPattern = targetPatternKey.getParsedPattern();
+ Pair<TargetPattern, ImmutableSet<PathFragment>> patternToEvalAndSubdirectoriesToExclude =
+ getPatternAndExcludes(pattern);
+ TargetPattern patternToEval = patternToEvalAndSubdirectoriesToExclude.getFirst();
+ ImmutableSet<PathFragment> subdirectoriesToExclude =
+ patternToEvalAndSubdirectoriesToExclude.getSecond();
+ patternToEval.eval(resolver, subdirectoriesToExclude, callback, QueryException.class);
+ } catch (TargetParsingException e) {
+ reportBuildFileError(owner, e.getMessage());
+ }
+ }
+
+ @Override
+ public void getTargetsMatchingPatternPar(
+ QueryExpression owner,
+ String pattern,
+ ThreadSafeCallback<Target> callback,
+ ForkJoinPool forkJoinPool)
+ throws QueryException, InterruptedException {
+ // Directly evaluate the target pattern, making use of packages in the graph.
+ try {
+ Pair<TargetPattern, ImmutableSet<PathFragment>> patternToEvalAndSubdirectoriesToExclude =
+ getPatternAndExcludes(pattern);
+ TargetPattern patternToEval = patternToEvalAndSubdirectoriesToExclude.getFirst();
ImmutableSet<PathFragment> subdirectoriesToExclude =
- targetPatternKey.getAllSubdirectoriesToExclude(blacklistPatternsSupplier);
- parsedPattern.eval(resolver, subdirectoriesToExclude, callback, QueryException.class);
+ patternToEvalAndSubdirectoriesToExclude.getSecond();
+ patternToEval.parEval(
+ resolver, subdirectoriesToExclude, callback, QueryException.class, forkJoinPool);
} catch (TargetParsingException e) {
reportBuildFileError(owner, e.getMessage());
}