diff options
author | Nathan Harmata <nharmata@google.com> | 2016-07-13 16:22:30 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2016-07-14 11:12:15 +0000 |
commit | bc47f40b0dd352d3bf9dc8228fbf0279ac67e907 (patch) | |
tree | 93ac0e8ae932517d4b080769b95345fd338767c7 /src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java | |
parent | 80d1e16b7ae1d04fa2fa4c561588fe9fdbaefc41 (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.java | 31 |
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> { |