class SsvrAgent: def __init__(self): self.event_record = EventRecorder() def _dispatch(self, method, params): return dispatch_and_log(self, method, params) def __do_shred(self, eventid, path, offset_mb, len_mb, dextid, pdskid): # zero clear disk extent command = '%s if=/dev/zero of=%s bs=1024k seek=%d count=%d %s' \ % (DD_CMD, path, offset_mb, len_mb, DD_OPTIONS) try: executecommand(command) except Exception, e: logger.error("do_shred: %s" % (e)) self.event_record.del_event(eventid, needlock = True) # bug 3082606 # notify_sm("notifyFailure", \ # {'ver': XMLRPC_VERSION, 'target': TARGET['LVOL'], \ # 'targetid': dextid}) notify_sm("notifyFailure", \ {'ver': XMLRPC_VERSION, 'target': TARGET['PDSK'], \ 'targetid': pdskid}) return logger.debug("shred done %d %d" % (eventid, dextid)) self.event_record.set_event_status_and_result(eventid, \ EVENT_STATUS['DONE'], 0, needlock = True) return
def __init__(self): self.dag_worker = worker.Worker(16) self.event_record = EventRecorder()
class HsvrAgent: def __init__(self): self.dag_worker = worker.Worker(16) self.event_record = EventRecorder() def _dispatch(self, method, params): return dispatch_and_log(self, method, params) def attachLogicalVolume(self, data): eventid, lvolstruct = mand_keys(data, 'eventid', 'lvolstruct') self.event_record.lock() if self.event_record.event_exist(eventid): self.event_record.unlock() return 0 start_worker(self.__attach_worker, eventid, lvolstruct) self.event_record.add_event(eventid, EVENT_STATUS['PROGRESS']) self.event_record.unlock() return 0 def __attach_worker(self, eventid, lvolstruct): failed = [] try: nodes = hsvr_dag.create_dag_from_lvolstruct(lvolstruct, False) failed = dag.dag_execute(nodes, mynode.mynode_do, \ mynode.mynode_undo, self.dag_worker, mydaglogger) for n, ei in failed: t, v, tr = ei raise t, v self.event_record.set_event_status_and_result(eventid, EVENT_STATUS['DONE'],\ 0, needlock = True) except Exception: if failed: for n, ei in failed: t, v, tr = ei logger.error(traceback.format_exception(t, v, tr)) else: logger.error(traceback.format_exc()) self.event_record.set_event_status_and_result(eventid, EVENT_STATUS['ERROR'], \ 500, needlock = True) return 0 def detachLogicalVolume(self, data): eventid, lvolstruct = mand_keys(data, 'eventid', 'lvolstruct') self.event_record.lock() if self.event_record.event_exist(eventid): self.event_record.unlock() return 0 start_worker(self.__detach_worker, eventid, lvolstruct) self.event_record.add_event(eventid, EVENT_STATUS['PROGRESS']) self.event_record.unlock() return 0 def __detach_worker(self, eventid, lvolstruct): failed = [] try: nodes = hsvr_dag.create_dag_from_lvolstruct(lvolstruct, True) failed = dag.dag_execute(nodes, mynode.mynode_undo, noop, \ self.dag_worker, mydaglogger) for n, ei in failed: t, v, tr = ei raise t, v self.event_record.set_event_status_and_result(eventid, EVENT_STATUS['DONE'], \ 0, needlock = True) except xmlrpclib.Fault, inst: self.event_record.set_event_status_and_result(eventid, EVENT_STATUS['ERROR'], \ inst.faultCode, needlock = True) except Exception, inst: if failed: for n, ei in failed: t, v, tr = ei logger.error(traceback.format_exception(t, v, tr)) else: logger.error(traceback.format_exc()) if os.path.exists(get_lvol_path_from_lvolstruct(lvolstruct)): # symlink exists, so nothing done. # return EBUSY in this case acordings to the protocol between SM self.event_record.set_event_status_and_result(eventid, \ EVENT_STATUS['ERROR'], errno.EBUSY, needlock = True) else: self.event_record.set_event_status_and_result(eventid, \ EVENT_STATUS['ERROR'], 500, needlock = True)
def __init__(self): self.event_record = EventRecorder()