Convert project index to use ProjectData instead of ProjectState
With this change, the project index does not depend on the Gerrit server, so that projects under non-Gerrit enabled hosts can be indexed without dependencies on the server. Change-Id: I07beec95d1586432bd078d492111b0f6e57c5dcb
This commit is contained in:
@@ -30,7 +30,7 @@ import com.google.gerrit.server.index.IndexUtils;
|
||||
import com.google.gerrit.server.index.project.ProjectField;
|
||||
import com.google.gerrit.server.index.project.ProjectIndex;
|
||||
import com.google.gerrit.server.project.ProjectCache;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.ProjectData;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
@@ -56,12 +56,12 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, ProjectState>
|
||||
public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, ProjectData>
|
||||
implements ProjectIndex {
|
||||
static class ProjectMapping {
|
||||
MappingProperties projects;
|
||||
|
||||
ProjectMapping(Schema<ProjectState> schema) {
|
||||
ProjectMapping(Schema<ProjectData> schema) {
|
||||
this.projects = ElasticMapping.createMapping(schema);
|
||||
}
|
||||
}
|
||||
@@ -80,14 +80,14 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
SitePaths sitePaths,
|
||||
Provider<ProjectCache> projectCache,
|
||||
JestClientBuilder clientBuilder,
|
||||
@Assisted Schema<ProjectState> schema) {
|
||||
@Assisted Schema<ProjectData> schema) {
|
||||
super(cfg, sitePaths, schema, clientBuilder, PROJECTS_PREFIX);
|
||||
this.projectCache = projectCache;
|
||||
this.mapping = new ProjectMapping(schema);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void replace(ProjectState projectState) throws IOException {
|
||||
public void replace(ProjectData projectState) throws IOException {
|
||||
Bulk bulk =
|
||||
new Bulk.Builder()
|
||||
.defaultIndex(indexName)
|
||||
@@ -105,7 +105,7 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSource<ProjectState> getSource(Predicate<ProjectState> p, QueryOptions opts)
|
||||
public DataSource<ProjectData> getSource(Predicate<ProjectData> p, QueryOptions opts)
|
||||
throws QueryParseException {
|
||||
return new QuerySource(p, opts);
|
||||
}
|
||||
@@ -122,15 +122,15 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getId(ProjectState projectState) {
|
||||
protected String getId(ProjectData projectState) {
|
||||
return projectState.getProject().getName();
|
||||
}
|
||||
|
||||
private class QuerySource implements DataSource<ProjectState> {
|
||||
private class QuerySource implements DataSource<ProjectData> {
|
||||
private final Search search;
|
||||
private final Set<String> fields;
|
||||
|
||||
QuerySource(Predicate<ProjectState> p, QueryOptions opts) throws QueryParseException {
|
||||
QuerySource(Predicate<ProjectData> p, QueryOptions opts) throws QueryParseException {
|
||||
QueryBuilder qb = queryBuilder.toQueryBuilder(p);
|
||||
fields = IndexUtils.projectFields(opts);
|
||||
SearchSourceBuilder searchSource =
|
||||
@@ -157,9 +157,9 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultSet<ProjectState> read() throws OrmException {
|
||||
public ResultSet<ProjectData> read() throws OrmException {
|
||||
try {
|
||||
List<ProjectState> results = Collections.emptyList();
|
||||
List<ProjectData> results = Collections.emptyList();
|
||||
JestResult result = client.execute(search);
|
||||
if (result.isSucceeded()) {
|
||||
JsonObject obj = result.getJsonObject().getAsJsonObject("hits");
|
||||
@@ -167,21 +167,21 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
JsonArray json = obj.getAsJsonArray("hits");
|
||||
results = Lists.newArrayListWithCapacity(json.size());
|
||||
for (int i = 0; i < json.size(); i++) {
|
||||
results.add(toProjectState(json.get(i)));
|
||||
results.add(toProjectData(json.get(i)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.error(result.getErrorMessage());
|
||||
}
|
||||
final List<ProjectState> r = Collections.unmodifiableList(results);
|
||||
return new ResultSet<ProjectState>() {
|
||||
final List<ProjectData> r = Collections.unmodifiableList(results);
|
||||
return new ResultSet<ProjectData>() {
|
||||
@Override
|
||||
public Iterator<ProjectState> iterator() {
|
||||
public Iterator<ProjectData> iterator() {
|
||||
return r.iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProjectState> toList() {
|
||||
public List<ProjectData> toList() {
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
return search.toString();
|
||||
}
|
||||
|
||||
private ProjectState toProjectState(JsonElement json) {
|
||||
private ProjectData toProjectData(JsonElement json) {
|
||||
JsonElement source = json.getAsJsonObject().get("_source");
|
||||
if (source == null) {
|
||||
source = json.getAsJsonObject().get("fields");
|
||||
@@ -209,7 +209,7 @@ public class ElasticProjectIndex extends AbstractElasticIndex<Project.NameKey, P
|
||||
Project.NameKey nameKey =
|
||||
new Project.NameKey(
|
||||
source.getAsJsonObject().get(ProjectField.NAME.getName()).getAsString());
|
||||
return projectCache.get().get(nameKey);
|
||||
return projectCache.get().get(nameKey).toProjectData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -36,7 +36,7 @@ import com.google.gerrit.server.index.account.AccountSchemaDefinitions;
|
||||
import com.google.gerrit.server.index.change.ChangeSchemaDefinitions;
|
||||
import com.google.gerrit.server.index.group.GroupSchemaDefinitions;
|
||||
import com.google.gerrit.server.index.project.ProjectSchemaDefinitions;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.ProjectData;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gson.FieldNamingPolicy;
|
||||
import com.google.gson.Gson;
|
||||
@@ -162,7 +162,7 @@ final class ElasticTestUtils {
|
||||
.execute()
|
||||
.actionGet();
|
||||
|
||||
Schema<ProjectState> projectSchema = ProjectSchemaDefinitions.INSTANCE.getLatest();
|
||||
Schema<ProjectData> projectSchema = ProjectSchemaDefinitions.INSTANCE.getLatest();
|
||||
ProjectMapping projectMapping = new ProjectMapping(projectSchema);
|
||||
nodeInfo
|
||||
.node
|
||||
|
Reference in New Issue
Block a user