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
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 f915dad..27b2f4b 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 @@
// 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 1d9a9a4..d5260a5 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 @@
@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 b0b75d0..9976bfd 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 @@
@Override
public int getCost() {
- return ChangeCosts.cost(ChangeCosts.IDS_MEMORY, getCardinality());
+ return 0;
}
@Override