def comm_create_pair(self, pvol, svol, is_vvol): if not is_vvol: args = '-compsplit -pace %s' % self.pace method = basic_lib.FULL else: pool = self.conf.hitachi_thin_pool_id args = ('-localrepdppoolno %d -localmngdppoolno %d ' '-compsplit -pace %s' % (pool, pool, self.pace)) method = basic_lib.THIN try: self.pairoperate('create', pvol, svol, is_vvol, args=args) except exception.HBSDCmdError as ex: if (re.search('DMER0300B8', ex.stderr) or re.search('DMER0800CF', ex.stderr) or re.search('DMER0800D[0-6D]', ex.stderr) or re.search('DMER03006A', ex.stderr) or re.search('DMER030080', ex.stderr)): msg = basic_lib.output_err(615, copy_method=method, pvol=pvol) raise exception.HBSDBusy(message=msg) else: raise
def delete_pair(self, ldev, all_split=True, is_vvol=None): paired_info = self.command.get_paired_info(ldev) LOG.debug('paired_info: %s', paired_info) pvol = paired_info['pvol'] svols = paired_info['svol'] driver = self.generated_from restart = False svol_list = [] try: if pvol is None: return elif pvol == ldev: for svol in svols[:]: if svol['is_vvol'] or svol['status'] != basic_lib.PSUS: continue self.command.delete_pair(pvol, svol['lun'], False) restart = True driver.pair_terminate_connection(svol['lun']) svols.remove(svol) if all_split and svols: svol_list.append(six.text_type(svols[0]['lun'])) for svol in svols[1:]: svol_list.append(', %d' % svol['lun']) msg = basic_lib.output_err(616, pvol=pvol, svol=''.join(svol_list)) raise exception.HBSDBusy(message=msg) if not svols: driver.pair_terminate_connection(pvol) else: self.add_volinfo(pvol) if not self.volume_info[pvol]['in_use'].lock.acquire(False): desc = self.volume_info[pvol]['in_use'].desc msg = basic_lib.output_err(660, desc=desc) raise exception.HBSDBusy(message=msg) try: paired_info = self.command.get_paired_info(ldev) if paired_info['pvol'] is None: return svol = paired_info['svol'][0] if svol['status'] != basic_lib.PSUS: msg = basic_lib.output_err(616, pvol=pvol, svol=ldev) raise exception.HBSDBusy(message=msg) self.command.delete_pair(pvol, ldev, svol['is_vvol']) if not svol['is_vvol']: restart = True driver.pair_terminate_connection(ldev) paired_info = self.command.get_paired_info(pvol) if paired_info['pvol'] is None: driver.pair_terminate_connection(pvol) finally: self.volume_info[pvol]['in_use'].lock.release() except Exception: with excutils.save_and_reraise_exception(): if restart: try: self.command.restart_pair_horcm() except Exception as e: LOG.warning('Failed to restart horcm: %s', e) else: if (all_split or is_vvol) and restart: try: self.command.restart_pair_horcm() except Exception as e: LOG.warning('Failed to restart horcm: %s', e)