yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #70675
[Bug 1744786] Re: SchedulerReportClient.put with empty (not None) payload errors 415
Reviewed: https://review.openstack.org/536545
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=5a4872ed306ad33a2bceb50846a4b38ad3b95c73
Submitter: Zuul
Branch: master
commit 5a4872ed306ad33a2bceb50846a4b38ad3b95c73
Author: Eric Fried <efried@xxxxxxxxxx>
Date: Mon Jan 22 13:49:52 2018 -0600
Report Client: PUT empty (not None) JSON data
Previously if a False-ish payload was sent to SchedulerReportClient.put,
we wouldn't send it through in the API call at all. But False-ish
payloads may be legitimate: e.g. there is currently no DELETE API for
/resource_providers/{u}/aggregates so this is how you would remove all
aggregate associations for a provider.
In any case, placement's PUT API refuses to accept a request that
doesn't have Content-Type: application/json, which is set automatically
by Session if json is not None.
With this change set, we send payloads through to PUT unless they're
actually None.
Change-Id: I69d2b16d515590907ca0e0dc4da77dcf8e539976
Closes-Bug: #1744786
** Changed in: nova
Status: In Progress => Fix Released
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1744786
Title:
SchedulerReportClient.put with empty (not None) payload errors 415
Status in OpenStack Compute (nova):
Fix Released
Bug description:
https://github.com/openstack/nova/blob/f0d830d56d20c7f34372cd3c68d13a94bdf645a6/nova/scheduler/client/report.py#L295-L302
295 def put(self, url, data, version=None):
296 # NOTE(sdague): using json= instead of data= sets the
297 # media type to application/json for us. Placement API is
298 # more sensitive to this than other APIs in the OpenStack
299 # ecosystem.
300 kwargs = {'microversion': version}
301 if data:
302 kwargs['json'] = data
On line 301, if data is a False value other than None, we won't set
the json kwarg, so Session won't set the content type to
application/json, and we'll run afoul of:
<html>
<head>
<title>415 Unsupported Media Type</title>
</head>
<body>
<h1>415 Unsupported Media Type</h1>
The request media type None is not supported by this server.
<br /><br />
The media type None is not supported, use application/json
</body>
</html>
A normal "workaround" - which is being used for e.g. inventories - is
for the caller to check for "empty" and hit the DELETE API instead.
But we don't have a DELETE API for resource provider aggregates
(/resource_providers/{u}/aggregates).
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1744786/+subscriptions
References