From 214be38b14ccfc8d18747b3bd3e27429faab7c78 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 15 Jul 2014 06:24:01 +0000 Subject: [PATCH] SSDM-579: Bug fixed: Databases for data sets in trash can have been deleted. SVN: 32058 --- .../BlastDatabaseCreationMaintenanceTask.java | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/BlastDatabaseCreationMaintenanceTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/BlastDatabaseCreationMaintenanceTask.java index 89182f99318..1c439f46b57 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/BlastDatabaseCreationMaintenanceTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/BlastDatabaseCreationMaintenanceTask.java @@ -58,7 +58,9 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IConfigProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IHierarchicalContentProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.BlastUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletedDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria; /** @@ -70,16 +72,12 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask { static final String DATASET_TYPES_PROPERTY = "dataset-types"; - static final String BLAST_TOOLS_DIRECTORY_PROPERTY = "blast-tools-directory"; - static final String BLAST_DATABASES_FOLDER_PROPERTY = "blast-databases-folder"; static final String BLAST_TEMP_FOLDER_PROPERTY = "blast-temp-folder"; static final String LAST_SEEN_DATA_SET_FILE_PROPERTY = "last-seen-data-set-file"; static final String FILE_TYPES_PROPERTY = "file-types"; private static final String DEFAULT_LAST_SEEN_DATA_SET_FILE = "last-seen-data-set-for-BLAST-database-creation"; private static final String DEFAULT_FILE_TYPES = ".fasta .fa .fsa .fastq"; - private static final String DEFAULT_BLAST_DATABASES_FOLDER = "blast-databases"; - private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, BlastDatabaseCreationMaintenanceTask.class); private static final Logger machineLog = @@ -115,12 +113,13 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask lastSeenDataSetFile = getFile(properties, LAST_SEEN_DATA_SET_FILE_PROPERTY, DEFAULT_LAST_SEEN_DATA_SET_FILE); setUpBlastDatabasesFolder(properties); setUpBlastTempFolder(properties); - String blastToolDirectory = getBLASTToolDirectory(properties); + String blastToolDirectory = BlastUtils.getBLASTToolDirectory(properties); makeblastdb = blastToolDirectory + "makeblastdb"; if (process(makeblastdb, "-version") == false) { - operationLog.error("BLAST isn't installed or property '" + BLAST_TOOLS_DIRECTORY_PROPERTY + operationLog.error("BLAST isn't installed or property '" + BlastUtils.BLAST_TOOLS_DIRECTORY_PROPERTY + "' hasn't been correctly specified."); + makeblastdb = null; } makembindex = blastToolDirectory + "makembindex"; @@ -128,7 +127,7 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask private void setUpBlastDatabasesFolder(Properties properties) { - blastDatabasesFolder = getFile(properties, BLAST_DATABASES_FOLDER_PROPERTY, DEFAULT_BLAST_DATABASES_FOLDER); + blastDatabasesFolder = BlastUtils.getBlastDatabaseFolder(properties, getConfigProvider().getStoreRoot()); operationLog.info("BLAST databases folder: " + blastDatabasesFolder); if (blastDatabasesFolder.exists()) { @@ -146,7 +145,7 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask } } } - + private void setUpBlastTempFolder(Properties properties) { String tempFolderProperty = properties.getProperty(BLAST_TEMP_FOLDER_PROPERTY); @@ -174,23 +173,16 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask private File getFile(Properties properties, String pathProperty, String defaultPath) { - String path = properties.getProperty(pathProperty); - return path == null ? new File(getConfigProvider().getStoreRoot(), defaultPath) : new File(path); - } - - private String getBLASTToolDirectory(Properties properties) - { - String blastToolsDirectory = properties.getProperty(BLAST_TOOLS_DIRECTORY_PROPERTY, ""); - if (blastToolsDirectory.endsWith("/") || blastToolsDirectory.isEmpty()) - { - return blastToolsDirectory; - } - return blastToolsDirectory + "/"; + return BlastUtils.getFile(properties, pathProperty, defaultPath, getConfigProvider().getStoreRoot()); } @Override public void execute() { + if (makeblastdb == null) + { + return; + } IEncapsulatedOpenBISService service = getOpenBISService(); Map<SequenceType, VirtualDatabase> virtualDatabases = loadVirtualDatabases(service); @@ -233,13 +225,14 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask } if (dataSetCodes.isEmpty() == false) { - for (AbstractExternalData dataSet : service.listDataSetsByCode(new ArrayList<String>(dataSetCodes))) + Set<String> deletedDataSetCodes = new HashSet<String>(); + for (DeletedDataSet deletedDataSet : service.listDeletedDataSets(null, null)) { - dataSetCodes.remove(dataSet.getCode()); + deletedDataSetCodes.add(deletedDataSet.getCode()); } for (VirtualDatabase virtualDatabase : virtualDatabases.values()) { - virtualDatabase.removeDeletedDataSets(dataSetCodes); + virtualDatabase.removeDeletedDataSets(deletedDataSetCodes); } } return virtualDatabases; @@ -470,9 +463,10 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask { for (String dataSetCode : deletedDataSets) { - dataSetCodes.remove(dataSetCode); - final String databaseName = dataSetCode + postfix; - File[] files = databaseFolder.listFiles(new FilenameFilter() + if (dataSetCodes.remove(dataSetCode)) + { + final String databaseName = dataSetCode + postfix; + File[] files = databaseFolder.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) @@ -480,19 +474,20 @@ public class BlastDatabaseCreationMaintenanceTask implements IMaintenanceTask return name.startsWith(databaseName); } }); - if (files != null) - { - boolean success = true; - for (File file : files) + if (files != null) { - if (FileUtilities.delete(file) == false) + boolean success = true; + for (File file : files) { - operationLog.warn("File deletion failed: " + file); + if (FileUtilities.delete(file) == false) + { + operationLog.warn("File deletion failed: " + file); + } + } + if (success) + { + operationLog.info("BLAST database " + databaseName + " successfully deleted."); } - } - if (success) - { - operationLog.info("BLAST database " + databaseName + " successfully deleted."); } } } -- GitLab