Merge pull request #10352 from atmire/cli-speed-improvements-periodically-uncache-entities-when-processing-many_8-x

[Port dspace-8_x] Index discovery speed improvement - periodically uncache entities when processing many items
This commit is contained in:
Tim Donohue
2025-04-30 11:55:20 -05:00
committed by GitHub

View File

@@ -75,6 +75,7 @@ import org.dspace.discovery.indexobject.IndexableCommunity;
import org.dspace.discovery.indexobject.IndexableItem; import org.dspace.discovery.indexobject.IndexableItem;
import org.dspace.discovery.indexobject.factory.IndexFactory; import org.dspace.discovery.indexobject.factory.IndexFactory;
import org.dspace.discovery.indexobject.factory.IndexObjectFactoryFactory; import org.dspace.discovery.indexobject.factory.IndexObjectFactoryFactory;
import org.dspace.discovery.indexobject.factory.ItemIndexFactory;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import org.dspace.eperson.factory.EPersonServiceFactory; import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.eperson.service.GroupService; import org.dspace.eperson.service.GroupService;
@@ -344,6 +345,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
try { try {
final List<IndexFactory> indexableObjectServices = indexObjectServiceFactory. final List<IndexFactory> indexableObjectServices = indexObjectServiceFactory.
getIndexFactories(); getIndexFactories();
int indexObject = 0;
for (IndexFactory indexableObjectService : indexableObjectServices) { for (IndexFactory indexableObjectService : indexableObjectServices) {
if (type == null || StringUtils.equals(indexableObjectService.getType(), type)) { if (type == null || StringUtils.equals(indexableObjectService.getType(), type)) {
final Iterator<IndexableObject> indexableObjects = indexableObjectService.findAll(context); final Iterator<IndexableObject> indexableObjects = indexableObjectService.findAll(context);
@@ -351,6 +353,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
final IndexableObject indexableObject = indexableObjects.next(); final IndexableObject indexableObject = indexableObjects.next();
indexContent(context, indexableObject, force); indexContent(context, indexableObject, force);
context.uncacheEntity(indexableObject.getIndexedObject()); context.uncacheEntity(indexableObject.getIndexedObject());
indexObject++;
if ((indexObject % 100) == 0 && indexableObjectService instanceof ItemIndexFactory) {
context.uncacheEntities();
}
} }
} }
} }