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