Migrate part of ProjectIndex FieldDefs to the new format SchemaFields This change is similar to other changes like change 342163 or change 339337. We rely on the test coverage in AbstractQueryProjectsTest. Release-Notes: skip Change-Id: Ia30ff43cac9647f884c16f37f3941f3a7bc19389
diff --git a/java/com/google/gerrit/index/project/ProjectField.java b/java/com/google/gerrit/index/project/ProjectField.java index 3114b4c..e050f53 100644 --- a/java/com/google/gerrit/index/project/ProjectField.java +++ b/java/com/google/gerrit/index/project/ProjectField.java
@@ -15,14 +15,12 @@ package com.google.gerrit.index.project; import static com.google.common.collect.ImmutableList.toImmutableList; -import static com.google.gerrit.index.FieldDef.exact; -import static com.google.gerrit.index.FieldDef.fullText; -import static com.google.gerrit.index.FieldDef.prefix; import static com.google.gerrit.index.FieldDef.storedOnly; import com.google.gerrit.entities.Project; import com.google.gerrit.entities.RefNames; import com.google.gerrit.index.FieldDef; +import com.google.gerrit.index.IndexedField; import com.google.gerrit.index.RefState; import com.google.gerrit.index.SchemaUtil; @@ -38,23 +36,53 @@ .toByteArray(project.getNameKey()); } - public static final FieldDef<ProjectData, String> NAME = - exact("name").stored().build(p -> p.getProject().getName()); + public static final IndexedField<ProjectData, String> NAME_FIELD = + IndexedField.<ProjectData>stringBuilder("RepoName") + .required() + .size(200) + .stored() + .build(p -> p.getProject().getName()); - public static final FieldDef<ProjectData, String> DESCRIPTION = - fullText("description").stored().build(p -> p.getProject().getDescription()); + public static final IndexedField<ProjectData, String>.SearchSpec NAME_SPEC = + NAME_FIELD.exact("name"); - public static final FieldDef<ProjectData, String> PARENT_NAME = - exact("parent_name").build(p -> p.getProject().getParentName()); + public static final IndexedField<ProjectData, String> DESCRIPTION_FIELD = + IndexedField.<ProjectData>stringBuilder("Description") + .stored() + .build(p -> p.getProject().getDescription()); - public static final FieldDef<ProjectData, Iterable<String>> NAME_PART = - prefix("name_part").buildRepeatable(p -> SchemaUtil.getNameParts(p.getProject().getName())); + public static final IndexedField<ProjectData, String>.SearchSpec DESCRIPTION_SPEC = + DESCRIPTION_FIELD.fullText("description"); - public static final FieldDef<ProjectData, String> STATE = - exact("state").stored().build(p -> p.getProject().getState().name()); + public static final IndexedField<ProjectData, String> PARENT_NAME_FIELD = + IndexedField.<ProjectData>stringBuilder("ParentName") + .build(p -> p.getProject().getParentName()); - public static final FieldDef<ProjectData, Iterable<String>> ANCESTOR_NAME = - exact("ancestor_name").buildRepeatable(ProjectData::getParentNames); + public static final IndexedField<ProjectData, String>.SearchSpec PARENT_NAME_SPEC = + PARENT_NAME_FIELD.exact("parent_name"); + + public static final IndexedField<ProjectData, Iterable<String>> NAME_PART_FIELD = + IndexedField.<ProjectData>iterableStringBuilder("NamePart") + .size(200) + .build(p -> SchemaUtil.getNameParts(p.getProject().getName())); + + public static final IndexedField<ProjectData, Iterable<String>>.SearchSpec NAME_PART_SPEC = + NAME_PART_FIELD.prefix("name_part"); + + public static final IndexedField<ProjectData, String> STATE_FIELD = + IndexedField.<ProjectData>stringBuilder("State") + .stored() + .build(p -> p.getProject().getState().name()); + + public static final IndexedField<ProjectData, String>.SearchSpec STATE_SPEC = + STATE_FIELD.exact("state"); + + public static final IndexedField<ProjectData, Iterable<String>> ANCESTOR_NAME_FIELD = + IndexedField.<ProjectData>iterableStringBuilder("AncestorName") + .build(ProjectData::getParentNames); + + public static final IndexedField<ProjectData, Iterable<String>>.SearchSpec ANCESTOR_NAME_SPEC = + ANCESTOR_NAME_FIELD.exact("ancestor_name"); /** * All values of all refs that were used in the course of indexing this document. This covers
diff --git a/java/com/google/gerrit/index/project/ProjectIndex.java b/java/com/google/gerrit/index/project/ProjectIndex.java index 8687544..0aa7393 100644 --- a/java/com/google/gerrit/index/project/ProjectIndex.java +++ b/java/com/google/gerrit/index/project/ProjectIndex.java
@@ -31,7 +31,7 @@ @Override default Predicate<ProjectData> keyPredicate(Project.NameKey nameKey) { - return new ProjectPredicate(ProjectField.NAME, nameKey.get()); + return new ProjectPredicate(ProjectField.NAME_SPEC, nameKey.get()); } Function<ProjectData, Project.NameKey> ENTITY_TO_KEY = (p) -> p.getProject().getNameKey();
diff --git a/java/com/google/gerrit/index/project/ProjectPredicate.java b/java/com/google/gerrit/index/project/ProjectPredicate.java index 11875ef..0eaf2b6 100644 --- a/java/com/google/gerrit/index/project/ProjectPredicate.java +++ b/java/com/google/gerrit/index/project/ProjectPredicate.java
@@ -14,12 +14,12 @@ package com.google.gerrit.index.project; -import com.google.gerrit.index.FieldDef; +import com.google.gerrit.index.SchemaFieldDefs.SchemaField; import com.google.gerrit.index.query.IndexPredicate; /** Predicate that is mapped to a field in the project index. */ public class ProjectPredicate extends IndexPredicate<ProjectData> { - public ProjectPredicate(FieldDef<ProjectData, ?> def, String value) { + public ProjectPredicate(SchemaField<ProjectData, ?> def, String value) { super(def, value); } }
diff --git a/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java b/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java index 0619566..ef2c3f5 100644 --- a/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java +++ b/java/com/google/gerrit/index/project/ProjectSchemaDefinitions.java
@@ -16,6 +16,7 @@ import static com.google.gerrit.index.SchemaUtil.schema; +import com.google.common.collect.ImmutableList; import com.google.gerrit.index.Schema; import com.google.gerrit.index.SchemaDefinitions; @@ -31,14 +32,26 @@ static final Schema<ProjectData> V1 = schema( /* version= */ 1, - ProjectField.NAME, - ProjectField.DESCRIPTION, - ProjectField.PARENT_NAME, - ProjectField.NAME_PART, - ProjectField.ANCESTOR_NAME); + ImmutableList.of( + ProjectField.NAME_FIELD, + ProjectField.DESCRIPTION_FIELD, + ProjectField.PARENT_NAME_FIELD, + ProjectField.NAME_PART_FIELD, + ProjectField.ANCESTOR_NAME_FIELD), + ImmutableList.of( + ProjectField.NAME_SPEC, + ProjectField.DESCRIPTION_SPEC, + ProjectField.PARENT_NAME_SPEC, + ProjectField.NAME_PART_SPEC, + ProjectField.ANCESTOR_NAME_SPEC)); @Deprecated - static final Schema<ProjectData> V2 = schema(V1, ProjectField.STATE, ProjectField.REF_STATE); + static final Schema<ProjectData> V2 = + schema( + V1, + ImmutableList.of(ProjectField.REF_STATE), + ImmutableList.of(ProjectField.STATE_FIELD), + ImmutableList.of(ProjectField.STATE_SPEC)); // Bump Lucene version requires reindexing @Deprecated static final Schema<ProjectData> V3 = schema(V2);
diff --git a/java/com/google/gerrit/lucene/LuceneProjectIndex.java b/java/com/google/gerrit/lucene/LuceneProjectIndex.java index fae854e..911d91f 100644 --- a/java/com/google/gerrit/lucene/LuceneProjectIndex.java +++ b/java/com/google/gerrit/lucene/LuceneProjectIndex.java
@@ -15,7 +15,7 @@ package com.google.gerrit.lucene; import static com.google.common.collect.Iterables.getOnlyElement; -import static com.google.gerrit.index.project.ProjectField.NAME; +import static com.google.gerrit.index.project.ProjectField.NAME_SPEC; import com.google.common.collect.ImmutableSet; import com.google.gerrit.common.Nullable; @@ -58,14 +58,14 @@ implements ProjectIndex { private static final String PROJECTS = "projects"; - private static final String NAME_SORT_FIELD = sortFieldName(NAME); + private static final String NAME_SORT_FIELD = sortFieldName(NAME_SPEC); private static Term idTerm(ProjectData projectState) { return idTerm(projectState.getProject().getNameKey()); } private static Term idTerm(Project.NameKey nameKey) { - return QueryBuilder.stringTerm(NAME.getName(), nameKey.get()); + return QueryBuilder.stringTerm(NAME_SPEC.getName(), nameKey.get()); } private final GerritIndexWriterConfig indexWriterConfig; @@ -110,7 +110,7 @@ void add(Document doc, Values<ProjectData> values) { // Add separate DocValues field for the field that is needed for sorting. SchemaField<ProjectData, ?> f = values.getField(); - if (f == NAME) { + if (f == NAME_SPEC) { String value = (String) getOnlyElement(values.getValues()); doc.add(new SortedDocValuesField(NAME_SORT_FIELD, new BytesRef(value))); } @@ -156,7 +156,7 @@ @Nullable @Override protected ProjectData fromDocument(Document doc) { - Project.NameKey nameKey = Project.nameKey(doc.getField(NAME.getName()).stringValue()); + Project.NameKey nameKey = Project.nameKey(doc.getField(NAME_SPEC.getName()).stringValue()); return projectCache.get().get(nameKey).map(ProjectState::toProjectData).orElse(null); } }
diff --git a/java/com/google/gerrit/server/index/IndexUtils.java b/java/com/google/gerrit/server/index/IndexUtils.java index 213094e..352d376 100644 --- a/java/com/google/gerrit/server/index/IndexUtils.java +++ b/java/com/google/gerrit/server/index/IndexUtils.java
@@ -116,9 +116,9 @@ */ public static Set<String> projectFields(QueryOptions opts) { Set<String> fs = opts.fields(); - return fs.contains(ProjectField.NAME.getName()) + return fs.contains(ProjectField.NAME_SPEC.getName()) ? fs - : Sets.union(fs, ImmutableSet.of(ProjectField.NAME.getName())); + : Sets.union(fs, ImmutableSet.of(ProjectField.NAME_SPEC.getName())); } private IndexUtils() {
diff --git a/java/com/google/gerrit/server/index/project/StalenessChecker.java b/java/com/google/gerrit/server/index/project/StalenessChecker.java index 9c44c00..9f6bb31 100644 --- a/java/com/google/gerrit/server/index/project/StalenessChecker.java +++ b/java/com/google/gerrit/server/index/project/StalenessChecker.java
@@ -40,7 +40,7 @@ */ public class StalenessChecker { private static final ImmutableSet<String> FIELDS = - ImmutableSet.of(ProjectField.NAME.getName(), ProjectField.REF_STATE.getName()); + ImmutableSet.of(ProjectField.NAME_SPEC.getName(), ProjectField.REF_STATE.getName()); private final ProjectCache projectCache; private final ProjectIndexCollection indexes;
diff --git a/java/com/google/gerrit/server/query/project/ProjectPredicates.java b/java/com/google/gerrit/server/query/project/ProjectPredicates.java index 8b4048f..a7b0743 100644 --- a/java/com/google/gerrit/server/query/project/ProjectPredicates.java +++ b/java/com/google/gerrit/server/query/project/ProjectPredicates.java
@@ -25,23 +25,23 @@ /** Utility class to create predicates for project index queries. */ public class ProjectPredicates { public static Predicate<ProjectData> name(Project.NameKey nameKey) { - return new ProjectPredicate(ProjectField.NAME, nameKey.get()); + return new ProjectPredicate(ProjectField.NAME_SPEC, nameKey.get()); } public static Predicate<ProjectData> parent(Project.NameKey parentNameKey) { - return new ProjectPredicate(ProjectField.PARENT_NAME, parentNameKey.get()); + return new ProjectPredicate(ProjectField.PARENT_NAME_SPEC, parentNameKey.get()); } public static Predicate<ProjectData> inname(String name) { - return new ProjectPredicate(ProjectField.NAME_PART, name.toLowerCase(Locale.US)); + return new ProjectPredicate(ProjectField.NAME_PART_SPEC, name.toLowerCase(Locale.US)); } public static Predicate<ProjectData> description(String description) { - return new ProjectPredicate(ProjectField.DESCRIPTION, description); + return new ProjectPredicate(ProjectField.DESCRIPTION_SPEC, description); } public static Predicate<ProjectData> state(ProjectState state) { - return new ProjectPredicate(ProjectField.STATE, state.name()); + return new ProjectPredicate(ProjectField.STATE_SPEC, state.name()); } private ProjectPredicates() {}
diff --git a/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java b/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java index a625a70..93f91dd 100644 --- a/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java +++ b/javatests/com/google/gerrit/acceptance/api/project/ProjectIndexerIT.java
@@ -54,7 +54,7 @@ @Inject private IndexOperations.Project projectIndexOperations; private static final ImmutableSet<String> FIELDS = - ImmutableSet.of(ProjectField.NAME.getName(), ProjectField.REF_STATE.getName()); + ImmutableSet.of(ProjectField.NAME_SPEC.getName(), ProjectField.REF_STATE.getName()); @Test public void indexProject_indexesRefStateOfProjectAndParents() throws Exception {