def test_function_is_called_once_by_default(self, sleep_mock): retryer = retrying.retry() def func(): pass retryer.run(func) self.assertFalse(sleep_mock.called) self.assertEqual(retryer.attempt, 1)
def _path_exists(self, path, target_portal, target_iqn): timeout = self.storage_backend_timeout retryer = retrying.retry(max_time=timeout, raise_error=False) def check_path_and_rescan(): # The rescan isn't documented as being necessary(?), but it helps try: rescan = "iscsiadm -m node -T {iqn} -p {portal} --rescan" local.sudo(rescan.format(iqn=target_iqn, portal=target_portal)) except local.LocalExecutionFailed as e: LOG.debug("Rescan failed with %d: %s", e.code, e.message) return local.sudo("test -e {path}".format(path=path)) return retryer.run(check_path_and_rescan) == ''
def _wait_job_completion(self, rc, job): # From ValueMap of JobState in CIM_ConcreteJob # 2L=New, 3L=Starting, 4L=Running, 32767L=Queue Pending # ValueMap("2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13..32767, # 32768..65535"), # Values("New, Starting, Running, Suspended, Shutting Down, # Completed, Terminated, Killed, Exception, Service, # Query Pending, DMTF Reserved, Vendor Reserved")] # NOTE(deva): string matching based on # http://ipmitool.cvs.sourceforge.net/ # viewvc/ipmitool/ipmitool/lib/ipmi_chassis.c if rc == 0: return job retryer = retrying.retry( max_time=self._storage_backend_timeout, predicate_retval_as_arg=True, predicate=lambda j: j['JobState'] not in [2, 3, 4, 32767]) job_name = job['Job'] retryer.run(self.connection.GetInstance, job_name, LocalOnly=False)