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-07-13 16:22:30 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-07-14 11:12:15 +0000
commitbc47f40b0dd352d3bf9dc8228fbf0279ac67e907 (patch)
tree93ac0e8ae932517d4b080769b95345fd338767c7 /src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
parent80d1e16b7ae1d04fa2fa4c561588fe9fdbaefc41 (diff)
Re-implement variables in the blaze query language. Instead of using a mutable global context of variable bindings, pass around immutable local contexts.
The motivation is so we can safely evaluate all blaze query expressions concurrently under the hood. A global context is hostile to this goal. -- MOS_MIGRATED_REVID=127324600
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.java31
1 files changed, 19 insertions, 12 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 1546b4e94e..586c493485 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
@@ -65,6 +65,7 @@ import com.google.devtools.build.lib.query2.engine.RdepsFunction;
import com.google.devtools.build.lib.query2.engine.StreamableQueryEnvironment;
import com.google.devtools.build.lib.query2.engine.TargetLiteral;
import com.google.devtools.build.lib.query2.engine.Uniquifier;
+import com.google.devtools.build.lib.query2.engine.VariableContext;
import com.google.devtools.build.lib.skyframe.BlacklistedPackagePrefixesValue;
import com.google.devtools.build.lib.skyframe.ContainingPackageLookupFunction;
import com.google.devtools.build.lib.skyframe.FileValue;
@@ -320,9 +321,10 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
try (final AutoProfiler p = AutoProfiler.logged("evaluating query", LOG)) {
try {
if (expr.canEvalConcurrently()) {
- expr.evalConcurrently(this, callbackWithEmptyCheck, threadPool);
+ expr.evalConcurrently(
+ this, VariableContext.<Target>empty(), callbackWithEmptyCheck, threadPool);
} else {
- expr.eval(this, callbackWithEmptyCheck);
+ expr.eval(this, VariableContext.<Target>empty(), callbackWithEmptyCheck);
}
} catch (QueryException e) {
throw new QueryException(e, expr);
@@ -487,9 +489,9 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
@Override
- public void eval(QueryExpression expr, Callback<Target> callback)
+ public void eval(QueryExpression expr, VariableContext<Target> context, Callback<Target> callback)
throws QueryException, InterruptedException {
- expr.eval(this, callback);
+ expr.eval(this, context, callback);
}
@Override
@@ -979,10 +981,11 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
public void getAllRdeps(
QueryExpression expression,
Predicate<Target> universe,
- final Callback<Target> callback,
- final int depth)
+ VariableContext<Target> context,
+ Callback<Target> callback,
+ int depth)
throws QueryException, InterruptedException {
- getAllRdeps(expression, universe, callback, depth, BATCH_CALLBACK_SIZE);
+ getAllRdeps(expression, universe, context, callback, depth, BATCH_CALLBACK_SIZE);
}
/**
@@ -994,13 +997,17 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
@VisibleForTesting
protected void getAllRdeps(
QueryExpression expression,
- final Predicate<Target> universe,
- final Callback<Target> callback,
- final int depth,
- final int batchSize)
+ Predicate<Target> universe,
+ VariableContext<Target> context,
+ Callback<Target> callback,
+ int depth,
+ int batchSize)
throws QueryException, InterruptedException {
Uniquifier<Target> uniquifier = createUniquifier();
- eval(expression, new BatchAllRdepsCallback(uniquifier, universe, callback, depth, batchSize));
+ eval(
+ expression,
+ context,
+ new BatchAllRdepsCallback(uniquifier, universe, callback, depth, batchSize));
}
private class BatchAllRdepsCallback implements Callback<Target> {