def expand_lun(self, name, new_size, poll=True): lun = self.get_lun(name=name) try: lun.poll = poll lun.expand(new_size, ignore_thresholds=True) except storops_ex.VNXLunExpandSizeError as ex: LOG.warning( _LW("LUN %(name)s is already expanded. " "Message: %(msg)s."), { 'name': name, 'msg': ex.message }) except storops_ex.VNXLunPreparingError as ex: # The error means the operation cannot be performed because the LUN # is 'Preparing'. Wait for a while so that the LUN may get out of # the transitioning state. with excutils.save_and_reraise_exception(): LOG.warning( _LW("LUN %(name)s is not ready for extension: " "%(msg)s"), { 'name': name, 'msg': ex.message }) utils.wait_until(Condition.is_lun_ops_ready, lun=lun) utils.wait_until(Condition.is_lun_expanded, lun=lun, new_size=new_size)
def add_image(self, mirror_name, sp_ip, secondary_lun_id): mv = self.vnx.get_mirror_view(mirror_name) mv.add_image(sp_ip, secondary_lun_id) # Secondary image info usually did not appear, so # here add a poll to update. utils.update_res_with_poll(mv) utils.wait_until(Condition.is_mirror_synced, mirror=mv)
def create_cg_snapshot(self, cg_snap_name, cg_name): cg = self.vnx.get_cg(cg_name) try: snap = cg.create_snap(cg_snap_name, allow_rw=True) except storops_ex.VNXSnapNameInUseError: snap = self.vnx.get_snap(cg_snap_name) utils.wait_until(Condition.is_object_existed, vnx_obj=snap) return snap
def test_wait_until_with_params(self): mock_testmethod = mock.Mock(return_value=True) utils.wait_until(mock_testmethod, param1=1, param2='test') mock_testmethod.assert_has_calls( [mock.call(param1=1, param2='test')]) mock_testmethod.assert_has_calls([mock.call(param1=1, param2='test')])
def create_consistency_group(self, cg_name, lun_id_list=None): try: cg = self.vnx.create_cg(name=cg_name, members=lun_id_list) except storops_ex.VNXConsistencyGroupNameInUseError: cg = self.vnx.get_cg(name=cg_name) # Wait until cg is found on VNX, or deletion will fail afterwards utils.wait_until(Condition.is_object_existed, vnx_obj=cg) return cg
def test_wait_until_with_params(self): mock_testmethod = mock.Mock(side_effect=[False, True]) mock_testmethod.__name__ = 'test_method' utils.wait_until(mock_testmethod, param1=1, param2='test') mock_testmethod.assert_has_calls( [mock.call(param1=1, param2='test'), mock.call(param1=1, param2='test')])
def create_lun(self, pool, name, size, provision, tier, cg_id=None, ignore_thresholds=False): pool = self.vnx.get_pool(name=pool) try: lun = pool.create_lun( lun_name=name, size_gb=size, provision=provision, tier=tier, ignore_thresholds=ignore_thresholds ) except storops_ex.VNXLunNameInUseError: lun = self.vnx.get_lun(name=name) utils.wait_until(condition=Condition.is_lun_io_ready, lun=lun) if cg_id: cg = self.vnx.get_cg(name=cg_id) cg.add_member(lun) return lun
def verify_migration(self, src_id, dst_id, dst_wwn): """Verify whether migration session finished successfully. :param src_id: source LUN id :param dst_id: destination LUN id :param dst_wwn: destination LUN WWN :returns Boolean: True or False """ src_lun = self.vnx.get_lun(lun_id=src_id) utils.wait_until(condition=self.session_finished, interval=common.INTERVAL_30_SEC, src_lun=src_lun) new_lun = self.vnx.get_lun(lun_id=dst_id) new_wwn = new_lun.wwn if not new_wwn or new_wwn != dst_wwn: return True else: return False
def create_lun(self, pool, name, size, provision, tier, cg_id=None, ignore_thresholds=False): pool = self.vnx.get_pool(name=pool) try: lun = pool.create_lun(lun_name=name, size_gb=size, provision=provision, tier=tier, ignore_thresholds=ignore_thresholds) except storops_ex.VNXLunNameInUseError: lun = self.vnx.get_lun(name=name) utils.wait_until(condition=Condition.is_lun_io_ready, lun=lun) if cg_id: cg = self.vnx.get_cg(name=cg_id) cg.add_member(lun) return lun
def expand_lun(self, name, new_size, poll=True): lun = self.get_lun(name=name) try: lun.poll = poll lun.expand(new_size, ignore_thresholds=True) except storops_ex.VNXLunExpandSizeError as ex: LOG.warning(_LW("LUN %(name)s is already expanded. " "Message: %(msg)s."), {'name': name, 'msg': ex.message}) except storops_ex.VNXLunPreparingError as ex: # The error means the operation cannot be performed because the LUN # is 'Preparing'. Wait for a while so that the LUN may get out of # the transitioning state. with excutils.save_and_reraise_exception(): LOG.warning(_LW("LUN %(name)s is not ready for extension: " "%(msg)s"), {'name': name, 'msg': ex.message}) utils.wait_until(Condition.is_lun_ops_ready, lun=lun) utils.wait_until(Condition.is_lun_expanded, lun=lun, new_size=new_size)
def test_wait_until(self): mock_testmethod = mock.Mock(side_effect=[False, True]) utils.wait_until(mock_testmethod) mock_testmethod.assert_has_calls([mock.call(), mock.call()])
def sync_image(self, mirror_name): mv = self.vnx.get_mirror_view(mirror_name) mv.sync_image() utils.wait_until(Condition.is_mirror_synced, mirror=mv)
def test_wait_until(self): mock_testmethod = mock.Mock(return_value=True) utils.wait_until(mock_testmethod, interval=0) mock_testmethod.assert_has_calls([mock.call()])
def test_wait_until_with_params(self): mock_testmethod = mock.Mock(return_value=True) utils.wait_until(mock_testmethod, param1=1, param2='test') mock_testmethod.assert_has_calls([mock.call(param1=1, param2='test')]) mock_testmethod.assert_has_calls([mock.call(param1=1, param2='test')])