From 2d1de10e7fe066eb3fad6b374df8b2200529f6e6 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Thu, 10 Oct 2013 00:46:21 -0700 Subject: [PATCH] Run has:draft and is:starred before secondary index These properties are stored in the SQL database and cannot be answered by the secondary index. Instead of driving the search tree on the secondary index, use HasDraftByPredicate or IsStarredByPredicate. This avoids looking up every change in the database to see if the target user has starred it or has a draft present. Bug: issue 2160 Change-Id: I12d8fe3c041dcb3fbd0d5fd8eed8384fe6667ee2 --- .../java/com/google/gerrit/server/index/IndexedChangeQuery.java | 2 +- .../google/gerrit/server/query/change/HasDraftByPredicate.java | 2 +- .../google/gerrit/server/query/change/IsStarredByPredicate.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java index f915daddfb..27b2f4bca9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexedChangeQuery.java @@ -196,7 +196,7 @@ public class IndexedChangeQuery extends Predicate // Index queries are assumed to be cheaper than any other type of query, so // so try to make sure they get picked. Note that pred's cost may be higher // because it doesn't know whether it's being used in an index query or not. - return 0; + return 1; } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java index 1d9a9a4fe6..d5260a50bf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/HasDraftByPredicate.java @@ -76,6 +76,6 @@ class HasDraftByPredicate extends OperatorPredicate implements @Override public int getCost() { - return ChangeCosts.cost(ChangeCosts.PATCH_SETS_SCAN, getCardinality()); + return 0; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java index b0b75d07f5..9976bfd615 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/IsStarredByPredicate.java @@ -79,7 +79,7 @@ class IsStarredByPredicate extends OrPredicate implements @Override public int getCost() { - return ChangeCosts.cost(ChangeCosts.IDS_MEMORY, getCardinality()); + return 0; } @Override