Example #1
0
 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)
Example #2
0
 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']))
Example #3
0
 def begin_transaction(self):
     return True
     assert(self.conn.inTransaction == 0), lineno()
Example #4
0
 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)