def initialize(self, db_config): self.db_config = db_config self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_ids = [] self.inserted = True dbowner = self.db_config.get('dbowner') connectUrl = self.db_config.get('connectUrl') dbFactory = DBFactory(MgrLogger, connectUrl, options={}) self.dbi = dbFactory.connect() self.dbFormatter = DBFormatter(MgrLogger, self.dbi) self.dbsMigrate = DBSMigrate(MgrLogger, self.dbi, dbowner) self.DBSBlockInsert = DBSBlockInsert(MgrLogger, self.dbi, dbowner)
class DBSMigrateModel(RESTModel): """ DBS Migration Service Web Model """ def __init__(self, config): """ All parameters are provided through DBSConfig module """ RESTModel.__init__(self, config) self.addMethod('POST', 'submit', self.submit) self.addMethod('POST', 'remove', self.remove) self.addMethod('GET', 'status', self.status) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, config.dbowner) def submit(self): """ Interface for submitting a migration request """ body = request.body.read() indata = cjson.decode(body) indata.update({"creation_date": dbsUtils().getTime(), \ "last_modification_date" : dbsUtils().getTime(), \ "create_by" : dbsUtils().getCreateBy() , "last_modified_by" : 0 }) return self.dbsMigrate.insertMigrationRequest(indata) def status(self, migration_request_id="", block_name="", dataset="", user=""): """ Interface to query status of a migration request In this preference order of input parameters :- migration_request_id, block, dataset, user (if multi parameters are provided, only the precedence order is followed """ return self.dbsMigrate.listMigrationRequests(migration_request_id, block_name, dataset, user) def remove(self, migration_request_id=""): """ Interface to remove a migration request from the queue Only FAILED, COMPLETED and PENDING requests can be removed (running requests cannot be removed) """ return self.dbsMigrate.removeMigrationRequest(migration_request_id)
def __init__(self, config): """ All parameters are provided through DBSConfig module """ RESTModel.__init__(self, config) self.addMethod('POST', 'submit', self.submit) self.addMethod('POST', 'remove', self.remove) self.addMethod('GET', 'status', self.status) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, config.dbowner)
def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) # set proper logger name self.logger.name = __name__ self.methods = {'GET':{}, 'PUT':{}, 'POST':{}, 'DELETE':{}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner)
def initialize(self, db_config): self.db_config = db_config self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_ids = [] self.inserted = True dbowner = self.db_config.get('dbowner') connectUrl = self.db_config.get('connectUrl') dbFactory = DBFactory(MgrLogger, connectUrl, options={}) self.dbi = dbFactory.connect() self.dbFormatter = DBFormatter(MgrLogger,self.dbi) self.dbsMigrate = DBSMigrate(MgrLogger, self.dbi, dbowner) self.DBSBlockInsert = DBSBlockInsert(MgrLogger, self.dbi, dbowner)
class DBSMigrateModel(RESTModel): """ DBS Migration Service Web Model """ def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) self.methods = {'GET':{}, 'PUT':{}, 'POST':{}, 'DELETE':{}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner) def submit(self): """ Interface for submitting a migration request. Required input keys: MIGRATION_URL: The source DBS url for migration. MIGRATION_INPUT: The block or dataset names to be migrated. """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst",indata) indata.update({"creation_date": dbsUtils().getTime(), "last_modification_date" : dbsUtils().getTime(), "create_by" : dbsUtils().getCreateBy() , "last_modified_by" : dbsUtils().getCreateBy(), "migration_status": 0}) return self.dbsMigrate.insertMigrationRequest(indata) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception, ex: sError = "DBSMigrateModle/submit. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) dbsExceptionHandler('dbsException-server-error', dbsExceptionCode['dbsException-server-error'], self.logger.exception, sError)
def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) self.methods = {'GET':{}, 'PUT':{}, 'POST':{}, 'DELETE':{}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner)
class MigrationTask(SequencialTaskBase): def initialize(self, db_config): self.db_config = db_config self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_ids = [] self.inserted = True dbowner = self.db_config.get('dbowner') connectUrl = self.db_config.get('connectUrl') dbFactory = DBFactory(MgrLogger, connectUrl, options={}) self.dbi = dbFactory.connect() self.dbFormatter = DBFormatter(MgrLogger, self.dbi) self.dbsMigrate = DBSMigrate(MgrLogger, self.dbi, dbowner) self.DBSBlockInsert = DBSBlockInsert(MgrLogger, self.dbi, dbowner) def setCallSequence(self): self._callSequence = [self.getResource, self.insertBlock, self.cleanup] def getResource(self): #MgrLogger.info("_"*20+ "getResource") #query the MIGRATION_REQUESTS table to get a request with the smallest CREATION_DATE # and MIGRATION_STATUS = 0(pending) try: #set MIGRATION_STATUS = 1(in progess) and commit it imeditaly to avoid other threads to touch it. req = self.dbsMigrate.listMigrationRequests(oldest=True) if len(req) == 0: self.sourceUrl = None return # don't need to go down. try: request = req[0] self.sourceUrl = request['migration_url'] self.migration_req_id = request['migration_request_id'] MgrLogger.error("-" * 20 + time.asctime(time.gmtime()) + ' Migration request ID: ' + str(self.migration_req_id)) migration_status = 1 self.dbsMigrate.updateMigrationRequestStatus( migration_status, self.migration_req_id) except IndexError: return #No request found. Exit. except Exception, ex: MgrLogger.error(time.asctime(time.gmtime()) + str(ex)) self.sourceUrl = None return # don't need to go down. self.block_names = [] self.migration_block_ids = [] #query migration_blocks table to get a list of block_names to be migrated # and migration_block_id list. Both lists are ordered by MIGRATION_ORDER try: blocks = self.dbsMigrate.listMigrationBlocks(self.migration_req_id) for b in blocks: self.block_names.append(b['migration_block_name']) self.migration_block_ids.append(b['migration_block_id']) if not self.block_names: logmessage="No migration blocks found under the migration request id %s." %(self.migration_req_id )+ \ "DBS Operator please check it." #set MIGRATION_STATUS = 3(failed) for MIGRATION_REQUESTS #if try_count==3, the sql will actually set the migration_status=9 (terminally failed) instead of 3 self.dbsMigrate.updateMigrationRequestStatus( 3, self.migration_req_id) self.sourceUrl = None MgrLogger.error(time.asctime(time.gmtime()) + logmessage) else: #Update MIGRATION_STATUS for all the MIGRATION_BLOCK_IDs in the self.migration_block_id list #in MIGRATION_BLOCKS table to 1 (in progress) #set MIGRATION_STATUS = 1 and commit it immediately #MgrLogger.error("-"*20+ 'Regester ID: %s '%self.migration_req_id + 'Migration Block Names: ') #MgrLogger.error("block_name: %s. Set all block status=1 " %self.block_names) self.dbsMigrate.updateMigrationBlockStatus( migration_status=1, migration_block=self.migration_block_ids) except Exception, ex: self.sourceUrl = None #MgrLogger.error( time.asctime(time.gmtime()) + str(ex) ) #print "set MIGRATION_STATUS = 3(failed) for blocks of MIGRATION_REQUESTS_ID=%s" %self.migration_req_id self.dbsMigrate.updateMigrationRequestStatus( 3, self.migration_req_id)
class DBSMigrateModel(RESTModel): """ DBS Migration Service Web Model """ def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) self.methods = {'GET': {}, 'PUT': {}, 'POST': {}, 'DELETE': {}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self._addMethod( 'GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner) def submit(self): """ Interface for submitting a migration request. Required input keys: MIGRATION_URL: The source DBS url for migration. MIGRATION_INPUT: The block or dataset names to be migrated. """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst", indata) indata.update({ "creation_date": dbsUtils().getTime(), "last_modification_date": dbsUtils().getTime(), "create_by": dbsUtils().getCreateBy(), "last_modified_by": dbsUtils().getCreateBy(), "migration_status": 0 }) return self.dbsMigrate.insertMigrationRequest(indata) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception as ex: sError = "DBSMigrateModle/submit. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) if hasattr(ex, 'status') and ex.status == 400: dbsExceptionHandler('dbsException-invalid-input2', str(ex), self.logger.exception, sError) else: dbsExceptionHandler('dbsException-server-error', str(ex), self.logger.exception, sError) @inputChecks(migration_rqst_id=(long, int, basestring), block_name=basestring, dataset=basestring, user=basestring) def status(self, migration_rqst_id="", block_name="", dataset="", user=""): """ Interface to query status of a migration request In this preference order of input parameters : migration_rqst_id, block, dataset, user (if multi parameters are provided, only the precedence order is followed) """ try: return self.dbsMigrate.listMigrationRequests( migration_rqst_id, block_name, dataset, user) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception as ex: sError = "DBSMigrateModle/status. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) if hasattr(ex, 'status') and ex.status == 400: dbsExceptionHandler('dbsException-invalid-input2', str(ex), self.logger.exception, sError) else: dbsExceptionHandler('dbsException-server-error', str(ex), self.logger.exception, sError) def remove(self): """ Interface to remove a migration request from the queue. Only Permanent FAILED/9 and PENDING/0 requests can be removed (running and sucessed requests cannot be removed) """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst", indata) return self.dbsMigrate.removeMigrationRequest(indata) except dbsException as he: dbsExceptionHandler(he.eCode, he.message, self.logger.exception, he.message) except Exception as e: if e.code == 400: dbsExceptionHandler('dbsException-invalid-input2', str(e), self.logger.exception, str(e)) else: dbsExceptionHandler( 'dbsException-server-error', dbsExceptionCode['dbsException-server-error'], self.logger.exception, str(e))
class MigrationTask(SequencialTaskBase): def initialize(self, db_config): self.db_config = db_config self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_ids = [] self.inserted = True dbowner = self.db_config.get('dbowner') connectUrl = self.db_config.get('connectUrl') dbFactory = DBFactory(MgrLogger, connectUrl, options={}) self.dbi = dbFactory.connect() self.dbFormatter = DBFormatter(MgrLogger,self.dbi) self.dbsMigrate = DBSMigrate(MgrLogger, self.dbi, dbowner) self.DBSBlockInsert = DBSBlockInsert(MgrLogger, self.dbi, dbowner) def setCallSequence(self): self._callSequence = [self.getResource, self.insertBlock, self.cleanup] def getResource(self): #MgrLogger.info("_"*20+ "getResource") #query the MIGRATION_REQUESTS table to get a request with the smallest CREATION_DATE # and MIGRATION_STATUS = 0(pending) try: #set MIGRATION_STATUS = 1(in progess) and commit it imeditaly to avoid other threads to touch it. req = self.dbsMigrate.listMigrationRequests(oldest=True) try: request =req[0] self.sourceUrl = request['migration_url'] self.migration_req_id = request['migration_request_id'] MgrLogger.error("-"*20+ time.asctime(time.gmtime()) + ' Migration request ID: '+ str(self.migration_req_id)) migration_status = 1 self.dbsMigrate.updateMigrationRequestStatus(migration_status, self.migration_req_id) except IndexError: return #No request found. Exit. except Exception, ex: MgrLogger.error( time.asctime(time.gmtime()) + str(ex) ) self.sourceUrl = None return # don't need to go down. self.block_names = [] self.migration_block_ids = [] #query migration_blocks table to get a list of block_names to be migrated # and migration_block_id list. Both lists are ordered by MIGRATION_ORDER try: blocks = self.dbsMigrate.listMigrationBlocks(self.migration_req_id) for b in blocks: self.block_names.append(b['migration_block_name']) self.migration_block_ids.append(b['migration_block_id']) if not self.block_names : logmessage="No migration blocks found under the migration request id %s." %(self.migration_req_id )+ \ "DBS Operator please check it." #set MIGRATION_STATUS = 3(failed) for MIGRATION_REQUESTS self.dbsMigrate.updateMigrationRequestStatus(3, self.migration_req_id) self.sourceUrl = None MgrLogger.error( time.asctime(time.gmtime()) + logmessage ) else: #Update MIGRATION_STATUS for all the MIGRATION_BLOCK_IDs in the self.migration_block_id list #in MIGRATION_BLOCKS table to 1 (in progress) #set MIGRATION_STATUS = 1 and commit it immediately #MgrLogger.info("-"*20+ 'Regester ID: %s '%self.migration_req_id + 'Migration Block Names: ') #MgrLogger.info("block_name: %s" %self.block_names) self.dbsMigrate.updateMigrationBlockStatus(migration_status=1, migration_block=self.migration_block_ids) except Exception, ex: self.sourceUrl = None MgrLogger.error( time.asctime(time.gmtime()) + str(ex) ) #set MIGRATION_STATUS = 3(failed) for MIGRATION_REQUESTS self.dbsMigrate.updateMigrationRequestStatus(3, self.migration_req_id)
class MigrationTask(SequencialTaskBase): def initialize(self, db_config): self.db_config = db_config self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_ids = [] self.inserted = True dbowner = self.db_config.get('dbowner') connectUrl = self.db_config.get('connectUrl') print(connectUrl) dbFactory = DBFactory(MgrLogger, connectUrl, options={}) self.dbi = dbFactory.connect() self.dbFormatter = DBFormatter(MgrLogger, self.dbi) self.dbsMigrate = DBSMigrate(MgrLogger, self.dbi, dbowner) self.DBSBlockInsert = DBSBlockInsert(MgrLogger, self.dbi, dbowner) def setCallSequence(self): self._callSequence = [self.getResource, self.insertBlock, self.cleanup] def getResource(self): #MgrLogger.info("_"*20+ "getResource") #query the MIGRATION_REQUESTS table to get a request with the smallest CREATION_DATE # and MIGRATION_STATUS = 0(pending) try: #set MIGRATION_STATUS = 1(in progess) and commit it imeditaly to avoid other threads to touch it. req = self.dbsMigrate.listMigrationRequests(oldest=True) if len(req) == 0: self.sourceUrl = None return # don't need to go down. try: request =req[0] self.sourceUrl = request['migration_url'] self.migration_req_id = request['migration_request_id'] MgrLogger.error("-"*20+ "getResource-- "+ time.asctime(time.gmtime()) + ' Migration request ID: '+ str(self.migration_req_id)) migration_status = 1 self.dbsMigrate.updateMigrationRequestStatus(migration_status, self.migration_req_id) except IndexError: return #No request found. Exit. except Exception as ex: MgrLogger.error( time.asctime(time.gmtime()) + str(ex) ) self.sourceUrl = None return # don't need to go down. self.block_names = [] self.migration_block_ids = [] #query migration_blocks table to get a list of block_names to be migrated # and migration_block_id list. Both lists are ordered by MIGRATION_ORDER try: blocks = self.dbsMigrate.listMigrationBlocks(self.migration_req_id) for b in blocks: self.block_names.append(b['migration_block_name']) self.migration_block_ids.append(b['migration_block_id']) if not self.block_names : logmessage="No migration blocks found under the migration request id %s." %(self.migration_req_id )+ \ "DBS Operator please check it." #set MIGRATION_STATUS = 3(failed) for MIGRATION_REQUESTS #if try_count==3, the sql will actually set the migration_status=9 (terminally failed) instead of 3 self.dbsMigrate.updateMigrationRequestStatus(3, self.migration_req_id) self.sourceUrl = None MgrLogger.error( time.asctime(time.gmtime()) + logmessage ) else: #Update MIGRATION_STATUS for all the MIGRATION_BLOCK_IDs in the self.migration_block_id list #in MIGRATION_BLOCKS table to 1 (in progress) #set MIGRATION_STATUS = 1 and commit it immediately #MgrLogger.error("-"*20+ 'Regester ID: %s '%self.migration_req_id + 'Migration Block Names: ') #MgrLogger.error("block_name: %s. Set all block status=1 " %self.block_names) self.dbsMigrate.updateMigrationBlockStatus(migration_status=1, migration_block=self.migration_block_ids) except Exception as ex: self.sourceUrl = None #MgrLogger.error( time.asctime(time.gmtime()) + str(ex) ) #print "set MIGRATION_STATUS = 3(failed) for blocks of MIGRATION_REQUESTS_ID=%s" %self.migration_req_id self.dbsMigrate.updateMigrationRequestStatus(3, self.migration_req_id) def insertBlock(self): MgrLogger.info("_"*20+"insertBlock") self.inserted = True if self.sourceUrl: try: for idx, bName in enumerate(self.block_names): params={'block_name':bName} data = self.dbsMigrate.callDBSService(self.sourceUrl, 'blockdump', params) data = cjson.decode(data) #MgrLogger.error( "--YG migration server blockdump--") #MgrLogger.error( data) migration_status = 0 #idx = self.block_names.index(bName) MgrLogger.error("-"*20 + time.asctime(time.gmtime()) + " Inserting block: %s for request id: %s" %(bName, self.migration_req_id)) try: self.DBSBlockInsert.putBlock(data, migration=True) migration_status = 2 except HTTPError as he: if "Block %s already exists" % (bName) in str(he): migration_status = 2 else: raise except dbsException as de: if "Block %s already exists" % (bName) in de.message: #the block maybe get into the destination by other means. #skip this block and continue. migration_status = 2 else: raise except Exception as ex: if "Block %s already exists" % (bName) in str(ex): migration_status = 2 else: raise finally: if migration_status == 2: self.dbsMigrate.updateMigrationBlockStatus(migration_status=2, migration_block=self.migration_block_ids[idx]) MgrLogger.error("-"*20 + time.asctime(time.gmtime()) + " Done insert block: %s for request id: %s" %(bName, self.migration_req_id)) self.dbsMigrate.updateMigrationRequestStatus(2, self.migration_req_id) except Exception as ex: self.inserted = False #handle dbsException if type(ex) == dbsException: MgrLogger.error( time.asctime(time.gmtime()) + ex.message + ex.serverError ) MgrLogger.error(time.asctime(time.gmtime()) + str(ex)) #if try_count==3, the sql will actually set the status=9 (terminally failed) instead of 3 #print "set migration_status=3 or 9 for request and blocks ofmigration_request_id=%s" %self.migration_req_id self.dbsMigrate.updateMigrationRequestStatus(3, self.migration_req_id) self.dbsMigrate.updateMigrationBlockStatus(migration_status=3, migration_request=self.migration_req_id) return def cleanup(self): #MgrLogger.error("_"*20+"cleanup") #return to the initial status self.sourceUrl = None self.migration_req_id = 0 self.block_names = [] self.migration_block_id = [] self.inserted = True
class DBSMigrateModel(RESTModel): """ DBS Migration Service Web Model """ def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) self.methods = {'GET':{}, 'PUT':{}, 'POST':{}, 'DELETE':{}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self._addMethod('GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={'role':self.security_params, 'authzfunc': authInsert}) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner) def submit(self): """ Interface for submitting a migration request. Required input keys: MIGRATION_URL: The source DBS url for migration. MIGRATION_INPUT: The block or dataset names to be migrated. """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst", indata) indata.update({"creation_date": dbsUtils().getTime(), "last_modification_date" : dbsUtils().getTime(), "create_by" : dbsUtils().getCreateBy() , "last_modified_by" : dbsUtils().getCreateBy(), "migration_status": 0}) return self.dbsMigrate.insertMigrationRequest(indata) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception as ex: sError = "DBSMigrateModle/submit. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) if hasattr(ex, 'status') and ex.status == 400: dbsExceptionHandler('dbsException-invalid-input2', str(ex), self.logger.exception, sError) else: dbsExceptionHandler('dbsException-server-error', str(ex), self.logger.exception, sError) @inputChecks(migration_rqst_id=(long, int, basestring), block_name=basestring, dataset=basestring, user=basestring) def status(self, migration_rqst_id="", block_name="", dataset="", user=""): """ Interface to query status of a migration request In this preference order of input parameters : migration_rqst_id, block, dataset, user (if multi parameters are provided, only the precedence order is followed) """ try: return self.dbsMigrate.listMigrationRequests(migration_rqst_id, block_name, dataset, user) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception as ex: sError = "DBSMigrateModle/status. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) if hasattr(ex, 'status') and ex.status == 400: dbsExceptionHandler('dbsException-invalid-input2', str(ex), self.logger.exception, sError) else: dbsExceptionHandler('dbsException-server-error', str(ex), self.logger.exception, sError) def remove(self): """ Interface to remove a migration request from the queue. Only Permanent FAILED/9 and PENDING/0 requests can be removed (running and sucessed requests cannot be removed) """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst", indata) return self.dbsMigrate.removeMigrationRequest(indata) except dbsException as he: dbsExceptionHandler(he.eCode, he.message, self.logger.exception, he.message) except Exception as e: dbsExceptionHandler('dbsException-server-error', dbsExceptionCode['dbsException-server-error'], self.logger.exception, str(e))
class DBSMigrateModel(RESTModel): """ DBS Migration Service Web Model """ def __init__(self, config): """ All parameters are provided through DBSConfig module """ dbowner = config.database.dbowner RESTModel.__init__(self, config) self.methods = {'GET': {}, 'PUT': {}, 'POST': {}, 'DELETE': {}} self.security_params = config.security.params self._addMethod('POST', 'submit', self.submit, secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self._addMethod('POST', 'remove', self.remove, secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self._addMethod( 'GET', 'status', self.status, args=['migration_rqst_id', 'block_name', 'dataset', 'user'], secured=True, security_params={ 'role': self.security_params, 'authzfunc': authInsert }) self.dbsMigrate = DBSMigrate(self.logger, self.dbi, dbowner) def submit(self): """ Interface for submitting a migration request. Required input keys: MIGRATION_URL: The source DBS url for migration. MIGRATION_INPUT: The block or dataset names to be migrated. """ body = request.body.read() indata = cjson.decode(body) try: indata = validateJSONInputNoCopy("migration_rqst", indata) indata.update({ "creation_date": dbsUtils().getTime(), "last_modification_date": dbsUtils().getTime(), "create_by": dbsUtils().getCreateBy(), "last_modified_by": dbsUtils().getCreateBy(), "migration_status": 0 }) return self.dbsMigrate.insertMigrationRequest(indata) except dbsException as de: dbsExceptionHandler(de.eCode, de.message, self.logger.exception, de.serverError) except Exception, ex: sError = "DBSMigrateModle/submit. %s\n Exception trace: \n %s." \ % (ex, traceback.format_exc() ) dbsExceptionHandler('dbsException-server-error', dbsExceptionCode['dbsException-server-error'], self.logger.exception, sError)