From 160584cf1bb731b2c8210cb1ebca1bb3934502bd Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 23 May 2014 10:50:44 -0700 Subject: [PATCH] Lucene: Use stored ChangedLines values This saves a persistent cache lookup per query result, which is roughly equivalent to one database lookup if the in-memory cache is cold. Change-Id: Ic2d82a9635e16b205b3cc90c2d860b821c628cf5 --- .../gerrit/lucene/LuceneChangeIndex.java | 25 +++++++++++++++---- .../server/query/change/ChangeData.java | 4 +++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java index db8738f5b1..64c7ed50c8 100644 --- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java +++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneChangeIndex.java @@ -72,6 +72,7 @@ import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; +import org.apache.lucene.index.IndexableField; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -113,9 +114,14 @@ public class LuceneChangeIndex implements ChangeIndex { public static final String CHANGES_OPEN = "open"; public static final String CHANGES_CLOSED = "closed"; - private static final String ID_FIELD = ChangeField.LEGACY_ID.getName(); - private static final String CHANGE_FIELD = ChangeField.CHANGE.getName(); + + private static final String ADDED_FIELD = ChangeField.ADDED.getName(); private static final String APPROVAL_FIELD = ChangeField.APPROVAL.getName(); + private static final String CHANGE_FIELD = ChangeField.CHANGE.getName(); + private static final String DELETED_FIELD = ChangeField.DELETED.getName(); + private static final String ID_FIELD = ChangeField.LEGACY_ID.getName(); + private static final ImmutableSet FIELDS = ImmutableSet.of( + ADDED_FIELD, APPROVAL_FIELD, CHANGE_FIELD, DELETED_FIELD, ID_FIELD); private static final Map, Version> LUCENE_VERSIONS; static { @@ -352,9 +358,6 @@ public class LuceneChangeIndex implements ChangeIndex { setReady(sitePaths, schema.getVersion(), ready); } - private static final ImmutableSet FIELDS = - ImmutableSet.of(ID_FIELD, CHANGE_FIELD, APPROVAL_FIELD); - @SuppressWarnings("deprecation") private static Sort getSort(Schema schema, Predicate p) { @@ -464,10 +467,12 @@ public class LuceneChangeIndex implements ChangeIndex { return changeDataFactory.create(db.get(), new Change.Id(id)); } + // Change proto. Change change = ChangeProtoField.CODEC.decode( cb.bytes, cb.offset, cb.length); ChangeData cd = changeDataFactory.create(db.get(), change); + // Approvals. BytesRef[] approvalsBytes = doc.getBinaryValues(APPROVAL_FIELD); if (approvalsBytes != null) { List approvals = @@ -478,6 +483,16 @@ public class LuceneChangeIndex implements ChangeIndex { } cd.setCurrentApprovals(approvals); } + + // Changed lines. + IndexableField added = doc.getField(ADDED_FIELD); + IndexableField deleted = doc.getField(DELETED_FIELD); + if (added != null && deleted != null) { + cd.setChangedLines( + added.numericValue().intValue(), + deleted.numericValue().intValue()); + } + return cd; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java index e5248f2ab7..da19d19818 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java @@ -342,6 +342,10 @@ public class ChangeData { return changedLines; } + public void setChangedLines(int insertions, int deletions) { + changedLines = new ChangedLines(insertions, deletions); + } + public Change.Id getId() { return legacyId; }