From 2569fbae358bc9e2f4acdeb571cd18fd0a9d30c0 Mon Sep 17 00:00:00 2001 From: juanf <juanf> Date: Tue, 7 Jun 2016 11:24:30 +0000 Subject: [PATCH] SSDM-3617 : Maintenance task to find orphan datasets in archivers, bugfixes SVN: 36641 --- .../DataSetArchiverOrphanFinderTask.java | 13 ++++---- .../MultiDataSetArchiverDataSourceUtil.java | 30 ++++++++++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java index 7d78949a6ad..5bdc49fde48 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/DataSetArchiverOrphanFinderTask.java @@ -34,16 +34,16 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask private List<EMailAddress> emailAddresses; private IMailClient mailClient; - + public DataSetArchiverOrphanFinderTask() { this(ServiceProvider.getDataStoreService().createEMailClient()); } - + DataSetArchiverOrphanFinderTask(IMailClient mailClient) { this.mailClient = mailClient; - + } @Override @@ -76,6 +76,7 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask // 2.1 Database. operationLog.info("2.1 Database, obtain a list of the multi dataset containers on the database."); List<String> containers = MultiDataSetArchiverDataSourceUtil.getContainerList(); + Set<String> multiDatasetsContainersOnDB = new HashSet<String>(); if (containers != null) { @@ -142,7 +143,9 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask String fileNameTar = presentOnDB + ".tar"; String fileNameZip = presentOnDB + ".zip"; - if (!presentInArchiveFS.contains(fileNameTar) && !presentInArchiveFS.contains(fileNameZip)) + if (presentInArchiveFS.contains(fileNameTar) == false && + presentInArchiveFS.contains(fileNameZip) == false && + MultiDataSetArchiverDataSourceUtil.isDataSetInContainer(presentOnDB.toUpperCase()) == false) { operationLog.debug("Single - Not found in FS for DB: " + presentOnDB); singleOnDBandNotFS.add(presentOnDB); @@ -150,7 +153,7 @@ public class DataSetArchiverOrphanFinderTask implements IMaintenanceTask } // 5. Send email with not found files. - if (onFSandNotDB.size() > 0) + if (onFSandNotDB.isEmpty() == false || multiOnDBandNotFS.isEmpty() == false || singleOnDBandNotFS.isEmpty() == false) { operationLog.info("5. Send email with not found files."); String subject = "openBIS Data Set Archiv Orphan Finder found files"; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDataSetArchiverDataSourceUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDataSetArchiverDataSourceUtil.java index 1be99eb4e89..5fea2caeee2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDataSetArchiverDataSourceUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDataSetArchiverDataSourceUtil.java @@ -21,6 +21,11 @@ import java.util.List; import javax.sql.DataSource; +import org.apache.log4j.Logger; + +import ch.systemsx.cisd.common.logging.LogCategory; +import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.etlserver.plugins.DataSetArchiverOrphanFinderTask; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; import net.lemnik.eodsql.QueryTool; @@ -29,6 +34,8 @@ import net.lemnik.eodsql.QueryTool; */ public class MultiDataSetArchiverDataSourceUtil { + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, DataSetArchiverOrphanFinderTask.class); + private static DataSource dataSource = ServiceProvider.getDataSourceProvider().getDataSource("multi-dataset-archiver-db"); static IMultiDataSetArchiverQueryDAO getTransactionalQuery() @@ -43,7 +50,15 @@ public class MultiDataSetArchiverDataSourceUtil public static List<String> getContainerList() { - List<MultiDataSetArchiverContainerDTO> containerDTOs = getReadonlyQueryDAO().listContainers(); + List<MultiDataSetArchiverContainerDTO> containerDTOs = null; + try + { + containerDTOs = getReadonlyQueryDAO().listContainers(); + } catch (Exception ex) + { + operationLog.info("Multi data set archiver unavailable"); + } + List<String> containers = new ArrayList<String>(); if (containerDTOs != null) { @@ -55,4 +70,17 @@ public class MultiDataSetArchiverDataSourceUtil return containers; } + public static Boolean isDataSetInContainer(String dataSetCode) + { + MultiDataSetArchiverDataSetDTO dataSetDTO = null; + try + { + dataSetDTO = getReadonlyQueryDAO().getDataSetForCode(dataSetCode); + } catch (Exception ex) + { + operationLog.info("Multi data set archiver unavailable"); + } + return dataSetDTO != null && dataSetDTO.getContainerId() > 0; + } + } -- GitLab