diff options
author | 2016-01-07 19:12:06 +0000 | |
---|---|---|
committer | 2016-01-07 20:22:13 +0000 | |
commit | 0dbc1f9526928f398d18844ef671bfa092ba6590 (patch) | |
tree | a4ed93ad638226386e936f306cda83f322a55ad7 /src/main | |
parent | 71d2843afdefaa59441dcab016cacb2df0d915d0 (diff) |
Make QueryEnvironment#getTargetsMatchingPattern pass its result to a callback.
This is the third step in a series to allow processing large sets of targets in query target patterns via streaming batches rather than all at once. This should also be a functional no-op.
--
MOS_MIGRATED_REVID=111620668
Diffstat (limited to 'src/main')
5 files changed, 21 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java index beba2f3ee8..c63e00dd37 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.query2.engine.QueryEnvironment; import com.google.devtools.build.lib.query2.engine.QueryEvalResult; import com.google.devtools.build.lib.query2.engine.QueryException; import com.google.devtools.build.lib.query2.engine.QueryExpression; +import com.google.devtools.build.lib.query2.engine.QueryUtil.AggregateAllCallback; import com.google.devtools.build.lib.util.BinaryPredicate; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.skyframe.WalkableGraph.WalkableGraphFactory; @@ -233,7 +234,9 @@ public abstract class AbstractBlazeQueryEnvironment<T> implements QueryEnvironme reportBuildFileError(caller, e.getMessage()); } } - return getTargetsMatchingPattern(caller, pattern); + AggregateAllCallback<T> aggregatingCallback = new AggregateAllCallback<>(); + getTargetsMatchingPattern(caller, pattern, aggregatingCallback); + return aggregatingCallback.getResult(); } protected abstract Map<String, Set<Target>> preloadOrThrow( diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java index d4614f0cbf..2f889aeb32 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java @@ -124,8 +124,8 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> } @Override - public Set<Target> getTargetsMatchingPattern(QueryExpression caller, - String pattern) throws QueryException { + public void getTargetsMatchingPattern( + QueryExpression caller, String pattern, Callback<Target> callback) throws QueryException { // We can safely ignore the boolean error flag. The evaluateQuery() method above wraps the // entire query computation in an error sensor. @@ -180,7 +180,11 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> } } } - return result; + try { + callback.process(result); + } catch (InterruptedException e) { + throw new QueryException(caller, e.getMessage()); + } } @Override 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 614f502087..749a563529 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 @@ -324,8 +324,8 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> { } @Override - public Set<Target> getTargetsMatchingPattern(QueryExpression owner, String pattern) - throws QueryException { + public void getTargetsMatchingPattern( + QueryExpression owner, String pattern, Callback<Target> callback) throws QueryException { Set<Target> targets = new LinkedHashSet<>(resolvedTargetPatterns.get(pattern)); // Sets.filter would be more convenient here, but can't deal with exceptions. @@ -336,7 +336,11 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> { targetIterator.remove(); } } - return targets; + try { + callback.process(targets); + } catch (InterruptedException e) { + throw new QueryException(owner, e.getMessage()); + } } @Override diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java index 13d7f4ca12..0ebf71139c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java @@ -135,10 +135,10 @@ public interface QueryEnvironment<T> { } /** - * Returns the set of target nodes in the graph for the specified target + * Invokes {@code callback} with the set of target nodes in the graph for the specified target * pattern, in 'blaze build' syntax. */ - Set<T> getTargetsMatchingPattern(QueryExpression owner, String pattern) + void getTargetsMatchingPattern(QueryExpression owner, String pattern, Callback<T> callback) throws QueryException; /** Ensures the specified target exists. */ diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/TargetLiteral.java b/src/main/java/com/google/devtools/build/lib/query2/engine/TargetLiteral.java index c46d193f63..32eca663eb 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/TargetLiteral.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/TargetLiteral.java @@ -51,7 +51,7 @@ final class TargetLiteral extends QueryExpression { } callback.process(value); } else { - callback.process(env.getTargetsMatchingPattern(this, pattern)); + env.getTargetsMatchingPattern(this, pattern, callback); } } |