diff --git a/src/python/dm/ds_web_service/service/impl/storageManager.py b/src/python/dm/ds_web_service/service/impl/storageManager.py index e12565f33385d633042f6d02d1ad01583c917917..ce22e750f8bbf4eaf6910604c54cbfd2d13d489a 100755 --- a/src/python/dm/ds_web_service/service/impl/storageManager.py +++ b/src/python/dm/ds_web_service/service/impl/storageManager.py @@ -2,10 +2,12 @@ import threading import time +import os from dm.common.utility.loggingManager import LoggingManager from dm.common.utility.configurationManager import ConfigurationManager from dm.common.utility.singleton import Singleton +from dm.common.utility.osUtility import OsUtility class StorageManager(Singleton): @@ -38,15 +40,35 @@ class StorageManager(Singleton): self.logger.debug('Got config items: %s' % configItems) self.storageDirectory = cm.getConfigOption(StorageManager.CONFIG_SECTION_NAME, StorageManager.STORAGE_DIRECTORY_KEY) + def __getExperimentStorageDataDirectory(self, experiment): + experimentTypeName = experiment.get('experimentType').get('rootDataPath') + experimentName = experiment.get('name') + storageDirectory = '%s/%s/%s' % (self.storageDirectory, experimentTypeName, experimentName) + storageDirectory = storageDirectory.replace('//', '/') + return storageDirectory + + def updateExperimentWithStorageDataDirectory(self, experiment): + self.lock.acquire() + try: + storageDirectory = self.__getExperimentStorageDataDirectory(experiment) + if os.path.exists(storageDirectory): + experiment['storageDirectory'] = storageDirectory + experiment['storageHost'] = ConfigurationManager.getInstance().getHost() + return storageDirectory + finally: + self.lock.release() + def createExperimentDataDirectory(self, experiment): self.lock.acquire() try: - experimentTypeName = experiment.get('experimentType').get('rootDataPath') experimentName = experiment.get('name') - dataDirectory = '%s/%s/%s' % (self.storageDirectory, experimentTypeName, experimentName) - dataDirectory = dataDirectory.replace('//', '/') - self.logger.debug('Creating data directory for experiment %s: %s' % (experimentName, dataDirectory)) - experiment['dataDirectory'] = dataDirectory + storageDirectory = self.__getExperimentStorageDataDirectory(experiment) + if os.path.exists(storageDirectory): + self.logger.debug('Data directory %s for experiment %s already exists' % (storageDirectory, experimentName)) + else: + self.logger.debug('Creating data directory for experiment %s: %s' % (experimentName, storageDirectory)) + OsUtility.createDir(storageDirectory) + experiment['storageDirectory'] = storageDirectory finally: self.lock.release()