[all] Gate status: All devstack based jobs are failing for placement url issue in devstack
melanie witt
melwittt at gmail.com
Tue Sep 28 01:24:18 UTC 2021
On 9/27/21 15:20, Ghanshyam Mann wrote:
> Hello Everyone,
>
> All the devstack based jobs are failing with placement URL issue in devstack. The root cause is not known yet.
>
> You will see the below error in devstack/summary log-
>
> + ./stack.sh:main:1455 : /usr/local/bin/nova-status --config-file /etc/nova/nova.conf upgrade check
>
> Placement logs:
> INFO placement.requestlog [None req-3ad7ab8b-7c85-477a-b156-f5ca652a38cc service placement] 10.208.226.48 "GET /placemen//" status: 404 len: 162 microversion: 1.0
I looked at this for awhile and found that placement is returning a 404
because it fails to match [1] any of the declared routes [2]. This issue
reproduces on a local devstack.
I added some debug print statements to determine this [3]. (The
"ENVIRON" and "NO MATCH FOUND" are the print statements I added in
PlacementHandler.__call__() and dispatch() in placement/handler.py).
Example:
def dispatch(environ, start_response, mapper):
"""Find a matching route for the current request.
If no match is found, raise a 404 response.
If there is a matching route, but no matching handler
for the given method, raise a 405.
"""
result = mapper.match(environ=environ)
if result is None:
print('NO MATCH FOUND')
raise webob.exc.HTTPNotFound(
json_formatter=util.json_error_formatter)
In short, the WSGI environment dict is giving a bad/not matching url in
the PATH_INFO variable if the call path is not simply '/'.
Example of a good PATH_INFO:
ENVIRON = {'proxy-sendchunked': '1', 'PATH_INFO': '/', [...]
'REQUEST_URI': '/placement', 'SCRIPT_NAME': '/placement', [...]}
INFO placement.requestlog [None req-bde0b07f-e6a4-4b3d-bb78-51bee95524e1
None None] 127.0.0.1 "GET /placement/" status: 200 len: 136 mi
croversion: 1.0
Example of a bad PATH_INFO and SCRIPT_NAME:
ENVIRON = {'proxy-sendchunked': '1', 'PATH_INFO': '//', [...]
'REQUEST_URI': '/placement/', 'SCRIPT_NAME': '/placemen', [...]}
NO MATCH FOUND
INFO placement.requestlog [None req-317708d5-8c6f-48f5-abce-225a242bb31a
admin admin] 127.0.0.1 "GET /placemen//" status: 404 len: 198
microversion: 1.29
Another example of bad PATH_INFO and SCRIPT_NAME:
ENVIRON = {'proxy-sendchunked': '1', 'PATH_INFO':
'//resource_providers', [...] 'REQUEST_URI':
'/placement/resource_providers', 'SCRIPT_NAME': '/placemen', [...]}
Note that the REQUEST_URI in all cases looks correct. This supports what
I observed that the clients are calling the correct urls. The same 404s
happen using curl -X GET statements as well. So it's definitely
something wrong in the server.
I'm not sure how to debug further. I don't know a great deal about WSGI
and where the contents of the environment dict come from. If anyone can
help, it would be appreciated.
Cheers,
-melanie
[1]
https://github.com/openstack/placement/blob/bd5b19c00e1ab293fc157f4699bc4f4719731c25/placement/handler.py#L142
[2]
https://github.com/openstack/placement/blob/bd5b19c00e1ab293fc157f4699bc4f4719731c25/placement/handler.py#L51
[3] https://paste.opendev.org/show/809636
More information about the openstack-discuss
mailing list