yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #45361
[Bug 1537626] Re: `glance location-update` deletes locations and backend images
https://review.openstack.org/#/c/35134/14
here is the original patch
** Project changed: python-glanceclient => glance
** Also affects: python-glanceclient
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Glance.
https://bugs.launchpad.net/bugs/1537626
Title:
`glance location-update` deletes locations and backend images
Status in Glance:
New
Status in python-glanceclient:
New
Bug description:
Hi all,
I am having trouble using `glance location-update --url <current_url>
--metadata <new_metadata>` to update the metadata of a location. When
I try run the command, the locations become a blank list and the image
is deleted from my backend (swift+https). I have traced it down to the
following:
When doing a location-update, glanceclient actually sends two patch
commands:
[{'op': 'replace', 'path': '/locations', 'value': []},
{'op': 'replace',
'path': '/locations',
'value': [{u'metadata': {u'key': 'value'},
{u'url': u'swift+https://image1'}]}]
This is due to a note in python-
glanceclient/glanceclient/v2/images.py, update_location():
# NOTE: The server (as of now) doesn't support modifying individual
# location entries. So we must:
# 1. Empty existing list of locations.
# 2. Send another request to set 'locations' to the new list
# of locations.
However, at the server end, the _do_replace_locations() function which
handles this call, actually deletes the locations and images when it
gets the first call with the empty values
(glance/glance/api/v2/images.py) ???
def _do_replace_locations(self, image, value):
if len(image.locations) > 0 and len(value) > 0:
msg = _("Cannot replace locations from a non-empty "
"list to a non-empty list.")
raise webob.exc.HTTPBadRequest(explanation=msg)
if len(value) == 0:
# NOTE(zhiyan): this actually deletes the location
# from the backend store.
del image.locations[:]
if image.status == 'active':
image.status = 'queued'
This seems to result in the first call deleting all the locations from
the backend store, and the second call throwing an error because there
is no location any more.
To manage notifications about this bug go to:
https://bugs.launchpad.net/glance/+bug/1537626/+subscriptions