示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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) == ''
示例#4
0
    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(sudo_password):
            # 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),
                    sudo_password=sudo_password)
            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),
                              sudo_password=sudo_password)

        return retryer.run(check_path_and_rescan, self.sudo_password) == ''
示例#5
0
    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)
示例#6
0
    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)