Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 def __init__(self):
     self.dag_worker = worker.Worker(16)
     self.event_record = EventRecorder()
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
 def __init__(self):
     self.event_record = EventRecorder()