Prune old index schema versions and fields

Gerrit 2.12 still needs to support v14-v25 to do the online upgrade
from 2.11; now that the release branch has been cut, we no longer need
these old schema versions.

Change-Id: I3fa2e52814c3a0df45376cf1a90e318b479ed3d8
This commit is contained in:
Dave Borowitz 2015-12-21 17:24:43 -05:00
parent 141c01a4e9
commit 2c3abe28c6
17 changed files with 52 additions and 725 deletions

View File

@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.gerrit.server.git.QueueProvider.QueueType.INTERACTIVE;
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
import static com.google.gerrit.server.index.IndexRewriter.CLOSED_STATUSES;
import static com.google.gerrit.server.index.IndexRewriter.OPEN_STATUSES;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
@ -54,7 +55,6 @@ import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeDataSource;
import com.google.gerrit.server.query.change.LegacyChangeIdPredicate;
import com.google.gerrit.server.query.change.QueryOptions;
import com.google.gwtorm.protobuf.ProtobufCodec;
import com.google.gwtorm.server.OrmException;
@ -236,7 +236,7 @@ public class LuceneChangeIndex implements ChangeIndex {
this.changeDataFactory = changeDataFactory;
this.schema = schema;
this.useDocValuesForSorting = schema.getVersion() >= 15;
this.idSortField = sortFieldName(LegacyChangeIdPredicate.idField(schema));
this.idSortField = sortFieldName(LEGACY_ID2);
CustomMappingAnalyzer analyzer =
new CustomMappingAnalyzer(new StandardAnalyzer(CharArraySet.EMPTY_SET),
@ -271,9 +271,9 @@ public class LuceneChangeIndex implements ChangeIndex {
if (useDocValuesForSorting) {
return new SearcherFactory();
}
@SuppressWarnings("deprecation")
final Map<String, UninvertingReader.Type> mapping = ImmutableMap.of(
ChangeField.LEGACY_ID.getName(), UninvertingReader.Type.INTEGER,
// TODO(dborowitz): Remove; this is dead code anyway.
"_id", UninvertingReader.Type.INTEGER,
ChangeField.UPDATED.getName(), UninvertingReader.Type.LONG);
return new SearcherFactory() {
@Override
@ -312,7 +312,7 @@ public class LuceneChangeIndex implements ChangeIndex {
@Override
public void replace(ChangeData cd) throws IOException {
Term id = QueryBuilder.idTerm(schema, cd);
Term id = QueryBuilder.idTerm(cd);
Document doc = toDocument(cd);
try {
if (cd.change().getStatus().isOpen()) {
@ -331,7 +331,7 @@ public class LuceneChangeIndex implements ChangeIndex {
@Override
public void delete(Change.Id id) throws IOException {
Term idTerm = QueryBuilder.idTerm(schema, id);
Term idTerm = QueryBuilder.idTerm(id);
try {
Futures.allAsList(
openIndex.delete(idTerm),
@ -367,7 +367,6 @@ public class LuceneChangeIndex implements ChangeIndex {
setReady(sitePaths, schema.getVersion(), ready);
}
@SuppressWarnings("deprecation")
private Sort getSort() {
if (useDocValuesForSorting) {
return new Sort(
@ -378,7 +377,8 @@ public class LuceneChangeIndex implements ChangeIndex {
new SortField(
ChangeField.UPDATED.getName(), SortField.Type.LONG, true),
new SortField(
ChangeField.LEGACY_ID.getName(), SortField.Type.INT, true));
// TODO(dborowitz): Remove; this is dead code anyway.
"_id", SortField.Type.INT, true));
}
}
@ -434,7 +434,7 @@ public class LuceneChangeIndex implements ChangeIndex {
List<ChangeData> result =
Lists.newArrayListWithCapacity(docs.scoreDocs.length);
Set<String> fields = fields(opts);
String idFieldName = idFieldName();
String idFieldName = LEGACY_ID2.getName();
for (int i = opts.start(); i < docs.scoreDocs.length; i++) {
ScoreDoc sd = docs.scoreDocs[i];
Document doc = searchers[sd.shardIndex].doc(sd.doc, fields);
@ -474,16 +474,14 @@ public class LuceneChangeIndex implements ChangeIndex {
}
}
@SuppressWarnings("deprecation")
private Set<String> fields(QueryOptions opts) {
if (schemaHasRequestedField(ChangeField.LEGACY_ID2, opts.fields())
|| schemaHasRequestedField(ChangeField.CHANGE, opts.fields())
|| schemaHasRequestedField(ChangeField.LEGACY_ID, opts.fields())) {
|| schemaHasRequestedField(ChangeField.CHANGE, opts.fields())) {
return opts.fields();
}
// Request the numeric ID field even if the caller did not request it,
// otherwise we can't actually construct a ChangeData.
return Sets.union(opts.fields(), ImmutableSet.of(idFieldName()));
return Sets.union(opts.fields(), ImmutableSet.of(LEGACY_ID2.getName()));
}
private boolean schemaHasRequestedField(FieldDef<ChangeData, ?> field,
@ -491,12 +489,6 @@ public class LuceneChangeIndex implements ChangeIndex {
return schema.hasField(field) && requested.contains(field.getName());
}
@SuppressWarnings("deprecation")
private String idFieldName() {
return schema.getField(ChangeField.LEGACY_ID2, ChangeField.LEGACY_ID).get()
.getName();
}
private ChangeData toChangeData(Document doc, Set<String> fields,
String idFieldName) {
ChangeData cd;
@ -602,7 +594,6 @@ public class LuceneChangeIndex implements ChangeIndex {
return result;
}
@SuppressWarnings("deprecation")
private void add(Document doc, Values<ChangeData> values) {
String name = values.getField().getName();
FieldType<?> type = values.getField().getType();
@ -610,7 +601,7 @@ public class LuceneChangeIndex implements ChangeIndex {
if (useDocValuesForSorting) {
FieldDef<ChangeData, ?> f = values.getField();
if (f == ChangeField.LEGACY_ID || f == ChangeField.LEGACY_ID2) {
if (f == ChangeField.LEGACY_ID2) {
int v = (Integer) getOnlyElement(values.getValues());
doc.add(new NumericDocValuesField(sortFieldName(f), v));
} else if (f == ChangeField.UPDATED) {

View File

@ -14,7 +14,7 @@
package com.google.gerrit.lucene;
import static com.google.gerrit.server.query.change.LegacyChangeIdPredicate.idField;
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
import static org.apache.lucene.search.BooleanClause.Occur.MUST;
import static org.apache.lucene.search.BooleanClause.Occur.MUST_NOT;
import static org.apache.lucene.search.BooleanClause.Occur.SHOULD;
@ -25,7 +25,6 @@ import com.google.gerrit.server.index.FieldType;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gerrit.server.index.IntegerRangePredicate;
import com.google.gerrit.server.index.RegexPredicate;
import com.google.gerrit.server.index.Schema;
import com.google.gerrit.server.index.TimestampRangePredicate;
import com.google.gerrit.server.query.AndPredicate;
import com.google.gerrit.server.query.NotPredicate;
@ -51,12 +50,12 @@ import java.util.List;
public class QueryBuilder {
public static Term idTerm(Schema<ChangeData> schema, ChangeData cd) {
return intTerm(idField(schema).getName(), cd.getId().get());
public static Term idTerm(ChangeData cd) {
return intTerm(LEGACY_ID2.getName(), cd.getId().get());
}
public static Term idTerm(Schema<ChangeData> schema, Change.Id id) {
return intTerm(idField(schema).getName(), id.get());
public static Term idTerm(Change.Id id) {
return intTerm(LEGACY_ID2.getName(), id.get());
}
private final org.apache.lucene.util.QueryBuilder queryBuilder;

View File

@ -65,18 +65,7 @@ import java.util.Set;
* characters.
*/
public class ChangeField {
@Deprecated
/** Legacy change ID. */
public static final FieldDef<ChangeData, Integer> LEGACY_ID =
new FieldDef.Single<ChangeData, Integer>("_id",
FieldType.INTEGER, true) {
@Override
public Integer get(ChangeData input, FillArgs args) {
return input.getId().get();
}
};
/** Legacy change ID without underscore prefix. */
public static final FieldDef<ChangeData, Integer> LEGACY_ID2 =
new FieldDef.Single<ChangeData, Integer>("legacy_id",
FieldType.INTEGER, true) {
@ -161,30 +150,6 @@ public class ChangeField {
}
};
@Deprecated
/** Topic, a short annotation on the branch. */
public static final FieldDef<ChangeData, String> LEGACY_TOPIC2 =
new FieldDef.Single<ChangeData, String>(
"topic2", FieldType.EXACT, false) {
@Override
public String get(ChangeData input, FillArgs args)
throws OrmException {
return getTopic(input);
}
};
@Deprecated
/** Topic, a short annotation on the branch. */
public static final FieldDef<ChangeData, String> LEGACY_TOPIC3 =
new FieldDef.Single<ChangeData, String>(
"topic3", FieldType.PREFIX, false) {
@Override
public String get(ChangeData input, FillArgs args)
throws OrmException {
return getTopic(input);
}
};
/** Topic, a short annotation on the branch. */
public static final FieldDef<ChangeData, String> EXACT_TOPIC =
new FieldDef.Single<ChangeData, String>(
@ -405,23 +370,6 @@ public class ChangeField {
}
};
/** Set true if the change has a non-zero label score. */
@Deprecated
public static final FieldDef<ChangeData, String> LEGACY_REVIEWED =
new FieldDef.Single<ChangeData, String>(
"reviewed", FieldType.EXACT, false) {
@Override
public String get(ChangeData input, FillArgs args)
throws OrmException {
for (PatchSetApproval a : input.currentApprovals()) {
if (a.getValue() != 0) {
return "1";
}
}
return null;
}
};
private static Set<String> getPersonParts(PersonIdent person) {
if (person == null) {
return ImmutableSet.of();

View File

@ -30,353 +30,6 @@ import java.util.Map;
/** Secondary index schemas for changes. */
public class ChangeSchemas {
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V14 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC2,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V15 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC2,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V16 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC3,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V17 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC3,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V18 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC3,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V19 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC3,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.LEGACY_REVIEWED,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V20 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.LEGACY_TOPIC3,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY,
ChangeField.REVIEWEDBY);
@SuppressWarnings("deprecation")
static final Schema<ChangeData> V21 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.EXACT_TOPIC,
ChangeField.FUZZY_TOPIC,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY,
ChangeField.REVIEWEDBY);
@Deprecated
static final Schema<ChangeData> V22 = schema(
ChangeField.LEGACY_ID,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.EXACT_TOPIC,
ChangeField.FUZZY_TOPIC,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY,
ChangeField.REVIEWEDBY,
ChangeField.EXACT_COMMIT);
@Deprecated
static final Schema<ChangeData> V23 = schema(
ChangeField.LEGACY_ID2,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.EXACT_TOPIC,
ChangeField.FUZZY_TOPIC,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY,
ChangeField.REVIEWEDBY,
ChangeField.EXACT_COMMIT);
static final Schema<ChangeData> V24 = schema(
ChangeField.LEGACY_ID2,
ChangeField.ID,
ChangeField.STATUS,
ChangeField.PROJECT,
ChangeField.PROJECTS,
ChangeField.REF,
ChangeField.EXACT_TOPIC,
ChangeField.FUZZY_TOPIC,
ChangeField.UPDATED,
ChangeField.FILE_PART,
ChangeField.PATH,
ChangeField.OWNER,
ChangeField.REVIEWER,
ChangeField.COMMIT,
ChangeField.TR,
ChangeField.LABEL,
ChangeField.COMMIT_MESSAGE,
ChangeField.COMMENT,
ChangeField.CHANGE,
ChangeField.APPROVAL,
ChangeField.MERGEABLE,
ChangeField.ADDED,
ChangeField.DELETED,
ChangeField.DELTA,
ChangeField.HASHTAG,
ChangeField.COMMENTBY,
ChangeField.PATCH_SET,
ChangeField.GROUP,
ChangeField.EDITBY,
ChangeField.REVIEWEDBY,
ChangeField.EXACT_COMMIT,
ChangeField.AUTHOR,
ChangeField.COMMITTER);
static final Schema<ChangeData> V25 = schema(
ChangeField.LEGACY_ID2,
ChangeField.ID,

View File

@ -379,8 +379,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
@Operator
public Predicate<ChangeData> change(String query) throws QueryParseException {
if (PAT_LEGACY_ID.matcher(query).matches()) {
return new LegacyChangeIdPredicate(
args.getSchema(), Change.Id.parse(query));
return new LegacyChangeIdPredicate(Change.Id.parse(query));
} else if (PAT_CHANGE_ID.matcher(query).matches()) {
return new ChangeIdPredicate(parseChangeId(query));
}
@ -403,7 +402,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
@Operator
public Predicate<ChangeData> status(String statusName) {
if ("reviewed".equalsIgnoreCase(statusName)) {
return IsReviewedPredicate.create(args.getSchema());
return IsReviewedPredicate.create();
} else {
return ChangeStatusPredicate.parse(statusName);
}
@ -444,7 +443,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
}
if ("reviewed".equalsIgnoreCase(value)) {
return IsReviewedPredicate.create(args.getSchema());
return IsReviewedPredicate.create();
}
if ("owner".equalsIgnoreCase(value)) {
@ -518,18 +517,18 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
@Operator
public Predicate<ChangeData> topic(String name) {
return new ExactTopicPredicate(args.getSchema(), name);
return new ExactTopicPredicate(name);
}
@Operator
public Predicate<ChangeData> intopic(String name) {
if (name.startsWith("^")) {
return new RegexTopicPredicate(args.getSchema(), name);
return new RegexTopicPredicate(name);
}
if (name.isEmpty()) {
return new ExactTopicPredicate(args.getSchema(), name);
return new ExactTopicPredicate(name);
}
return new FuzzyTopicPredicate(args.getSchema(), name, args.index);
return new FuzzyTopicPredicate(name, args.index);
}
@Operator
@ -870,7 +869,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> {
@Operator
public Predicate<ChangeData> reviewedby(String who)
throws QueryParseException, OrmException {
return IsReviewedPredicate.create(args.getSchema(), parseAccount(who));
return IsReviewedPredicate.create(parseAccount(who));
}
@Operator

View File

@ -33,8 +33,7 @@ class CommentPredicate extends IndexPredicate<ChangeData> {
public boolean match(ChangeData object) throws OrmException {
try {
Predicate<ChangeData> p = Predicate.and(
new LegacyChangeIdPredicate(index.getSchema(), object.getId()),
this);
new LegacyChangeIdPredicate(object.getId()), this);
for (ChangeData cData
: index.getSource(p, QueryOptions.oneResult()).read()) {
if (cData.getId().equals(object.getId())) {

View File

@ -77,7 +77,7 @@ class ConflictsPredicate extends OrPredicate<ChangeData> {
List<Predicate<ChangeData>> predicatesForOneChange =
Lists.newArrayListWithCapacity(5);
predicatesForOneChange.add(
not(new LegacyChangeIdPredicate(args.getSchema(), c.getId())));
not(new LegacyChangeIdPredicate(c.getId())));
predicatesForOneChange.add(
new ProjectPredicate(c.getProject().get()));
predicatesForOneChange.add(

View File

@ -17,44 +17,21 @@ package com.google.gerrit.server.query.change;
import static com.google.gerrit.server.index.ChangeField.EXACT_TOPIC;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.FieldDef;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gerrit.server.index.Schema;
import com.google.gwtorm.server.OrmException;
class ExactTopicPredicate extends IndexPredicate<ChangeData> {
@SuppressWarnings("deprecation")
static FieldDef<ChangeData, ?> topicField(Schema<ChangeData> schema) {
if (schema == null) {
return ChangeField.LEGACY_TOPIC2;
}
if (schema.hasField(EXACT_TOPIC)) {
return schema.getFields().get(EXACT_TOPIC.getName());
}
if (schema.hasField(ChangeField.LEGACY_TOPIC2)) {
return schema.getFields().get(ChangeField.LEGACY_TOPIC2.getName());
}
// Not exact, but we cannot do any better.
return schema.getFields().get(ChangeField.LEGACY_TOPIC3.getName());
ExactTopicPredicate(String topic) {
super(EXACT_TOPIC, topic);
}
ExactTopicPredicate(Schema<ChangeData> schema, String topic) {
super(topicField(schema), topic);
}
@SuppressWarnings("deprecation")
@Override
public boolean match(final ChangeData object) throws OrmException {
Change change = object.change();
if (change == null) {
return false;
}
String t = change.getTopic();
if (t == null && getField() == ChangeField.LEGACY_TOPIC2) {
t = "";
}
return getValue().equals(t);
return getValue().equals(change.getTopic());
}
@Override

View File

@ -15,15 +15,11 @@
package com.google.gerrit.server.query.change;
import static com.google.gerrit.server.index.ChangeField.FUZZY_TOPIC;
import static com.google.gerrit.server.index.ChangeField.LEGACY_TOPIC2;
import static com.google.gerrit.server.index.ChangeField.LEGACY_TOPIC3;
import com.google.common.collect.Iterables;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.ChangeIndex;
import com.google.gerrit.server.index.FieldDef;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gerrit.server.index.Schema;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
import com.google.gwtorm.server.OrmException;
@ -31,18 +27,11 @@ import com.google.gwtorm.server.OrmException;
class FuzzyTopicPredicate extends IndexPredicate<ChangeData> {
private final ChangeIndex index;
@SuppressWarnings("deprecation")
static FieldDef<ChangeData, ?> topicField(Schema<ChangeData> schema) {
return schema.getField(FUZZY_TOPIC, LEGACY_TOPIC3, LEGACY_TOPIC2).get();
}
FuzzyTopicPredicate(Schema<ChangeData> schema, String topic,
ChangeIndex index) {
super(topicField(schema), topic);
FuzzyTopicPredicate(String topic, ChangeIndex index) {
super(FUZZY_TOPIC, topic);
this.index = index;
}
@SuppressWarnings("deprecation")
@Override
public boolean match(final ChangeData cd) throws OrmException {
Change change = cd.change();
@ -53,21 +42,14 @@ class FuzzyTopicPredicate extends IndexPredicate<ChangeData> {
if (t == null) {
return false;
}
if (getField() == FUZZY_TOPIC || getField() == LEGACY_TOPIC3) {
try {
Predicate<ChangeData> thisId =
new LegacyChangeIdPredicate(index.getSchema(), cd.getId());
Iterable<ChangeData> results =
index.getSource(and(thisId, this), QueryOptions.oneResult()).read();
return !Iterables.isEmpty(results);
} catch (QueryParseException e) {
throw new OrmException(e);
}
try {
Predicate<ChangeData> thisId = new LegacyChangeIdPredicate(cd.getId());
Iterable<ChangeData> results =
index.getSource(and(thisId, this), QueryOptions.oneResult()).read();
return !Iterables.isEmpty(results);
} catch (QueryParseException e) {
throw new OrmException(e);
}
if (getField() == LEGACY_TOPIC2) {
return t.equals(getValue());
}
return false;
}
@Override

View File

@ -214,7 +214,7 @@ public class InternalChangeQuery {
public List<ChangeData> byTopicOpen(String topic)
throws OrmException {
return query(and(new ExactTopicPredicate(schema(indexes), topic), open()));
return query(and(new ExactTopicPredicate(topic), open()));
}
public List<ChangeData> byCommit(ObjectId id) throws OrmException {

View File

@ -14,18 +14,12 @@
package com.google.gerrit.server.query.change;
import static com.google.common.base.Preconditions.checkState;
import static com.google.gerrit.server.index.ChangeField.LEGACY_REVIEWED;
import static com.google.gerrit.server.index.ChangeField.REVIEWEDBY;
import com.google.common.base.Optional;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.FieldDef;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gerrit.server.index.Schema;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
import com.google.gwtorm.server.OrmException;
import java.util.ArrayList;
@ -37,20 +31,11 @@ class IsReviewedPredicate extends IndexPredicate<ChangeData> {
private static final Account.Id NOT_REVIEWED =
new Account.Id(ChangeField.NOT_REVIEWED);
@SuppressWarnings("deprecation")
static Predicate<ChangeData> create(Schema<ChangeData> schema) {
if (getField(schema) == LEGACY_REVIEWED) {
return new LegacyIsReviewedPredicate();
}
static Predicate<ChangeData> create() {
return Predicate.not(new IsReviewedPredicate(NOT_REVIEWED));
}
@SuppressWarnings("deprecation")
static Predicate<ChangeData> create(Schema<ChangeData> schema,
Collection<Account.Id> ids) throws QueryParseException {
if (getField(schema) == LEGACY_REVIEWED) {
throw new QueryParseException("Only is:reviewed is supported");
}
static Predicate<ChangeData> create(Collection<Account.Id> ids) {
List<Predicate<ChangeData>> predicates = new ArrayList<>(ids.size());
for (Account.Id id : ids) {
predicates.add(new IsReviewedPredicate(id));
@ -58,15 +43,6 @@ class IsReviewedPredicate extends IndexPredicate<ChangeData> {
return Predicate.or(predicates);
}
@SuppressWarnings("deprecation")
private static FieldDef<ChangeData, ?> getField(Schema<ChangeData> schema) {
Optional<FieldDef<ChangeData, ?>> f =
schema.getField(REVIEWEDBY, LEGACY_REVIEWED);
checkState(f.isPresent(), "Schema %s missing field %s",
schema.getVersion(), REVIEWEDBY.getName());
return f.get();
}
private final Account.Id id;
private IsReviewedPredicate(Account.Id id) {

View File

@ -18,7 +18,6 @@ import com.google.common.collect.Lists;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.index.Schema;
import com.google.gerrit.server.query.OrPredicate;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
@ -38,11 +37,10 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
return user.toString();
}
private static List<Predicate<ChangeData>> predicates(
Schema<ChangeData> schema, Set<Change.Id> ids) {
private static List<Predicate<ChangeData>> predicates(Set<Change.Id> ids) {
List<Predicate<ChangeData>> r = Lists.newArrayListWithCapacity(ids.size());
for (Change.Id id : ids) {
r.add(new LegacyChangeIdPredicate(schema, id));
r.add(new LegacyChangeIdPredicate(id));
}
return r;
}
@ -55,7 +53,7 @@ class IsStarredByPredicate extends OrPredicate<ChangeData> implements
}
private IsStarredByPredicate(Arguments args, IdentifiedUser user) {
super(predicates(args.getSchema(), user.getStarredChanges()));
super(predicates(user.getStarredChanges()));
this.args = args;
this.user = user;
}

View File

@ -14,32 +14,17 @@
package com.google.gerrit.server.query.change;
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID;
import static com.google.gerrit.server.index.ChangeField.LEGACY_ID2;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.FieldDef;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gerrit.server.index.Schema;
/** Predicate over change number (aka legacy ID or Change.Id). */
public class LegacyChangeIdPredicate extends IndexPredicate<ChangeData> {
private final Change.Id id;
@SuppressWarnings("deprecation")
public static FieldDef<ChangeData, ?> idField(Schema<ChangeData> schema) {
if (schema == null) {
return ChangeField.LEGACY_ID2;
} else if (schema.hasField(LEGACY_ID2)) {
return schema.getFields().get(LEGACY_ID2.getName());
} else {
return schema.getFields().get(LEGACY_ID.getName());
}
}
LegacyChangeIdPredicate(Schema<ChangeData> schema, Change.Id id) {
super(idField(schema), ChangeQueryBuilder.FIELD_CHANGE, id.toString());
LegacyChangeIdPredicate(Change.Id id) {
super(LEGACY_ID2, ChangeQueryBuilder.FIELD_CHANGE, id.toString());
this.id = id;
}

View File

@ -1,57 +0,0 @@
// Copyright (C) 2010 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.server.query.change;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetApproval;
import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.IndexPredicate;
import com.google.gwtorm.server.OrmException;
@Deprecated
class LegacyIsReviewedPredicate extends IndexPredicate<ChangeData> {
@Deprecated
LegacyIsReviewedPredicate() {
super(ChangeField.LEGACY_REVIEWED, "1");
}
@Override
public boolean match(final ChangeData object) throws OrmException {
Change c = object.change();
if (c == null) {
return false;
}
PatchSet.Id current = c.currentPatchSetId();
for (PatchSetApproval p : object.approvals().get(current)) {
if (p.getValue() != 0) {
return true;
}
}
return false;
}
@Override
public int getCost() {
return 2;
}
@Override
public String toString() {
return "is:reviewed";
}
}

View File

@ -37,8 +37,7 @@ class MessagePredicate extends IndexPredicate<ChangeData> {
public boolean match(ChangeData object) throws OrmException {
try {
Predicate<ChangeData> p = Predicate.and(
new LegacyChangeIdPredicate(index.getSchema(), object.getId()),
this);
new LegacyChangeIdPredicate(object.getId()), this);
for (ChangeData cData
: index.getSource(p, QueryOptions.oneResult()).read()) {
if (cData.getId().equals(object.getId())) {

View File

@ -14,9 +14,10 @@
package com.google.gerrit.server.query.change;
import static com.google.gerrit.server.index.ChangeField.FUZZY_TOPIC;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.index.RegexPredicate;
import com.google.gerrit.server.index.Schema;
import com.google.gwtorm.server.OrmException;
import dk.brics.automaton.RegExp;
@ -25,8 +26,8 @@ import dk.brics.automaton.RunAutomaton;
class RegexTopicPredicate extends RegexPredicate<ChangeData> {
private final RunAutomaton pattern;
RegexTopicPredicate(Schema<ChangeData> schema, String re) {
super(FuzzyTopicPredicate.topicField(schema), re);
RegexTopicPredicate(String re) {
super(FUZZY_TOPIC, re);
if (re.startsWith("^")) {
re = re.substring(1);

View File

@ -1,123 +0,0 @@
// Copyright (C) 2015 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.server.query.change;
import static com.google.common.truth.Truth.assertThat;
import static java.util.concurrent.TimeUnit.MINUTES;
import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.server.account.AuthRequest;
import com.google.gerrit.testutil.InMemoryModule;
import com.google.gerrit.testutil.InMemoryRepositoryManager.Repo;
import com.google.gerrit.testutil.TestTimeUtil;
import com.google.inject.Guice;
import com.google.inject.Injector;
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.lib.Config;
import org.junit.Ignore;
import org.junit.Test;
public class LuceneQueryChangesV14Test extends LuceneQueryChangesTest {
@Override
protected Injector createInjector() {
Config luceneConfig = new Config(config);
InMemoryModule.setDefaults(luceneConfig);
// Latest version with a Lucene 4 index.
luceneConfig.setInt("index", "lucene", "testVersion", 14);
return Guice.createInjector(new InMemoryModule(luceneConfig));
}
@Override
@Ignore
@Test
public void byCommentBy() {
// Ignore.
}
@Override
@Ignore
@Test
public void byFrom() {
// Ignore.
}
@Override
@Ignore
@Test
public void byTopic() {
// Ignore.
}
@Override
@Ignore
@Test
public void reviewedBy() throws Exception {
// Ignore.
}
@Override
@Ignore
@Test
public void prepopulatedFields() throws Exception {
// Ignore.
}
@Override
@Ignore
@Test
public void prepopulateOnlyRequestedFields() throws Exception {
// Ignore.
}
@Test
public void isReviewed() throws Exception {
TestTimeUtil.resetWithClockStep(2, MINUTES);
TestRepository<Repo> repo = createProject("repo");
Change change1 = insert(newChange(repo, null, null, null, null));
Change change2 = insert(newChange(repo, null, null, null, null));
Change change3 = insert(newChange(repo, null, null, null, null));
gApi.changes()
.id(change1.getId().get())
.current()
.review(new ReviewInput().message("comment"));
Account.Id user2 = accountManager
.authenticate(AuthRequest.forUser("anotheruser"))
.getAccountId();
requestContext.setContext(newRequestContext(user2));
gApi.changes()
.id(change2.getId().get())
.current()
.review(ReviewInput.recommend());
PatchSet.Id ps3_1 = change3.currentPatchSetId();
change3 = newPatchSet(repo, change3);
assertThat(change3.currentPatchSetId()).isNotEqualTo(ps3_1);
// Nonzero score on previous patch set does not count.
gApi.changes()
.id(change3.getId().get())
.revision(ps3_1.get())
.review(ReviewInput.recommend());
assertQuery("is:reviewed", change2);
assertQuery("-is:reviewed", change3, change1);
}
}