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
|
SUPPORTED_ONEVIEW_VERSION = 200
|
||||||
|
|
||||||
WAIT_DO_REQUEST_IN_MILLISECONDS = 100
|
WAIT_DO_REQUEST_IN_MILLISECONDS = 1000
|
||||||
WAIT_TASK_IN_MILLISECONDS = 1000
|
WAIT_TASK_IN_MILLISECONDS = 1000
|
||||||
|
|
||||||
GET_REQUEST_TYPE = 'GET'
|
GET_REQUEST_TYPE = 'GET'
|
||||||
@ -484,7 +484,6 @@ class Client(object):
|
|||||||
|
|
||||||
def _wait_for_task_to_complete(self, task):
|
def _wait_for_task_to_complete(self, task):
|
||||||
@retrying.retry(
|
@retrying.retry(
|
||||||
stop_max_attempt_number=self.max_polling_attempts,
|
|
||||||
retry_on_result=lambda task: task.get('percentComplete') < 100,
|
retry_on_result=lambda task: task.get('percentComplete') < 100,
|
||||||
wait_fixed=WAIT_TASK_IN_MILLISECONDS,
|
wait_fixed=WAIT_TASK_IN_MILLISECONDS,
|
||||||
retry_on_exception=lambda task: False
|
retry_on_exception=lambda task: False
|
||||||
@ -517,7 +516,7 @@ def _check_request_status(response):
|
|||||||
raise exceptions.OneViewNotAuthorizedException()
|
raise exceptions.OneViewNotAuthorizedException()
|
||||||
elif status == 404:
|
elif status == 404:
|
||||||
raise exceptions.OneViewResourceNotFoundError()
|
raise exceptions.OneViewResourceNotFoundError()
|
||||||
elif status in (409,):
|
elif status in (408, 409,):
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
repeat = True
|
repeat = True
|
||||||
elif status == 500:
|
elif status == 500:
|
||||||
|
@ -480,7 +480,26 @@ class OneViewClientTestCase(unittest.TestCase):
|
|||||||
@mock.patch.object(client.Client, '_prepare_and_do_request', autospec=True)
|
@mock.patch.object(client.Client, '_prepare_and_do_request', autospec=True)
|
||||||
def test__wait_for_task_to_complete(self, mock__prepare_do_request,
|
def test__wait_for_task_to_complete(self, mock__prepare_do_request,
|
||||||
mock__authenticate):
|
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",
|
"uri": "/any_uri",
|
||||||
"taskState": "Something",
|
"taskState": "Something",
|
||||||
"percentComplete": 100
|
"percentComplete": 100
|
||||||
@ -491,29 +510,31 @@ class OneViewClientTestCase(unittest.TestCase):
|
|||||||
self.password,
|
self.password,
|
||||||
max_polling_attempts=1)
|
max_polling_attempts=1)
|
||||||
|
|
||||||
mock__prepare_do_request.return_value = task
|
mock__prepare_do_request.side_effect = [task1, task2, task3]
|
||||||
oneview_client._wait_for_task_to_complete(task)
|
oneview_client._wait_for_task_to_complete(task0)
|
||||||
|
|
||||||
@mock.patch.object(client.Client, '_prepare_and_do_request', autospec=True)
|
@mock.patch.object(requests, 'get')
|
||||||
def test__wait_for_task_to_complete_timeout(self, mock__prepare_do_request,
|
def test__wait_for_task_to_complete_timeout(self, mock_get,
|
||||||
mock__authenticate):
|
mock__authenticate):
|
||||||
task = {
|
task = {
|
||||||
"uri": "/any_uri",
|
"uri": "/any_uri",
|
||||||
"taskState": "Something",
|
"taskState": "Something",
|
||||||
"percentComplete": 30
|
"percentComplete": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
oneview_client = client.Client(self.manager_url,
|
oneview_client = client.Client(self.manager_url,
|
||||||
self.username,
|
self.username,
|
||||||
self.password,
|
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(
|
self.assertRaises(
|
||||||
retrying.RetryError,
|
retrying.RetryError,
|
||||||
oneview_client._wait_for_task_to_complete,
|
oneview_client._wait_for_task_to_complete,
|
||||||
task,
|
task,
|
||||||
)
|
)
|
||||||
|
self.assertEqual(mock_get.call_count, 3)
|
||||||
|
|
||||||
@mock.patch.object(client.Client, 'get_server_hardware', autospec=True)
|
@mock.patch.object(client.Client, 'get_server_hardware', autospec=True)
|
||||||
def test_validate_node_server_hardware_inconsistent_memorymb_value(
|
def test_validate_node_server_hardware_inconsistent_memorymb_value(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user