def end_event_cancel(self, eventid, lvolid): attach = self.get_row(lvolid) assert(attach and attach['eventid'] == eventid), lineno() if attach['event_type'] == ATTACH_EVENT['BINDING'] and \ not attach['assoc_lvolid']: self.delete_rows('lvolid', lvolid) else: self.__clear_event(lvolid)
def replace_dext(self, dextid, post_status): # delete lvolmap first, get values before delete lvolmap = self.lvolmap.get_row(dextid) self.lvolmap.delete_rows('lvolid', dextid) # change dskmap status if specified (OFFLINE or FAULTY) if post_status: self.dskmap.update_value('dextid', dextid, 'status', post_status) # allocate new dext mirrorid = lvolmap['superlvolid'] extents = self.lvolmap.get_rows('superlvolid', mirrorid) omit = [] for extent in extents: omit.append(extent['lvolid']) newdextid = self.allocate_dext(lvolmap['capacity'], omit) if lvolmap['mirror_status'] in (MIRROR_STATUS['ALLOCATED'], MIRROR_STATUS['NEEDSHRED']): ms = MIRROR_STATUS['ALLOCATED'] else: ms = MIRROR_STATUS['SPARE'] self.lvolmap.put_row((newdextid, LVOLTYPE['DEXT'], mirrorid, 0, lvolmap['capacity'], \ lvolmap['toplvolid'], ms)) # register resync table if attached attach = self.attach.get_row(lvolmap['toplvolid']) if attach: # TODO? check unbinding? merge = False row = self.resync.get_rows('lvolid_add', dextid) if row: assert(len(row) == 1), lineno() if row[0]['status'] == EVENT_STATUS['PENDING']: merge = True else: # PROGRESS # delete resync record so that not retry self.resync.delete_rows('lvolid_add', dextid) if merge: self.resync.update_value('lvolid_add', dextid, 'lvolid_add', newdextid) else: eventid = self.genid_event() self.resync.put_row((eventid, mirrorid, newdextid, dextid, EVENT_STATUS['PENDING']))
def begin_transaction(self): return True assert(self.conn.inTransaction == 0), lineno()
def end_event_error(self, eventid, lvolid): attach = self.get_row(lvolid) assert(attach and attach['eventid'] == eventid), lineno() self.update_value('lvolid', lvolid, 'status', ATTACH_STATUS['ERROR']) self.__clear_event(lvolid)