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
This commit is contained in:
@@ -72,6 +72,7 @@ import org.apache.lucene.document.TextField;
|
|||||||
import org.apache.lucene.index.IndexWriter;
|
import org.apache.lucene.index.IndexWriter;
|
||||||
import org.apache.lucene.index.IndexWriterConfig;
|
import org.apache.lucene.index.IndexWriterConfig;
|
||||||
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
||||||
|
import org.apache.lucene.index.IndexableField;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.IndexSearcher;
|
import org.apache.lucene.search.IndexSearcher;
|
||||||
import org.apache.lucene.search.Query;
|
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_OPEN = "open";
|
||||||
public static final String CHANGES_CLOSED = "closed";
|
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 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<String> FIELDS = ImmutableSet.of(
|
||||||
|
ADDED_FIELD, APPROVAL_FIELD, CHANGE_FIELD, DELETED_FIELD, ID_FIELD);
|
||||||
|
|
||||||
private static final Map<Schema<ChangeData>, Version> LUCENE_VERSIONS;
|
private static final Map<Schema<ChangeData>, Version> LUCENE_VERSIONS;
|
||||||
static {
|
static {
|
||||||
@@ -352,9 +358,6 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
setReady(sitePaths, schema.getVersion(), ready);
|
setReady(sitePaths, schema.getVersion(), ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final ImmutableSet<String> FIELDS =
|
|
||||||
ImmutableSet.of(ID_FIELD, CHANGE_FIELD, APPROVAL_FIELD);
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static Sort getSort(Schema<ChangeData> schema,
|
private static Sort getSort(Schema<ChangeData> schema,
|
||||||
Predicate<ChangeData> p) {
|
Predicate<ChangeData> p) {
|
||||||
@@ -464,10 +467,12 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
return changeDataFactory.create(db.get(), new Change.Id(id));
|
return changeDataFactory.create(db.get(), new Change.Id(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Change proto.
|
||||||
Change change = ChangeProtoField.CODEC.decode(
|
Change change = ChangeProtoField.CODEC.decode(
|
||||||
cb.bytes, cb.offset, cb.length);
|
cb.bytes, cb.offset, cb.length);
|
||||||
ChangeData cd = changeDataFactory.create(db.get(), change);
|
ChangeData cd = changeDataFactory.create(db.get(), change);
|
||||||
|
|
||||||
|
// Approvals.
|
||||||
BytesRef[] approvalsBytes = doc.getBinaryValues(APPROVAL_FIELD);
|
BytesRef[] approvalsBytes = doc.getBinaryValues(APPROVAL_FIELD);
|
||||||
if (approvalsBytes != null) {
|
if (approvalsBytes != null) {
|
||||||
List<PatchSetApproval> approvals =
|
List<PatchSetApproval> approvals =
|
||||||
@@ -478,6 +483,16 @@ public class LuceneChangeIndex implements ChangeIndex {
|
|||||||
}
|
}
|
||||||
cd.setCurrentApprovals(approvals);
|
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;
|
return cd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -342,6 +342,10 @@ public class ChangeData {
|
|||||||
return changedLines;
|
return changedLines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setChangedLines(int insertions, int deletions) {
|
||||||
|
changedLines = new ChangedLines(insertions, deletions);
|
||||||
|
}
|
||||||
|
|
||||||
public Change.Id getId() {
|
public Change.Id getId() {
|
||||||
return legacyId;
|
return legacyId;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user