From 53de9d3e75778327a0bc38314e86f97fa4f1f861 Mon Sep 17 00:00:00 2001 From: kaloyane <kaloyane> Date: Tue, 15 Mar 2011 15:00:09 +0000 Subject: [PATCH] [LMS-2087] integration tested with rsync archiver SVN: 20335 --- ...DeletionPostProcessingMaintenanceTask.java | 2 +- .../DeleteFromArchiveMaintenanceTask.java | 1 + .../server/business/bo/ExternalDataTable.java | 45 +++++++++++++++---- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/AbstractDataSetDeletionPostProcessingMaintenanceTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/AbstractDataSetDeletionPostProcessingMaintenanceTask.java index 6f63864adb6..9b7860c9edb 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/AbstractDataSetDeletionPostProcessingMaintenanceTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/AbstractDataSetDeletionPostProcessingMaintenanceTask.java @@ -44,7 +44,7 @@ public abstract class AbstractDataSetDeletionPostProcessingMaintenanceTask imple protected static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, AbstractDataSetDeletionPostProcessingMaintenanceTask.class); - protected static final String DELAY_AFTER_DELETION = "delay-after-deletion"; + protected static final String DELAY_AFTER_DELETION = "delay-after-user-deletion"; protected final IEncapsulatedOpenBISService openBISService; diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DeleteFromArchiveMaintenanceTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DeleteFromArchiveMaintenanceTask.java index de6d85a9978..349e2a607b2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DeleteFromArchiveMaintenanceTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DeleteFromArchiveMaintenanceTask.java @@ -61,6 +61,7 @@ public class DeleteFromArchiveMaintenanceTask extends try { String statusFileContent = FileUtilities.loadToString(lastSeenEventIdFile); + statusFileContent = statusFileContent.trim(); result = Long.parseLong(statusFileContent); } catch (Exception ex) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java index 3aac41784c3..16f94b17232 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java @@ -225,22 +225,47 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject public void deleteLoadedDataSets(String reason) { assertDatasetsAreDeletable(externalData); - Map<DataStorePE, List<ExternalDataPE>> map = groupDataSetsByDataStores(); - assertDataSetsAreKnown(map); - for (Map.Entry<DataStorePE, List<ExternalDataPE>> entry : map.entrySet()) + + Map<DataStorePE, List<ExternalDataPE>> allToBeDeleted = groupDataSetsByDataStores(); + Map<DataStorePE, List<ExternalDataPE>> availableDatasets = + filterAvailableDatasets(allToBeDeleted); + + assertDataSetsAreKnown(availableDatasets); + for (Map.Entry<DataStorePE, List<ExternalDataPE>> entry : allToBeDeleted.entrySet()) { DataStorePE dataStore = entry.getKey(); - List<ExternalDataPE> dataSets = entry.getValue(); + List<ExternalDataPE> allDataSets = entry.getValue(); // delete locally from DB - for (ExternalDataPE dataSet : dataSets) + for (ExternalDataPE dataSet : allDataSets) { deleteDataSetLocally(dataSet, reason); } - // delete remotely from Data Store - deleteDataSets(dataStore, createDatasetDescriptions(dataSets)); + // delete remotely from Data Store (only executed for available datasets) + List<ExternalDataPE> available = availableDatasets.get(dataStore); + deleteDataSets(dataStore, createDatasetDescriptions(available)); } } + private Map<DataStorePE, List<ExternalDataPE>> filterAvailableDatasets( + Map<DataStorePE, List<ExternalDataPE>> map) + { + Map<DataStorePE, List<ExternalDataPE>> result = + new HashMap<DataStorePE, List<ExternalDataPE>>(); + for (Map.Entry<DataStorePE, List<ExternalDataPE>> entry : map.entrySet()) + { + ArrayList<ExternalDataPE> available = new ArrayList<ExternalDataPE>(); + for (ExternalDataPE data : entry.getValue()) + { + if (data.getStatus().isAvailable()) + { + available.add(data); + } + } + result.put(entry.getKey(), available); + } + return result; + } + private void deleteDataSetLocally(ExternalDataPE dataSet, String reason) throws UserFailureException { @@ -343,7 +368,11 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject List<String> unknownDataSets = new ArrayList<String>(); for (ExternalDataPE dataSet : externalData) { - if (knownLocations.contains(dataSet.getLocation()) == false) + if (dataSet.getStatus() == DataSetArchivingStatus.ARCHIVED) + { + // archived datasets are currently not available in the data store + // but can be deleted + } else if (knownLocations.contains(dataSet.getLocation()) == false) { unknownDataSets.add(dataSet.getCode()); } -- GitLab