Пример #1
0
 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)
Пример #2
0
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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
 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)
Пример #6
0
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)
Пример #7
0
    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)
Пример #8
0
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)
Пример #9
0
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))
Пример #10
0
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)
Пример #11
0
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
Пример #12
0
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))
Пример #13
0
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)