Remove index defaultMaxClauseCount config setting while reusing maxTerms

When browsing Related Changes that are ready to be submitted, the Submit
buttons used to disappear from the UI. That was caused by TooManyClauses
exceptions being thrown while trying to query the secondary index. And,
that exception was caused by either an index.defaultMaxClauseCount value
that was too low or just a naturally deep history of related changes.

The likelihood of this case increased when index.maxTerms was either not
set (thus no limit) or set to a value higher than defaultMaxClauseCount.
User experience through the UI should not have suffered from such
missing -or challenging- index config tuning.

Fix this issue by using index.maxTerms at all levels, leading to proper
fallback on the database if that query size limit is reached. Also,
change maxTerms default to 1024 (from no-limit), to match that late
defaultMaxClauseCount default of 1024. This is so that the original
default at index level (former defaultMaxClauseCount) is preserved, to
keep default index querying efficient.

Update the related Documentation accordingly.

Test:
- push at least a few Related Changes
- vote on them so they become Ready to Submit
- before this fix: set index.defaultMaxClauseCount to e.g. 3, to provoke
- index.maxTerms needs to be unset => default: no limit before, 1024 now
- browse those Related Changes (click on each)
- after this fix: Submit buttons should all still show
- after this fix: Change tab headers should all look fine.

Bug: Issue 3771
Change-Id: If2222d14d7b0345327c9bf9f28a7c1038d9b5a8b
This commit is contained in:
Marco Miller 2016-01-29 12:31:38 -05:00 committed by David Pursehouse
parent 9bcc44095f
commit 6da22828da
3 changed files with 10 additions and 15 deletions

View File

@ -2382,10 +2382,14 @@ Defaults to no limit.
+
Maximum number of leaf terms to allow in a query. Too-large queries may
perform poorly, so setting this option causes query parsing to fail fast
before attempting to send them to the secondary index. Set to 0 for no
limit.
before attempting to send them to the secondary index. Should this limit
be reached, database is used instead of index as applicable.
+
Defaults to no limit.
When the index type is `LUCENE`, also sets the maximum number of clauses
permitted per BooleanQuery. This is so that all enforced query limits
are the same.
+
Defaults to 1024.
==== Lucene configuration
@ -2394,14 +2398,6 @@ Open and closed changes are indexed in separate indexes named
The following settings are only used when the index type is `LUCENE`.
[[index.defaultMaxClauseCount]]index.defaultMaxClauseCount::
+
Only used when the type is `LUCENE`.
+
Sets the maximum number of clauses permitted per BooleanQuery.
+
Defaults to 1024.
[[index.name.ramBufferSize]]index.name.ramBufferSize::
+
Determines the amount of RAM that may be used for buffering added documents
@ -2445,7 +2441,6 @@ Sample Lucene index configuration:
----
[index]
type = LUCENE
defaultMaxClauseCount = 2048
[index "changes_open"]
ramBufferSize = 60 m

View File

@ -248,7 +248,7 @@ public class LuceneChangeIndex implements ChangeIndex {
CUSTOM_CHAR_MAPPING);
queryBuilder = new QueryBuilder(analyzer);
BooleanQuery.setMaxClauseCount(cfg.getInt("index", "defaultMaxClauseCount",
BooleanQuery.setMaxClauseCount(cfg.getInt("index", "maxTerms",
BooleanQuery.getMaxClauseCount()));
GerritIndexWriterConfig openConfig =

View File

@ -29,7 +29,7 @@ import org.eclipse.jgit.lib.Config;
*/
@AutoValue
public abstract class IndexConfig {
private static final int DEFAULT_MAX_TERMS = 500;
private static final int DEFAULT_MAX_TERMS = 1024;
private static final int DEFAULT_MAX_PREFIX_TERMS = 100;
public static IndexConfig createDefault() {
@ -49,7 +49,7 @@ public abstract class IndexConfig {
return new AutoValue_IndexConfig(
checkLimit(maxLimit, "maxLimit", Integer.MAX_VALUE),
checkLimit(maxPages, "maxPages", Integer.MAX_VALUE),
checkLimit(maxTerms, "maxTerms", Integer.MAX_VALUE),
checkLimit(maxTerms, "maxTerms", DEFAULT_MAX_TERMS),
checkLimit(maxPrefixTerms, "maxPrefixTerms", DEFAULT_MAX_PREFIX_TERMS));
}