diff options
author | 2017-02-27 21:55:56 +0000 | |
---|---|---|
committer | 2017-02-28 11:33:08 +0000 | |
commit | 822c37816ac669e51bec3853b41849a19ec5e230 (patch) | |
tree | a12e1f438342aa9ec1846089fc255bf2abb18ad3 /src/main/java/com/google/devtools/build/lib/runtime | |
parent | fb64609c3f1d3492f4d80807f5d91894fa147172 (diff) |
Reimplement blaze query using an async evaluation model. Use a concurrent backend for SkyQueryEnvironment's implementation in order to achieve parallelism.
Advantages:
-New design has no flaws that the old design had.
-Code is structured so that deadlocks due to thread starvation are impossible (yup!).
Disadvantages:
-The meat of this change needs to all be in a single CL because every single QueryFunction and QueryExpression needs to be rewritten in the async style.
Still TODO:
-Fully embrace the async model in all QueryFunctions (e.g. 'rdeps', 'allpaths').
-Use concurrency in BlazeQueryEnvironment to achieve parallel evaluation for (non SkyQuery) 'blaze query' and genquery.
--
PiperOrigin-RevId: 148690279
MOS_MIGRATED_REVID=148690279
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java index c52a3fe0d9..118f529220 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryCommand.java @@ -23,14 +23,13 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment; -import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting; 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.QueryExpressionEvalListener; import com.google.devtools.build.lib.query2.engine.QueryUtil; import com.google.devtools.build.lib.query2.engine.QueryUtil.AggregateAllOutputFormatterCallback; +import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback; import com.google.devtools.build.lib.query2.output.OutputFormatter; import com.google.devtools.build.lib.query2.output.OutputFormatter.StreamedFormatter; import com.google.devtools.build.lib.query2.output.QueryOptions; @@ -150,7 +149,7 @@ public final class QueryCommand implements BlazeCommand { expr = queryEnv.transformParsedQuery(expr); OutputStream out = env.getReporter().getOutErr().getOutputStream(); - OutputFormatterCallback<Target> callback; + ThreadSafeOutputFormatterCallback<Target> callback; if (streamResults) { disableAnsiCharactersFiltering(env); @@ -161,7 +160,7 @@ public final class QueryCommand implements BlazeCommand { queryOptions.aspectDeps.createResolver(env.getPackageManager(), env.getReporter())); callback = streamedFormatter.createStreamCallback(out, queryOptions, queryEnv); } else { - callback = QueryUtil.newAggregateAllOutputFormatterCallback(); + callback = QueryUtil.newOrderedAggregateAllOutputFormatterCallback(); } boolean catastrophe = true; try { @@ -207,8 +206,7 @@ public final class QueryCommand implements BlazeCommand { // 3. Output results: try { - Set<Target> targets = - ((AggregateAllOutputFormatterCallback<Target>) callback).getResult(); + Set<Target> targets = ((AggregateAllOutputFormatterCallback<Target>) callback).getResult(); QueryOutputUtils.output( queryOptions, result, @@ -277,7 +275,6 @@ public final class QueryCommand implements BlazeCommand { env.getReporter(), settings, env.getRuntime().getQueryFunctions(), - QueryExpressionEvalListener.NullListener.<Target>instance(), env.getPackageManager().getPackagePath()); } } |