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)
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
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)
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)
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
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)
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)
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)
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)
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)