diff --git a/src/python/dm/common/constants/dmProcessingStatus.py b/src/python/dm/common/constants/dmProcessingStatus.py index 3cc2825741ee4ac3ef890bda6b6656cf30867c81..e84703efd9f6d07676de3c4f1d3e95b38e13dc0b 100755 --- a/src/python/dm/common/constants/dmProcessingStatus.py +++ b/src/python/dm/common/constants/dmProcessingStatus.py @@ -34,5 +34,6 @@ DM_INACTIVE_PROCESSING_STATUS_LIST = [ DM_ACTIVE_PROCESSING_STATUS_LIST = [ DM_PROCESSING_STATUS_PENDING, DM_PROCESSING_STATUS_RUNNING, + DM_PROCESSING_STATUS_FINALIZING, DM_PROCESSING_STATUS_ABORTING ] diff --git a/src/python/dm/common/objects/daqInfo.py b/src/python/dm/common/objects/daqInfo.py index 468f4ea7eac00bb402a18407a3cdc3f423274d45..b45d6cc51ba20787d5975655fcbc5cf0759b1258 100755 --- a/src/python/dm/common/objects/daqInfo.py +++ b/src/python/dm/common/objects/daqInfo.py @@ -78,7 +78,7 @@ class DaqInfo(DmObject): if self.get('endTime'): daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_FINALIZING - if nCompletedFiles == nFiles: + if nCompletedFiles >= nFiles: daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_DONE if nProcessingErrors: daqStatus = dmProcessingStatus.DM_PROCESSING_STATUS_FAILED diff --git a/src/python/dm/common/objects/uploadInfo.py b/src/python/dm/common/objects/uploadInfo.py index a119b0ae1521ef50c182b4fb4f1cfd6e63c5a9b1..5fd41280cfef38444e6b83933451e5f8129c5c25 100755 --- a/src/python/dm/common/objects/uploadInfo.py +++ b/src/python/dm/common/objects/uploadInfo.py @@ -73,7 +73,7 @@ class UploadInfo(DmObject): startTime = self.get('startTime', now) runTime = now - startTime endTime = None - if nCompletedFiles == nFiles: + if nCompletedFiles == nFiles and uploadStatus != dmProcessingStatus.DM_PROCESSING_STATUS_PENDING: uploadStatus = 'done' if nProcessingErrors: uploadStatus = 'failed' @@ -84,7 +84,7 @@ class UploadInfo(DmObject): endTime = lastFileProcessingErrorTime if nCancelledFiles > 0 and nCancelledFiles+nCompletedFiles == nFiles: - uploadStatus = 'aborted' + uploadStatus = dmProcessingStatus.DM_PROCESSING_STATUS_ABORTED endTime = self.get('lastFileProcessingCancelledTime', now) if endTime: diff --git a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py index f6b6106973d6dbd0820c3e6c6306993f24b69fdf..4c79ea8cbb919916d607dc8e71d5acd2b9b11d5b 100755 --- a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py +++ b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py @@ -2,6 +2,7 @@ import os import time +from dm.common.constants import dmProcessingStatus from dm.common.utility.loggingManager import LoggingManager from dm.common.objects.observedFile import ObservedFile from dm.common.utility.timeUtility import TimeUtility @@ -123,7 +124,7 @@ class MongoDbFileCatalogPlugin(FileProcessor): fileInfo['daqInfo'] = daqInfo fileInfo['uploadId'] = uploadId - if uploadInfo.get('status') != 'aborting': + if uploadInfo.get('status') != dmProcessingStatus.DM_PROCESSING_STATUS_ABORTING: self.processFile(fileInfo) nProcessedFiles += 1 else: diff --git a/src/python/dm/common/utility/ldapUserManager.py b/src/python/dm/common/utility/ldapUserManager.py index 370d332bfcc5341f44dc5c2a6551f489a857c0a1..3418174c504324451f70fdf8de3d46db18065c20 100755 --- a/src/python/dm/common/utility/ldapUserManager.py +++ b/src/python/dm/common/utility/ldapUserManager.py @@ -122,6 +122,11 @@ class LdapUserManager(LdapClient): ldapUserInfo = self.getUserInfo(username) userDn = ldapUserInfo.get('userDn') userAttrs = ldapUserInfo.get('userAttrs') + + # Remove internal LDAP attributes before creating copy for modifications + for key in [ 'modifyTimestamp', 'createTimeStamp' ]: + if userAttrs.has_key(key): + del userAttrs[key] userAttrs2 = copy.copy(userAttrs) middleName = attrDict.get('middleName', '') @@ -151,8 +156,8 @@ class LdapUserManager(LdapClient): if passwordHash: userAttrs2['userPassword'] = [self.encodePasswordHash(passwordHash)] #logger.debug('Encoded password entry: %s' % passwordHash) - logger.debug('Modifying user %s with attrs %s' % (username, userAttrs2)) - + logger.debug('Old user %s attrs: %s' % (username, userAttrs)) + logger.debug('Modified user %s attrs: %s' % (username, userAttrs2)) userLdif = ldap.modlist.modifyModlist(userAttrs, userAttrs2) ldapClient.modify_s(userDn, userLdif) return LdapUserInfo({'userDn' : userDn, 'userAttrs' : userAttrs2}) diff --git a/src/python/dm/daq_web_service/service/impl/uploadTracker.py b/src/python/dm/daq_web_service/service/impl/uploadTracker.py index 89e57447f3d529bcc0fc3f0699cf3f04d63d74b9..7634ed34e6186f7223aad1426a19b90e150270be 100755 --- a/src/python/dm/daq_web_service/service/impl/uploadTracker.py +++ b/src/python/dm/daq_web_service/service/impl/uploadTracker.py @@ -25,7 +25,7 @@ class UploadTracker(ObjectTracker): uploadInfo = self.get(uploadId) if uploadInfo is not None: uploadInfo.updateStatus() - if uploadInfo.get('status') == dmProcessingStatus.DM_PROCESSING_STATUS_RUNNING: + if uploadInfo.get('status') in dmProcessingStatus.DM_ACTIVE_PROCESSING_STATUS_LIST: raise ObjectAlreadyExists('Upload id %s is already active for experiment %s in data directory %s.' % (uploadId, experimentName, dataDir)) del self.activeUploadDict[activeUploadKey]