Also retry inspection on HTTP CONFLICT
The new implementation can return it when unable to lock the node.
Other possible errors are 400 and 404 (should not be retried), as well as
5xx (already retried).
Change-Id: I74c2f54a624dc47e8e2d1e67ae4c6a6078e01d2f
(cherry picked from commit 0010f5c11a
)
This commit is contained in:
parent
36b43f3edc
commit
af19759add
@ -13,6 +13,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from http import client as http_client
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
@ -152,7 +153,8 @@ def call_inspector(data, failures):
|
||||
inspector_resp = requests.post(
|
||||
CONF.inspection_callback_url, data=data, headers=headers,
|
||||
verify=verify, cert=cert, timeout=CONF.http_request_timeout)
|
||||
if inspector_resp.status_code >= 500:
|
||||
if (inspector_resp.status_code >= 500
|
||||
or inspector_resp.status_code == http_client.CONFLICT):
|
||||
raise requests.exceptions.HTTPError(response=inspector_resp)
|
||||
|
||||
return inspector_resp
|
||||
|
@ -214,7 +214,7 @@ class TestCallInspector(base.IronicAgentTest):
|
||||
@mock.patch.object(inspector, '_RETRY_ATTEMPTS', 3)
|
||||
def test_inspector_retries_on_50X_error(self, mock_post):
|
||||
mock_post.side_effect = [mock.Mock(status_code=500),
|
||||
mock.Mock(status_code=501),
|
||||
mock.Mock(status_code=409),
|
||||
mock.Mock(status_code=502)]
|
||||
failures = utils.AccumulatedFailures()
|
||||
data = collections.OrderedDict(data=42)
|
||||
@ -225,15 +225,16 @@ class TestCallInspector(base.IronicAgentTest):
|
||||
|
||||
@mock.patch.object(inspector, '_RETRY_WAIT', 0.01)
|
||||
@mock.patch.object(inspector, '_RETRY_WAIT_MAX', 1)
|
||||
@mock.patch.object(inspector, '_RETRY_ATTEMPTS', 2)
|
||||
@mock.patch.object(inspector, '_RETRY_ATTEMPTS', 3)
|
||||
def test_inspector_retry_on_50X_and_succeed(self, mock_post):
|
||||
mock_post.side_effect = [mock.Mock(status_code=503),
|
||||
mock.Mock(status_code=409),
|
||||
mock.Mock(status_code=200)]
|
||||
|
||||
failures = utils.AccumulatedFailures()
|
||||
data = collections.OrderedDict(data=42)
|
||||
inspector.call_inspector(data, failures)
|
||||
self.assertEqual(2, mock_post.call_count)
|
||||
self.assertEqual(3, mock_post.call_count)
|
||||
mock_post.assert_called_with('url',
|
||||
cert=None, verify=True,
|
||||
data='{"data": 42, "error": null}',
|
||||
|
5
releasenotes/notes/inspection-409-69d5bd6c2a49d2ec.yaml
Normal file
5
releasenotes/notes/inspection-409-69d5bd6c2a49d2ec.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Inspection is now retried on HTTP 409 (conflict), which can be returned
|
||||
by the new implementation in Ironic.
|
Loading…
Reference in New Issue
Block a user