From: Andreas Müller Date: Thu, 6 May 2021 21:22:49 +0000 (+0200) Subject: ref #6359 improve partition handling X-Git-Tag: 5.23.0^2~158 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/commitdiff_plain/e067bb501955b5cc6623218aec84c2ec5f177d0f ref #6359 improve partition handling --- diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java index 1face7f1f9..ec86ec2478 100755 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java @@ -70,6 +70,8 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl private static final Logger logger = Logger.getLogger(TaxonNodeDaoHibernateImpl.class); + private static final int DEFAULT_SET_SUBTREE_PARTITION_SIZE = 100; + @Autowired private ITaxonDao taxonDao; @Autowired @@ -751,7 +753,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl private > Set setSecundum(Reference newSec, boolean emptyDetail, String queryStr, IProgressMonitor monitor) { Set result = new HashSet<>(); Query query = getSession().createQuery(queryStr); - List> partitionList = splitIdList(query.list(), DEFAULT_PARTITION_SIZE); + List> partitionList = splitIdList(query.list(), DEFAULT_SET_SUBTREE_PARTITION_SIZE); for (List taxonIdList : partitionList){ List taxonList = taxonDao.loadList(taxonIdList, null, null); for (TaxonBase taxonBase : taxonList){ @@ -775,10 +777,17 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl } } } + commitAndRestartTransaction(newSec); } return result; } + private void commitAndRestartTransaction(CdmBase... cdmBaseToUpdate) { + getSession().getTransaction().commit(); + getSession().beginTransaction(); + getSession().update(cdmBaseToUpdate); + } + @Override public Set setSecundumForSubtreeRelations(TreeIndex subTreeIndex, Reference newRef, Set relationTypes, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail, IProgressMonitor monitor) { @@ -788,7 +797,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl Set result = new HashSet<>(); Query query = getSession().createQuery(queryStr); @SuppressWarnings("unchecked") - List> partitionList = splitIdList(query.list(), DEFAULT_PARTITION_SIZE); + List> partitionList = splitIdList(query.list(), DEFAULT_SET_SUBTREE_PARTITION_SIZE); for (List relIdList : partitionList){ List relList = taxonRelDao.loadList(relIdList, null, null); for (TaxonRelationship rel : relList){ @@ -812,6 +821,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl } } } + commitAndRestartTransaction(); } return result; @@ -880,8 +890,6 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl return setPublish(publish, queryStr, relationTypes, monitor); } - private static final int DEFAULT_PARTITION_SIZE = 100; - private > Set setPublish(boolean publish, String queryStr, Set relTypeUuids, IProgressMonitor monitor) { Set result = new HashSet<>(); Query query = getSession().createQuery(queryStr); @@ -890,7 +898,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl query.setParameterList("relTypeUuid", relTypeUuids); } @SuppressWarnings("unchecked") - List> partitionList = splitIdList(query.list(), DEFAULT_PARTITION_SIZE); + List> partitionList = splitIdList(query.list(), DEFAULT_SET_SUBTREE_PARTITION_SIZE); for (List taxonIdList : partitionList){ List taxonList = taxonDao.loadList(taxonIdList, null, null); for (TaxonBase taxonBase : taxonList){ @@ -905,6 +913,7 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl } } } + commitAndRestartTransaction(); } return result; }