From ac3bd24b4de2d98729066ed4cd562890b8266cb8 Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Fri, 24 Apr 2015 07:55:38 +0200 Subject: [PATCH] Batch update PDCI from accessionDetails --- .../persistence/domain/PDCIRepository.java | 4 +++ .../server/service/GenesysService.java | 2 +- .../impl/ElasticsearchSearchServiceImpl.java | 2 ++ .../service/impl/GenesysServiceImpl.java | 28 +++++++++++++++---- .../server/service/impl/PDCICalculator.java | 13 ++++++--- .../service/impl/StatisticsServiceImpl.java | 4 +-- .../worker/ElasticUpdaterProcessor.java | 11 -------- .../webapp/WEB-INF/jsp/accession/details.jsp | 2 +- 8 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/genesys2/server/persistence/domain/PDCIRepository.java b/src/main/java/org/genesys2/server/persistence/domain/PDCIRepository.java index a91a7fea2..d022e07a0 100644 --- a/src/main/java/org/genesys2/server/persistence/domain/PDCIRepository.java +++ b/src/main/java/org/genesys2/server/persistence/domain/PDCIRepository.java @@ -17,6 +17,7 @@ package org.genesys2.server.persistence.domain; import java.util.List; +import java.util.Set; import org.genesys2.server.model.genesys.PDCI; import org.genesys2.server.model.impl.FaoInstitute; @@ -28,6 +29,9 @@ public interface PDCIRepository extends JpaRepository { @Query("select pdci from PDCI pdci where pdci.accession.id=?1") PDCI findByAccessionId(Long accessionId); + @Query("select pdci from PDCI pdci where pdci.accession.id in (?1)") + List findByAccessionId(Set accessionIds); + /** * Gets [ min(pdci.score), max(pdci.score), avg(pdci.score), count(pdci) ] * for PDCI of {@link FaoInstitute} diff --git a/src/main/java/org/genesys2/server/service/GenesysService.java b/src/main/java/org/genesys2/server/service/GenesysService.java index f4b1678d5..d66d98e0c 100644 --- a/src/main/java/org/genesys2/server/service/GenesysService.java +++ b/src/main/java/org/genesys2/server/service/GenesysService.java @@ -235,6 +235,6 @@ public interface GenesysService { PDCIStatistics statisticsPDCI(FaoInstitute faoInstitute); - void updatePDCI(Set accessionIds); + void updatePDCI(Set ads); } diff --git a/src/main/java/org/genesys2/server/service/impl/ElasticsearchSearchServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/ElasticsearchSearchServiceImpl.java index 93034a8cd..d59330595 100644 --- a/src/main/java/org/genesys2/server/service/impl/ElasticsearchSearchServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/ElasticsearchSearchServiceImpl.java @@ -303,6 +303,8 @@ public class ElasticsearchSearchServiceImpl implements ElasticService, Initializ } Set ads = genesysService.getAccessionDetails(ids); + // If Accession, update PDCI + genesysService.updatePDCI(ads); for (AccessionDetails ad : ads) { if (ad == null) diff --git a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java index 86e541769..06c41f57c 100644 --- a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java @@ -1574,19 +1574,35 @@ public class GenesysServiceImpl implements GenesysService, DatasetService { @Override @Transactional - public void updatePDCI(Set accessionIds) { + public void updatePDCI(Set ads) { if (pdciCalculator == null) { return; } + Set accessionIds=new HashSet(); + for (AccessionDetails accessionDetails : ads) { + if (accessionDetails!=null) { + accessionIds.add(accessionDetails.getId()); + } + } + List pdcis = repoPdci.findByAccessionId(accessionIds); - List pdcis = new ArrayList(); - for (Long accessionId : accessionIds) { - PDCI pdci = repoPdci.findByAccessionId(accessionId); + for (AccessionDetails accessionDetails : ads) { + if (accessionDetails==null) { + continue; + } + + PDCI pdci = null; + for (PDCI existing : pdcis) { + if (existing.getAccession().getId().equals(accessionDetails.getId())) { + pdci = existing; + break; + } + } if (pdci == null) { pdci = new PDCI(); - pdci.setAccession(accessionIdRepository.findOne(accessionId)); + pdci.setAccession(accessionIdRepository.findOne(accessionDetails.getId())); } - pdcis.add(pdciCalculator.updatePdci(pdci, accessionId)); + pdciCalculator.updatePdci(pdci, accessionDetails); } repoPdci.save(pdcis); } diff --git a/src/main/java/org/genesys2/server/service/impl/PDCICalculator.java b/src/main/java/org/genesys2/server/service/impl/PDCICalculator.java index 898f95f9a..fbe2883e2 100644 --- a/src/main/java/org/genesys2/server/service/impl/PDCICalculator.java +++ b/src/main/java/org/genesys2/server/service/impl/PDCICalculator.java @@ -58,20 +58,24 @@ public class PDCICalculator implements InitializingBean { public PDCI makePDCI(long accessionId) { return calculatePDCI(new PDCI(), accessionId); } - + public PDCI updatePdci(PDCI pdci, long accessionId) { return calculatePDCI(pdci, accessionId); } private PDCI calculatePDCI(PDCI pdci, long accessionId) { - pdci.reset(); - AccessionDetails accessionDetails = genesysService.getAccessionDetails(accessionId); if (accessionDetails == null) { LOG.warn("No such accession " + accessionId); return null; } - + + return updatePdci(pdci, accessionDetails); + } + + public PDCI updatePdci(PDCI pdci, AccessionDetails accessionDetails) { + pdci.reset(); + independentDescriptors(pdci, accessionDetails); switch (accessionDetails.getSampStat() == null ? -1 : accessionDetails.getSampStat() / 100) { @@ -437,4 +441,5 @@ public class PDCICalculator implements InitializingBean { } return false; } + } diff --git a/src/main/java/org/genesys2/server/service/impl/StatisticsServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/StatisticsServiceImpl.java index 91349b016..6662bbbf5 100644 --- a/src/main/java/org/genesys2/server/service/impl/StatisticsServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/StatisticsServiceImpl.java @@ -64,8 +64,8 @@ public class StatisticsServiceImpl implements StatisticsService { @Override @Cacheable(unless = "#result == null", value = "statistics", key = "'stats.' + #root.methodName + '-' + #faoInstitute.id") public PDCIStatistics statisticsPDCI(FaoInstitute faoInstitute) { - if (LOG.isInfoEnabled()) { - LOG.info("Regenerating PDCI statistics for " + faoInstitute); + if (LOG.isDebugEnabled()) { + LOG.debug("Regenerating PDCI statistics for " + faoInstitute); } return genesysService.statisticsPDCI(faoInstitute); } diff --git a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java index 191a4742a..27a236dfe 100644 --- a/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java +++ b/src/main/java/org/genesys2/server/service/worker/ElasticUpdaterProcessor.java @@ -8,7 +8,6 @@ import javax.annotation.Resource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.service.ElasticService; import org.genesys2.server.service.GenesysService; import org.genesys2.server.service.worker.ElasticUpdater.ElasticNode; @@ -111,11 +110,6 @@ class ElasticUpdaterProcessor implements Runnable, InitializingBean, DisposableB for (String className : buckets.keySet()) { Set bucket = buckets.get(className); - // If Accession, update PDCI - if (Accession.class.getName().equals(className)) { - genesysService.updatePDCI(bucket); - } - elasticService.updateAll(className, bucket); bucket.clear(); } @@ -147,11 +141,6 @@ class ElasticUpdaterProcessor implements Runnable, InitializingBean, DisposableB } bucket.add(toUpdate.getId()); if (bucket.size() >= BATCH_SIZE) { - // If Accession, update PDCI - if (Accession.class.getName().equals(className)) { - genesysService.updatePDCI(bucket); - } - elasticService.updateAll(className, bucket); bucket.clear(); } diff --git a/src/main/webapp/WEB-INF/jsp/accession/details.jsp b/src/main/webapp/WEB-INF/jsp/accession/details.jsp index eb2e1042b..69a6b8d00 100644 --- a/src/main/webapp/WEB-INF/jsp/accession/details.jsp +++ b/src/main/webapp/WEB-INF/jsp/accession/details.jsp @@ -655,7 +655,7 @@

- + ">