Change polling give up policy for OneView client
On previous versions of the OneView client, the polling of changes on OneView was done until a certain amount of tries then stopped even for tasks that are ongoing. This patch changes that behavior to keep checking tasks until completion and use the max_polling_attempts parameter only for exceptional cases such as request errors/timeouts. Change-Id: I392e0b17e160fbc37d19183f5890038818e6c4f4 Closes-Bug: #1531918
This commit is contained in:
parent
09f83c15ba
commit
d34e644a8f
@ -28,7 +28,7 @@ from oneview_client import states
|
||||
|
||||
SUPPORTED_ONEVIEW_VERSION = 200
|
||||
|
||||
WAIT_DO_REQUEST_IN_MILLISECONDS = 100
|
||||
WAIT_DO_REQUEST_IN_MILLISECONDS = 1000
|
||||
WAIT_TASK_IN_MILLISECONDS = 1000
|
||||
|
||||
GET_REQUEST_TYPE = 'GET'
|
||||
@ -484,7 +484,6 @@ class Client(object):
|
||||
|
||||
def _wait_for_task_to_complete(self, task):
|
||||
@retrying.retry(
|
||||
stop_max_attempt_number=self.max_polling_attempts,
|
||||
retry_on_result=lambda task: task.get('percentComplete') < 100,
|
||||
wait_fixed=WAIT_TASK_IN_MILLISECONDS,
|
||||
retry_on_exception=lambda task: False
|
||||
@ -517,7 +516,7 @@ def _check_request_status(response):
|
||||
raise exceptions.OneViewNotAuthorizedException()
|
||||
elif status == 404:
|
||||
raise exceptions.OneViewResourceNotFoundError()
|
||||
elif status in (409,):
|
||||
elif status in (408, 409,):
|
||||
time.sleep(10)
|
||||
repeat = True
|
||||
elif status == 500:
|
||||
|
@ -480,7 +480,26 @@ class OneViewClientTestCase(unittest.TestCase):
|
||||
@mock.patch.object(client.Client, '_prepare_and_do_request', autospec=True)
|
||||
def test__wait_for_task_to_complete(self, mock__prepare_do_request,
|
||||
mock__authenticate):
|
||||
task = {
|
||||
|
||||
task0 = {
|
||||
"uri": "/any_uri",
|
||||
"taskState": "Something",
|
||||
"percentComplete": 0
|
||||
}
|
||||
|
||||
task1 = {
|
||||
"uri": "/any_uri",
|
||||
"taskState": "Something",
|
||||
"percentComplete": 10
|
||||
}
|
||||
|
||||
task2 = {
|
||||
"uri": "/any_uri",
|
||||
"taskState": "Something",
|
||||
"percentComplete": 50
|
||||
}
|
||||
|
||||
task3 = {
|
||||
"uri": "/any_uri",
|
||||
"taskState": "Something",
|
||||
"percentComplete": 100
|
||||
@ -491,29 +510,31 @@ class OneViewClientTestCase(unittest.TestCase):
|
||||
self.password,
|
||||
max_polling_attempts=1)
|
||||
|
||||
mock__prepare_do_request.return_value = task
|
||||
oneview_client._wait_for_task_to_complete(task)
|
||||
mock__prepare_do_request.side_effect = [task1, task2, task3]
|
||||
oneview_client._wait_for_task_to_complete(task0)
|
||||
|
||||
@mock.patch.object(client.Client, '_prepare_and_do_request', autospec=True)
|
||||
def test__wait_for_task_to_complete_timeout(self, mock__prepare_do_request,
|
||||
@mock.patch.object(requests, 'get')
|
||||
def test__wait_for_task_to_complete_timeout(self, mock_get,
|
||||
mock__authenticate):
|
||||
task = {
|
||||
"uri": "/any_uri",
|
||||
"taskState": "Something",
|
||||
"percentComplete": 30
|
||||
"percentComplete": 0
|
||||
}
|
||||
|
||||
oneview_client = client.Client(self.manager_url,
|
||||
self.username,
|
||||
self.password,
|
||||
max_polling_attempts=1)
|
||||
max_polling_attempts=3)
|
||||
|
||||
mock__prepare_do_request.return_value = task
|
||||
response = mock_get.return_value
|
||||
response.status_code = http_client.REQUEST_TIMEOUT
|
||||
mock_get.return_value = response
|
||||
self.assertRaises(
|
||||
retrying.RetryError,
|
||||
oneview_client._wait_for_task_to_complete,
|
||||
task,
|
||||
)
|
||||
self.assertEqual(mock_get.call_count, 3)
|
||||
|
||||
@mock.patch.object(client.Client, 'get_server_hardware', autospec=True)
|
||||
def test_validate_node_server_hardware_inconsistent_memorymb_value(
|
||||
|
Loading…
x
Reference in New Issue
Block a user