Пример #1
0
    def fillp_transformer_data_status(self, protocol):
        agent_driver = self.agents.get(protocol)
        if not agent_driver:
            _msg = "Conveyor agent does not supprt: %s" % protocol
            LOG.error(_msg)
            raise exception.V2vException(message=_msg)

        try:
            service_name = protocol + '-client'
            res = agent_driver.query_transformer_task_status(service_name)
            return res
        except Exception as e:
            _msg = "Conveyor agent query transformer data status error: %s" % e
            LOG.error(_msg)
            raise exception.V2vException(message=_msg)
Пример #2
0
    def add_task(self, task):

        if not task:
            LOG.error("Add transformer task error: add task is null")
            msg = "add transformer task is null"
            raise exception.V2vException(message=msg)

        task_id = task.id

        exist_task = _task_map.get(task_id)

        if exist_task:
            LOG.error("Add transformer task error: add task is exist")
            msg = "add transformer task is exist"
            raise exception.V2vException(message=msg)

        _task_map[task_id] = task
Пример #3
0
    def remove(self, task_id):
        task = _task_map.get(task_id)
        if not task:
            LOG.error("remove transformer task error: task is not exist")
            msg = "Remove transformer task is not exist"
            raise exception.V2vException(message=msg)

        _task_map.pop(task_id)
Пример #4
0
def convert_version_to_int(version):
    try:
        if isinstance(version, six.string_types):
            version = convert_version_to_tuple(version)
        if isinstance(version, tuple):
            return reduce(lambda x, y: (x * 1000) + y, version)
    except Exception:
        msg = _("Version %s is invalid.") % version
        raise exception.V2vException(msg)
Пример #5
0
    def get_task_state(self, task_id):

        task = _task_map.get(task_id)
        if not task:
            LOG.error("Query transformer task state error: task is not exist")
            msg = "Query transformer task state is not exist"
            raise exception.V2vException(message=msg)

        return task.task_state
Пример #6
0
 def query_data_transformer_state(self, task_id):
     try:
         state = self.trans_states.get_task_state(task_id)
         return state
     except exception.V2vException as ext:
         LOG.error("Query task %(task_id)s state error: %(error)s", {
             'task_id': task_id,
             'error': ext
         })
         _msg = "Query task state error"
         raise exception.V2vException(message=_msg)
Пример #7
0
 def run(self):
     args = self.args
     if self.fun:
         try:
             self.fun(*args)
         except Exception as e:
             LOG.error("Conveyor agent operator %(ops)s error: %(error)s", {
                 'ops': self.fun,
                 'error': e
             })
             msg = 'Operator %s error' % self.fun
             raise exception.V2vException(message=msg)
Пример #8
0
    def start_transformer_data(self,
                               trans_ip,
                               trans_port,
                               src_dev,
                               des_dev,
                               protocol='fillp'):
        agent_driver = self.agents.get(protocol)

        if not agent_driver:
            _msg = "Conveyor agent does not supprt: %s" % protocol
            LOG.error(_msg)
            raise exception.V2vException(message=_msg)

        try:
            res = agent_driver.transformer_data(trans_ip, trans_port, src_dev,
                                                des_dev, protocol)
            return res
        except Exception as e:
            _msg = "Conveyor agent transformer data error: %s" % e
            LOG.error(_msg)
            raise exception.V2vException(message=_msg)
Пример #9
0
 def run(self):
     args = self.args
     if self.fun:
         try:
             self.fun(*args)
             self.trans_states.update_state(self.task_id,
                                            task_status.FINISHED)
         except Exception as e:
             self.trans_states.update_state(self.task_id, task_status.ERROR)
             LOG.error("Conveyor agent operator %(ops)s error: %(error)s", {
                 'ops': self.fun,
                 'error': e
             })
             msg = "Operator %s error" % self.fun
             raise exception.V2vException(message=msg)
Пример #10
0
    def _fillp_copy_volume(self, volume, protocol):
        # 1. get sgent vm info
        src_disk_name = volume.get('src_dev_name')
        dev_disk_name = volume.get('des_dev_name')
        src_vm_url = volume.get('src_gw_url')
        des_vm_url = volume.get('des_gw_url')
        mount_dir = volume.get('src_mount_point', None)

        mount = None
        if mount_dir:
            mount = mount_dir[0]

        des_urls = des_vm_url.split(':')
        if len(des_urls) != 2:
            LOG.error("Inpute source gw url error: %s", des_vm_url)
            msg = "Inpute source gw url error: %s" % des_vm_url
            raise exception.InvalidInput(reason=msg)

        des_ip = des_urls[0]

        # 2. start fillp server
        trans_port = volume.get('trans_port')
        agent_driver = self.agents.get(protocol)
        try:
            agent_driver.start_fillp_server(des_ip, trans_port, dev_disk_name,
                                            protocol)
        except Exception as e:
            _msg = "Conveyor agent start fillp server error: %s" % e
            LOG.error(_msg)
            raise exception.V2vException(message=_msg)

        # 3. start data transformer
        # splite remove gw url, get host ip and port
        src_urls = src_vm_url.split(':')
        if len(src_urls) != 2:
            LOG.error("Input source gw url error: %s", src_vm_url)
            msg = "Input Source gw url error: %s" % src_vm_url
            raise exception.InvalidInput(reason=msg)

        src_vm_ip = src_urls[0]
        src_vm_port = src_urls[1]

        try:
            # create transformer task and return task id for querying it's
            # state
            task_id = uuidutils.generate_uuid()
            task_state = task_status.TRANSFORMERING
            task = transformer.TransformerTask(task_id, task_state=task_state)
            self.trans_states.add_task(task)

            # start data transformer task thread
            args = [
                src_vm_ip, src_vm_port, des_ip, trans_port, src_disk_name,
                dev_disk_name, protocol, mount
            ]
            thread = AgentThread(self._fillp_transformer_data,
                                 self.trans_states, task_id, *args)
            thread.start()
            return task_id
        except Exception as e:
            LOG.error("Download data error: %s", e)
            raise exception.DownLoadDataError(Error=e)