diff --git a/Script/CastorScript.py b/Script/CastorScript.py index a6410669669c6db37612f25530acf655e9d62ab5..324eb9ccd3a648b29ee693d026b415b5f89ae984 100644 --- a/Script/CastorScript.py +++ b/Script/CastorScript.py @@ -64,7 +64,10 @@ DdmMonitoringQueue = Queue(config.DdmMonitoringQueueMaxSize) # created even if manager = ManagerThread(config, event, CopyQueue, DeleteQueue, ClearQueue) copy = CopyThread(config, event, dbLock, CopyQueue, DeleteQueue, ClearQueue, DdmMonitoringQueue) -delete = DeleteThread(config, event, dbLock, DeleteQueue, ClearQueue) + +delete = None +if config.DeleteEnabled: + delete = DeleteThread(config, event, dbLock, DeleteQueue, ClearQueue) ddm_publisher = None if config.DdmMonitoringEnabled: @@ -207,7 +210,8 @@ def main(conf): ##### Start the threads ##### manager.start() copy.start() - delete.start() + if delete is not None: + delete.start() if conf.ERSenabled: check.start() logger.info('Manager, Copy, Delete and Check Threads started') @@ -248,7 +252,7 @@ def main(conf): #Check worker states - if not (manager.isAlive() and copy.isAlive() and delete.isAlive()): + if not (manager.isAlive() and copy.isAlive() and (delete is None or delete.isAlive())): logger.warning('Inconsistent worker states. Manager-->%s Copy-->%s '\ 'Delete-->%s. Exiting!', manager.isAlive(), copy.isAlive(), delete.isAlive()) @@ -260,7 +264,8 @@ def main(conf): logger.info('Exit signal (12) received: exit in clean way') manager.managerExit() copy.copyExit() - delete.deleteExit() + if delete: + delete.deleteExit() if conf.ERSenabled: check.checkExit() @@ -271,7 +276,8 @@ def main(conf): ##### Wait for the threads to finish and then stop ##### manager.join() copy.join() - delete.join() + if delete: + delete.join() if conf.ERSenabled: check.join() logger.info('Manager,Copy, Delete and Check Threads joined the main thread') @@ -290,7 +296,7 @@ def Exit(signal_number, stackframe): def checkDB(db, logger, dblogger, parser, conf): - dbFlag = copy.getDBFlag() and delete.getDBFlag() + dbFlag = copy.getDBFlag() and (delete is None or delete.getDBFlag()) if not dbFlag: db = None if not db and conf.connection: @@ -305,7 +311,8 @@ def checkDB(db, logger, dblogger, parser, conf): # end try, except copy.setDB(db) - delete.setDB(db) + if delete: + delete.setDB(db) # end if not return db diff --git a/Script/CheckThread.py b/Script/CheckThread.py index 2804d794098acc9ea730526e9d6e4f9ee52a851a..babb39f54e8855a574ce070dda7f398f5532e706 100644 --- a/Script/CheckThread.py +++ b/Script/CheckThread.py @@ -100,14 +100,16 @@ class CheckThread(threading.Thread): self.check_logger.addHandler(self.check_ERS_handler) self.copy.AddRemoveERS(True) self.manager.AddRemoveERS(True) - self.delete.AddRemoveERS(True) + if self.delete: + self.delete.AddRemoveERS(True) else: ##### Remove ERS from all loggers ##### self.logger.removeHandler(self.ERS_handler) self.check_logger.removeHandler(self.check_ERS_handler) self.copy.AddRemoveERS(False) self.manager.AddRemoveERS(False) - self.delete.AddRemoveERS(False) + if self.delete: + self.delete.AddRemoveERS(False) # end if,else # end def change_state_ers() diff --git a/Script/Conf.cfg b/Script/Conf.cfg index 1cf8acff5de944f280166217c16351e6fe16af98..536dc7ddad2b5ddf64b9788ee48323a19a72a17b 100644 --- a/Script/Conf.cfg +++ b/Script/Conf.cfg @@ -192,6 +192,8 @@ bwDevice: None #[Delete] ########## DELETE THREAD ########## +# Disable to completely disable the feature (thread not started) +DeleteEnabled: True # Is simultaneous writing and deleting allowed? ignoreLock: True diff --git a/Script/Conf.py b/Script/Conf.py index 39e0807a6f091a6e7b33ca2104dc8166c880b077..8d0af732e311247d562233b767fe0ed0b014be13 100644 --- a/Script/Conf.py +++ b/Script/Conf.py @@ -303,6 +303,10 @@ class Conf: ########## DELETE THREAD ########## + try: + self.DeleteEnabled = cfg.DeleteEnabled + except AttributeError: + self.DeleteEnabled = True # Is simultaneous writing and deleting allowed? self.ignoreLock = cfg.ignoreLock diff --git a/Script/CopyThread.py b/Script/CopyThread.py index 6ecd39bc68fcfc660f3be68d0c07c9ad680495cc..958ebde6dfc4655be196ae4c90c766af3d3f583a 100644 --- a/Script/CopyThread.py +++ b/Script/CopyThread.py @@ -378,7 +378,8 @@ class CopyThread(threading.Thread): ) ##### Copy successfull: put .COPIED file in DeleteQueue for deletion ##### - self.DeleteQueue.put([DataFile,pool,copyDir,stagehost]) + if self.conf.DeleteEnabled: + self.DeleteQueue.put([DataFile,pool,copyDir,stagehost]) # block until room is available in the queue ????? ##### Remove the copy process from CopyList ##### diff --git a/Script/ManagerThread.py b/Script/ManagerThread.py index a405ef2888b55fc2e7c44007fa0d500851d12f53..f7bc1fe762c487f2c19c933c538dd57cf0c42a21 100644 --- a/Script/ManagerThread.py +++ b/Script/ManagerThread.py @@ -99,7 +99,8 @@ class ManagerThread(threading.Thread): StageHost = CastorInfo[2] self.CopyFileList.append(DataFile) - self.DeleteQueue.put([DataFile,CastorPool,CastorDir,StageHost]) + if self.conf.DeleteEnabled: + self.DeleteQueue.put([DataFile,CastorPool,CastorDir,StageHost]) self.logger.debug('File: %s in DeleteQueue', DataFile) self.logger.info('Size of DeleteQueue: %d', self.DeleteQueue.qsize())