use of org.sonar.server.es.IndexingResult in project sonarqube by SonarSource.
the class ViewIndexer method index.
/**
* This is based on the fact that a WebService is only calling {@link ViewIndexer#delete(DbSession, Collection)}
* So the resiliency is only taking in account a deletion of view component
* A safety check is done by not deleting any component that still exist in database.
*
* This should not occur but prevent any misuse on this resiliency
*/
@Override
public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) {
if (items.isEmpty()) {
return new IndexingResult();
}
Set<String> views = items.stream().map(EsQueueDto::getDocId).collect(toHashSet(items.size()));
BulkIndexer bulkIndexer = newBulkIndexer(Size.REGULAR, new OneToOneResilientIndexingListener(dbClient, dbSession, items));
bulkIndexer.start();
// Safety check to remove all views that may not have been deleted
views.removeAll(dbClient.componentDao().selectExistingUuids(dbSession, views));
views.forEach(v -> bulkIndexer.addDeletion(TYPE_VIEW, v));
return bulkIndexer.stop();
}
use of org.sonar.server.es.IndexingResult in project sonarqube by SonarSource.
the class UserIndexer method index.
/**
* @return the number of items that have been successfully indexed
*/
@Override
public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) {
if (items.isEmpty()) {
return new IndexingResult();
}
Set<String> uuids = items.stream().map(EsQueueDto::getDocId).collect(toHashSet(items.size()));
BulkIndexer bulkIndexer = newBulkIndexer(Size.REGULAR, new OneToOneResilientIndexingListener(dbClient, dbSession, items));
bulkIndexer.start();
dbClient.userDao().scrollByUuids(dbSession, uuids, // Deactivated users are not deleted but updated.
u -> {
uuids.remove(u.getUuid());
bulkIndexer.add(newIndexRequest(u));
});
// the remaining uuids reference rows that don't exist in db. They must
// be deleted from index.
uuids.forEach(uuid -> bulkIndexer.addDeletion(TYPE_USER, uuid));
return bulkIndexer.stop();
}
use of org.sonar.server.es.IndexingResult in project sonarqube by SonarSource.
the class IssueIndexer method doIndexProjectItems.
private IndexingResult doIndexProjectItems(DbSession dbSession, ListMultimap<String, EsQueueDto> itemsByProjectUuid) {
if (itemsByProjectUuid.isEmpty()) {
return new IndexingResult();
}
// one project, referenced by es_queue.doc_id = many issues
IndexingListener listener = new OneToManyResilientIndexingListener(dbClient, dbSession, itemsByProjectUuid.values());
BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, listener);
bulkIndexer.start();
for (String projectUuid : itemsByProjectUuid.keySet()) {
// TODO support loading of multiple projects in a single SQL request
try (IssueIterator issues = issueIteratorFactory.createForProject(projectUuid)) {
if (issues.hasNext()) {
do {
IssueDoc doc = issues.next();
bulkIndexer.add(newIndexRequest(doc));
} while (issues.hasNext());
} else {
// project does not exist or has no issues. In both case
// all the documents related to this project are deleted.
addProjectDeletionToBulkIndexer(bulkIndexer, projectUuid);
}
}
}
return bulkIndexer.stop();
}
use of org.sonar.server.es.IndexingResult in project sonarqube by SonarSource.
the class IssueIndexer method doIndexIssueItems.
private IndexingResult doIndexIssueItems(DbSession dbSession, ListMultimap<String, EsQueueDto> itemsByIssueKey) {
if (itemsByIssueKey.isEmpty()) {
return new IndexingResult();
}
IndexingListener listener = new OneToOneResilientIndexingListener(dbClient, dbSession, itemsByIssueKey.values());
BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, listener);
bulkIndexer.start();
try (IssueIterator issues = issueIteratorFactory.createForIssueKeys(itemsByIssueKey.keySet())) {
while (issues.hasNext()) {
IssueDoc issue = issues.next();
bulkIndexer.add(newIndexRequest(issue));
itemsByIssueKey.removeAll(issue.getId());
}
}
// the remaining uuids reference issues that don't exist in db. They must
// be deleted from index.
itemsByIssueKey.values().forEach(item -> bulkIndexer.addDeletion(TYPE_ISSUE.getMainType(), item.getDocId(), item.getDocRouting()));
return bulkIndexer.stop();
}
use of org.sonar.server.es.IndexingResult in project sonarqube by SonarSource.
the class ProjectMeasuresIndexerTest method update_index_when_project_tags_are_updated.
@Test
public void update_index_when_project_tags_are_updated() {
ComponentDto project = db.components().insertPrivateProject(defaults(), p -> p.setTagsString("foo"));
indexProject(project, PROJECT_CREATION);
assertThatProjectHasTag(project, "foo");
ProjectDto projectDto = db.components().getProjectDto(project);
projectDto.setTagsString("bar");
db.getDbClient().projectDao().updateTags(db.getSession(), projectDto);
// TODO change indexing?
IndexingResult result = indexProject(project, PROJECT_TAGS_UPDATE);
assertThatProjectHasTag(project, "bar");
assertThat(result.getTotal()).isOne();
assertThat(result.getSuccess()).isOne();
}
Aggregations