aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-01-07 19:12:06 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-01-07 20:22:13 +0000
commit0dbc1f9526928f398d18844ef671bfa092ba6590 (patch)
treea4ed93ad638226386e936f306cda83f322a55ad7 /src/main
parent71d2843afdefaa59441dcab016cacb2df0d915d0 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/engine/TargetLiteral.java2
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);
}
}