From 3e2666b5a34daf8a73fd912bc274af29c1657ae4 Mon Sep 17 00:00:00 2001 From: benedwards Date: Wed, 26 Feb 2025 11:20:41 +0000 Subject: [PATCH 1/2] Updated ApplyRetention to only fetch objects when they need too --- .../repository/CaseRetentionRepository.java | 4 ++-- .../service/impl/ApplyRetentionProcessorImpl.java | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/darts/common/repository/CaseRetentionRepository.java b/src/main/java/uk/gov/hmcts/darts/common/repository/CaseRetentionRepository.java index 757813e23a..346416b1a2 100644 --- a/src/main/java/uk/gov/hmcts/darts/common/repository/CaseRetentionRepository.java +++ b/src/main/java/uk/gov/hmcts/darts/common/repository/CaseRetentionRepository.java @@ -85,14 +85,14 @@ and c.retentionPolicyType.fixedPolicyKey in ('PERM', 'MANUAL') @Query(""" - SELECT c + SELECT c.id FROM CaseRetentionEntity c WHERE c.currentState='PENDING' AND c.courtCase.caseClosedTimestamp <= :pendingCutoff ORDER BY c.createdDateTime DESC """ ) - List findPendingRetention(OffsetDateTime pendingCutoff, Limit limit); + List findPendingRetention(OffsetDateTime pendingCutoff, Limit limit); Optional findTopByCourtCaseOrderByRetainUntilAppliedOnDesc(CourtCaseEntity courtCase); diff --git a/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java b/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java index 40242adebd..ed72ab14dc 100644 --- a/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java @@ -16,6 +16,7 @@ import java.time.Duration; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; @Service @@ -32,18 +33,24 @@ public class ApplyRetentionProcessorImpl implements ApplyRetentionProcessor { @Override public void processApplyRetention(Integer batchSize) { - List caseRetentionEntities = + List caseRetentionEntitiesIds = caseRetentionRepository.findPendingRetention(currentTimeHelper.currentOffsetDateTime().minus(pendingRetentionDuration), Limit.of(batchSize)); - processList(caseRetentionEntities); + processList(caseRetentionEntitiesIds); } - protected void processList(List caseRetentionEntities) { + protected void processList(List caseRetentionEntitiesIds) { Set processedCases = new HashSet<>(); //List is ordered in createdDateTime desc order - for (CaseRetentionEntity caseRetentionEntity : caseRetentionEntities) { + for (Integer caseRetentionEntitiesId : caseRetentionEntitiesIds) { + Optional caseRetentionEntityOpt = caseRetentionRepository.findById(caseRetentionEntitiesId); + if (caseRetentionEntityOpt.isEmpty()) { + log.error("CaseRetentionEntity with id {} not found", caseRetentionEntitiesId); + continue; + } + CaseRetentionEntity caseRetentionEntity = caseRetentionEntityOpt.get(); CourtCaseEntity courtCaseEntity = caseRetentionEntity.getCourtCase(); if (processedCases.contains(courtCaseEntity.getId())) { caseRetentionEntity.setCurrentState(CaseRetentionStatus.IGNORED.name()); From e7060d7b3a98f96efaa467f054202336c175e0f5 Mon Sep 17 00:00:00 2001 From: benedwards Date: Wed, 26 Feb 2025 12:07:00 +0000 Subject: [PATCH 2/2] Fixed sonar --- .../retention/service/impl/ApplyRetentionProcessorImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java b/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java index ed72ab14dc..30a6fbadda 100644 --- a/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java +++ b/src/main/java/uk/gov/hmcts/darts/retention/service/impl/ApplyRetentionProcessorImpl.java @@ -40,6 +40,8 @@ public void processApplyRetention(Integer batchSize) { } + + @SuppressWarnings("java:S135")//Required to ensure we continue processing the list even if one of the elements fails protected void processList(List caseRetentionEntitiesIds) { Set processedCases = new HashSet<>();