From 3a2bc2280ece1d07adf1d61de1bf2a1448202e83 Mon Sep 17 00:00:00 2001 From: Gunter Zeilinger Date: Tue, 10 Oct 2023 14:40:23 +0200 Subject: [PATCH] Cancel scheduled Storage Verification of Series on Cache Storage on deletion of objects from this Storage fix #4251 --- .../org/dcm4chee/arc/delete/impl/DeletionServiceEJB.java | 5 +++++ .../src/main/java/org/dcm4chee/arc/entity/Series.java | 5 +++++ .../src/main/java/org/dcm4chee/arc/entity/Study.java | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/dcm4chee-arc-delete/src/main/java/org/dcm4chee/arc/delete/impl/DeletionServiceEJB.java b/dcm4chee-arc-delete/src/main/java/org/dcm4chee/arc/delete/impl/DeletionServiceEJB.java index 386e41a959..909164866e 100644 --- a/dcm4chee-arc-delete/src/main/java/org/dcm4chee/arc/delete/impl/DeletionServiceEJB.java +++ b/dcm4chee-arc-delete/src/main/java/org/dcm4chee/arc/delete/impl/DeletionServiceEJB.java @@ -392,6 +392,11 @@ private boolean deleteObjectsOfStudy(Study study, StorageDescriptor desc) { scheduleMetadataUpdate(series.getPk()); } updateStorageIDs(study, storageIDs); + if (!study.hasStorageIDs()) { + em.createNamedQuery(Series.CANCEL_STORAGE_VERIFICATION_OF_STUDY) + .setParameter(1, study) + .executeUpdate(); + } updateInstanceAvailability(study, desc.getInstanceAvailability(), remainingInstanceAvailability(desc)); return true; } diff --git a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Series.java b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Series.java index df43f26e29..fb02f28438 100644 --- a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Series.java +++ b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Series.java @@ -254,6 +254,10 @@ "se.pk, se.storageVerificationTime, se.seriesInstanceUID, se.study.studyInstanceUID) " + "from Series se " + "where se.storageVerificationTime < current_timestamp"), +@NamedQuery( + name = Series.CANCEL_STORAGE_VERIFICATION_OF_STUDY, + query = "update Series se set se.storageVerificationTime = null " + + "where se.study = ?1"), @NamedQuery( name = Series.SCHEDULED_COMPRESSION, query = "select new org.dcm4chee.arc.entity.Series$Compression(" + @@ -380,6 +384,7 @@ public class Series { public static final String FIND_BY_STUDY_PK_AND_INSTANCE_PURGE_STATE = "Series.findByStudyPkAndInstancePurgeState"; public static final String UPDATE_STGVER_FAILURES = "Series.updateStgVerFailures"; public static final String SCHEDULED_STORAGE_VERIFICATION = "Series.scheduledStorageVerification"; + public static final String CANCEL_STORAGE_VERIFICATION_OF_STUDY = "Series.cancelStorageVerificationOfStudy"; public static final String SCHEDULED_COMPRESSION = "Series.scheduledCompression"; public static final String INCREMENT_METADATA_UPDATE_FAILURES = "Series.setMetadataScheduledUpdateTime"; public static final String SET_METADATA = "Series.setMetadata"; diff --git a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Study.java b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Study.java index 6bb33f6ebf..0a682cae59 100644 --- a/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Study.java +++ b/dcm4chee-arc-entity/src/main/java/org/dcm4chee/arc/entity/Study.java @@ -433,6 +433,10 @@ public String getEncodedStorageIDs() { return storageIDs; } + public boolean hasStorageIDs() { + return storageIDs == null; + } + public String[] getStorageIDs() { return StringUtils.split(storageIDs, '\\'); }