From c24885ff0b611fbdfedf37bdab242f8b2f0eee35 Mon Sep 17 00:00:00 2001 From: Epure Alexandru-Eusebiu Date: Thu, 3 Dec 2020 17:44:20 +0200 Subject: [PATCH 1/4] MNT-22062 : poor performance viewing category retention schedule Add DispositionServiceImpl#hasDisposableItemsImpl that will return a boolean value if a RM Container has disposable items This method uses early return, once the first occurence is found. --- .../disposition/DispositionServiceImpl.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index d469d2fe87..37394e6cb6 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -488,7 +488,49 @@ public class DispositionServiceImpl extends ServiceBaseImpl @Override public boolean hasDisposableItems(DispositionSchedule dispositionSchdule) { - return !getDisposableItems(dispositionSchdule).isEmpty(); + ParameterCheck.mandatory("dispositionSchedule", dispositionSchdule); + + // Get the associated container + NodeRef rmContainer = getAssociatedRecordsManagementContainer(dispositionSchdule); + + return hasDisposableItemsImpl(dispositionSchdule.isRecordLevelDisposition(), rmContainer); + } + + /** + * Method that provides a boolean if given Records Management Container has disposable items. + * This method is similar to getDisposableItemsImpl(boolean isRecordLevelDisposition, NodeRef rmContainer) but with improved performance: + * For RecordLevelDisposition it will limit Record retrieval to 1. + * Early returns once the first occurrence is found. + * @param isRecordLevelDisposition + * @param rmContainer + * @return + */ + private boolean hasDisposableItemsImpl(boolean isRecordLevelDisposition, NodeRef rmContainer) + { + List items = filePlanService.getAllContained(rmContainer); + for (NodeRef item : items) + { + if (recordFolderService.isRecordFolder(item)) + { + if (isRecordLevelDisposition) + { + List assocs = nodeService.getChildAssocs(item, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL, 1, true); + if (!assocs.isEmpty()) + { + return true; + } + } + else + { + return true; + } + } + else if (filePlanService.isRecordCategory(item) && getAssociatedDispositionScheduleImpl(item) == null) + { + return hasDisposableItemsImpl(isRecordLevelDisposition, item); + } + } + return false; } /** From 281d150f3115155374d7871b3f53dfa3536bfa23 Mon Sep 17 00:00:00 2001 From: Epure Alexandru-Eusebiu Date: Fri, 4 Dec 2020 10:36:11 +0200 Subject: [PATCH 2/4] Fix the early returning of the recurssion. --- .../disposition/DispositionServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 37394e6cb6..66e9e1bf7c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -527,7 +527,10 @@ public class DispositionServiceImpl extends ServiceBaseImpl } else if (filePlanService.isRecordCategory(item) && getAssociatedDispositionScheduleImpl(item) == null) { - return hasDisposableItemsImpl(isRecordLevelDisposition, item); + if (hasDisposableItemsImpl(isRecordLevelDisposition, item)); + { + return true; + } } } return false; From a70555b11ce97cb883f7bef8d5b2be8a235c1dcb Mon Sep 17 00:00:00 2001 From: Epure Alexandru-Eusebiu Date: Fri, 4 Dec 2020 10:37:16 +0200 Subject: [PATCH 3/4] Change travis.yml setting to trigger a build. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a61a87d351..18a5f34ffc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ branches: - /release\/V3.\d+.*/ - /feature-3.\d+\/.*/ - /merge-3.\d+\/.*/ - - /hotfix-3.\d+\/.*/ + - /hotfix-3.2.0.11/.*/ cache: directories: From 4b5978e199617bbe58370858de6c418261d34605 Mon Sep 17 00:00:00 2001 From: Epure Alexandru-Eusebiu Date: Fri, 4 Dec 2020 19:42:49 +0200 Subject: [PATCH 4/4] Revert "Change travis.yml setting to trigger a build." This reverts commit a70555b11ce97cb883f7bef8d5b2be8a235c1dcb. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 18a5f34ffc..a61a87d351 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ branches: - /release\/V3.\d+.*/ - /feature-3.\d+\/.*/ - /merge-3.\d+\/.*/ - - /hotfix-3.2.0.11/.*/ + - /hotfix-3.\d+\/.*/ cache: directories: