diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java index 1b0d7bd0fc04de342c1943981471e9fd40645582..31805fceb126b65c9642606ade50587bb64956b3 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ResetArchivePendingTask.java @@ -1,7 +1,7 @@ package ch.systemsx.cisd.etlserver.plugins; import java.util.ArrayList; -import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; @@ -58,37 +58,38 @@ public class ResetArchivePendingTask implements IMaintenanceTask // 1. Find datasets with DataSetArchivingStatus.ARCHIVE_PENDING IEncapsulatedOpenBISService service = ServiceProvider.getOpenBISService(); List<SimpleDataSetInformationDTO> inArchivePendings = service.listPhysicalDataSetsByArchivingStatus(DataSetArchivingStatus.ARCHIVE_PENDING); - operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status."); - - // 2. Filter out datasets that are not on the command queue - IDataSetCommandExecutorProvider commandExecutorProvider = - (IDataSetCommandExecutorProvider) ServiceProvider - .getApplicationContext() - .getBean(COMMAND_EXECUTOR_BEAN); - IDataSetCommandExecutor commandExecutor = commandExecutorProvider.getDefaultExecutor(); - - Set<String> inQueue = commandExecutor.getDataSetCodesFromCommandQueue(); - operationLog.info("Found " + inQueue.size() + " datasets in the command queue."); - - List<SimpleDataSetInformationDTO> dataSetsToUpdate = new ArrayList<SimpleDataSetInformationDTO>(); - for (SimpleDataSetInformationDTO inArchivePending : inArchivePendings) + if (inArchivePendings.isEmpty() == false) { - if (inQueue.contains(inArchivePending.getDataSetCode()) == false - && inArchivePending.isPresentInArchive() == false) + operationLog.info("Found " + inArchivePendings.size() + " datasets in " + DataSetArchivingStatus.ARCHIVE_PENDING.name() + " status."); + + // 2. Filter out datasets that are not on the command queue + IDataSetCommandExecutorProvider commandExecutorProvider = + (IDataSetCommandExecutorProvider) ServiceProvider + .getApplicationContext() + .getBean(COMMAND_EXECUTOR_BEAN); + Set<String> inQueue = new HashSet<>(); + List<IDataSetCommandExecutor> executors = commandExecutorProvider.getAllExecutors(); + for (IDataSetCommandExecutor executor : executors) { - dataSetsToUpdate.add(inArchivePending); - operationLog.info(inArchivePending.getDataSetCode() + " not found in command queue, scheduled to update."); + inQueue.addAll(executor.getDataSetCodesFromCommandQueue()); } - } - - // 3. Update datasets status to AVAILABLE - operationLog.info("Going to update " + dataSetsToUpdate.size() + " datasets."); - for (SimpleDataSetInformationDTO dataSetToUpdate : dataSetsToUpdate) - { - DataSetCodesWithStatus codesWithStatus = new DataSetCodesWithStatus( - Arrays.asList(dataSetToUpdate.getDataSetCode()), - DataSetArchivingStatus.AVAILABLE, - dataSetToUpdate.isPresentInArchive()); + operationLog.info("Found " + inQueue.size() + " datasets in the command queue."); + + List<String> dataSetsToUpdate = new ArrayList<>(); + for (SimpleDataSetInformationDTO inArchivePending : inArchivePendings) + { + if (inQueue.contains(inArchivePending.getDataSetCode()) == false + && inArchivePending.isPresentInArchive() == false) + { + dataSetsToUpdate.add(inArchivePending.getDataSetCode()); + operationLog.info(inArchivePending.getDataSetCode() + " not found in command queue, scheduled to update."); + } + } + + // 3. Update datasets status to AVAILABLE + operationLog.info("Going to update " + dataSetsToUpdate.size() + " datasets."); + DataSetCodesWithStatus codesWithStatus = new DataSetCodesWithStatus(dataSetsToUpdate, + DataSetArchivingStatus.AVAILABLE, false); QueueingDataSetStatusUpdaterService.update(codesWithStatus); } operationLog.info(ResetArchivePendingTask.class.getSimpleName() + " Finished"); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java index 86e85312730c5ac59a5f6966caf799a30b6965cb..909d8839cddf43124522bd070e225b8d4388a11a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataSetCommandExecutor.java @@ -18,7 +18,6 @@ package ch.systemsx.cisd.openbis.dss.generic.server; import java.io.File; import java.io.FilenameFilter; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -194,6 +193,7 @@ class DataSetCommandExecutor implements IDataSetCommandExecutor operationLog.debug("Scheduling " + command); } commandQueue.add(command); + operationLog.info("Scheduled: " + command.getDescription()); } private IShareIdManager getShareIdManager() @@ -221,6 +221,7 @@ class DataSetCommandExecutor implements IDataSetCommandExecutor for (IDataSetCommand command : commandQueue) { dataSetCodes.addAll(command.getDataSetCodes()); + operationLog.info("Gather data set codes from command [" + command.getDescription() + "]"); } return dataSetCodes; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java index 3be969f55ce82f9d68607c690d32913f603ec7f6..5902cd2bbc108432f443370ccbbfc4021d97b30f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IDataSetCommandExecutorProvider.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; import java.io.File; +import java.util.List; import ch.systemsx.cisd.openbis.dss.generic.shared.IProcessingPluginTask; @@ -30,6 +31,8 @@ public interface IDataSetCommandExecutorProvider public void init(File storeRoot); public IDataSetCommandExecutor getDefaultExecutor(); - + + public List<IDataSetCommandExecutor> getAllExecutors(); + public IDataSetCommandExecutor getExecutor(IProcessingPluginTask processingTask, String processingTaskKey); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java index 6373eba288ba895f34df23a6ad58ea68cb7a607d..57526e420dc4bfde63c4ae9c76e31920e56c4183 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/KeyBasedDataSetCommandExecutorProvider.java @@ -159,6 +159,13 @@ public class KeyBasedDataSetCommandExecutorProvider implements IDataSetCommandEx } return defaultExecutor; } + + + @Override + public List<IDataSetCommandExecutor> getAllExecutors() + { + return new ArrayList<>(executorsByName.values()); + } @Override public IDataSetCommandExecutor getExecutor(IProcessingPluginTask processingTask, String processingTaskKey)