Skip to content

Commit

Permalink
Make experimental_genquery_use_graphless_query a TriState.
Browse files Browse the repository at this point in the history
RELNOTES: None
PiperOrigin-RevId: 278320174
  • Loading branch information
meisterT authored and copybara-github committed Nov 4, 2019
1 parent 52ef96a commit d6e6164
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -751,7 +751,7 @@ public OutputPathsConverter() {
OptionEffectTag.LOADING_AND_ANALYSIS
},
help = "Whether to use graphless query and disable output ordering.")
public boolean useGraphlessQuery;
public TriState useGraphlessQuery;

@Option(
name = "experimental_inmemory_unused_inputs_list",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
import com.google.devtools.build.lib.query2.query.output.QueryOptions;
import com.google.devtools.build.lib.query2.query.output.QueryOptions.OrderOutput;
import com.google.devtools.build.lib.query2.query.output.QueryOutputUtils;
import com.google.devtools.build.lib.query2.query.output.StreamedFormatter;
import com.google.devtools.build.lib.rules.genquery.GenQueryOutputStream.GenQueryResult;
import com.google.devtools.build.lib.runtime.KeepGoingOption;
import com.google.devtools.build.lib.skyframe.PackageValue;
Expand Down Expand Up @@ -164,14 +165,8 @@ public ConfiguredTarget create(RuleContext ruleContext)
ruleContext.attributeError("opts", "option --experimental_graphless_query is not allowed");
return null;
}
if (ruleContext.getConfiguration().getOptions().get(CoreOptions.class).useGraphlessQuery) {
queryOptions.orderOutput = OrderOutput.NO;
queryOptions.useGraphlessQuery = TriState.YES;
} else {
// Force results to be deterministic.
queryOptions.orderOutput = OrderOutput.FULL;
queryOptions.useGraphlessQuery = TriState.NO;
}
queryOptions.useGraphlessQuery =
ruleContext.getConfiguration().getOptions().get(CoreOptions.class).useGraphlessQuery;

// force relative_locations to true so it has a deterministic output across machines.
queryOptions.relativeLocations = true;
Expand Down Expand Up @@ -329,7 +324,7 @@ private GenQueryResult doQuery(
QueryEvalResult queryResult;
OutputFormatter formatter;
AggregateAllOutputFormatterCallback<Target, ?> targets;
boolean graphlessQuery = queryOptions.useGraphlessQuery == TriState.YES;
boolean graphlessQuery = false;
try {
Set<Setting> settings = queryOptions.toSettings();

Expand All @@ -344,6 +339,16 @@ private GenQueryResult doQuery(
OutputFormatters.formatterNames(OutputFormatters.getDefaultFormatters())));
return null;
}
graphlessQuery =
queryOptions.useGraphlessQuery == TriState.YES
|| (queryOptions.useGraphlessQuery == TriState.AUTO
&& formatter instanceof StreamedFormatter);
if (graphlessQuery) {
queryOptions.orderOutput = OrderOutput.NO;
} else {
// Force results to be deterministic.
queryOptions.orderOutput = OrderOutput.FULL;
}
AbstractBlazeQueryEnvironment<Target> queryEnvironment =
QUERY_ENVIRONMENT_FACTORY.create(
/*transitivePackageLoader=*/ null,
Expand All @@ -354,7 +359,7 @@ private GenQueryResult doQuery(
PathFragment.EMPTY_FRAGMENT,
/*keepGoing=*/ false,
ruleContext.attributes().get("strict", Type.BOOLEAN),
/*orderedResults=*/ !QueryOutputUtils.shouldStreamResults(queryOptions, formatter),
/*orderedResults=*/ !graphlessQuery,
/*universeScope=*/ ImmutableList.of(),
// Use a single thread to prevent race conditions causing nondeterministic output
// (b/127644784). All the packages are already loaded at this point, so there is
Expand Down

0 comments on commit d6e6164

Please sign in to comment.