Fix AttributeError in negotiate_version
Seen in kolla-ansible CI, if ironic inspector starts up before ironic
API is properly up, we see the following error:
The PXE filter DnsmasqFilter, state=initialized encountered an
exception: StrictVersion instance has no attribute 'version'; resetting
the filter: AttributeError: StrictVersion instance has no attribute
'version'
Example: http://paste.openstack.org/show/756342/
The usual cause of this error is when StrictVersion is initialised with
a version of None. This suggests to me that max_ver is None.
This leads to an exception being raised that circumvents the client's
retry mechanisms.
In the particular case of kolla-ansible CI, Ironic API is behind a load
balancer, and all backends are down resulting in a 503. The lack of a
retry caused ironic inspector to fail on startup.
This patch catches the case where we get a 4xx or 5xx return code when
checking the version, and raises an error that works with the client's
retry mechanisms.
Change-Id: Ib62ca3ee4626084e5e9b90e93e4fa97938023457
Story: 2006393
Task: 36266
(cherry picked from commit 0e9bf337f1
)
This commit is contained in:
parent
42faaabdee
commit
0bd26cc47e
|
@ -118,7 +118,11 @@ class VersionNegotiationMixin(object):
|
|||
str(self.os_ironic_api_version).split('.')[0])
|
||||
else:
|
||||
base_version = API_VERSION
|
||||
return self._make_simple_request(conn, 'GET', base_version)
|
||||
# Raise exception on client or server error.
|
||||
resp = self._make_simple_request(conn, 'GET', base_version)
|
||||
if not resp.ok:
|
||||
raise exc.from_response(resp, method='GET', url=base_version)
|
||||
return resp
|
||||
|
||||
version_overridden = False
|
||||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes an issue where some failure modes of communication with the Ironic
|
||||
API could result in an exception that circumvents the client's retry
|
||||
mechanisms. In particular this includes HTTP 503 service unavailable which
|
||||
is seen when Ironic operates behind a load balancer, and no backend is
|
||||
available to handle the request.
|
Loading…
Reference in New Issue