Return code for rebuild with non-existent image changed

Bug #963248 reported by David Kranz
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Invalid
Undecided
Eoghan Glynn

Bug Description

The tempest test

ERROR: Negative test: The server rebuild for a non existing server should not

recently broke because nova started returning 400 and it recently was returning 400.
Was this intentional?

Either the code or the test needs to be changed.

======================================================================
ERROR: Negative test: The server rebuild for a non existing server should not
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/cygdrive/c/source/tempest/tempest/tests/test_server_actions.py", line 158, in test_rebuild_nonexistant_server
    adminPass='rebuild')
  File "/cygdrive/c/source/tempest/tempest/services/nova/json/servers_client.py", line 217, in rebuild
    self.headers)
  File "/cygdrive/c/source/tempest/tempest/common/rest_client.py", line 100, in post
    return self.request('POST', url, headers, body)
  File "/cygdrive/c/source/tempest/tempest/common/rest_client.py", line 136, in request
    raise exceptions.BadRequest(resp_body['badRequest']['message'])
BadRequest: Bad request
Details: Bad request
Details: Invalid imageRef provided.
-------------------- >> begin captured logging << --------------------
tempest.common.rest_client: ERROR: Request URL: http://172.18.0.146:8774/v2/30db781b8c044409810ab5bdcd175968/servers/999/action
tempest.common.rest_client: ERROR: Request Body: {"rebuild": {"personality": [{"path": "/etc/rebuild.txt", "contents": "VGVzdCBzZXJ2ZXIgcmVidWlsZC4="}], "metadata": {"rebuild": "server"}, "name": "server36933620389", "imageRef": "346f4039-a81e-44e0-9223-4a3d13c907", "adminPass": "rebuild"}}
tempest.common.rest_client: ERROR: Response Headers: {'date': 'Fri, 23 Mar 2012 16:14:11 GMT', 'status': '400', 'content-length': '70', 'content-type': 'application/json; charset=UTF-8', 'x-compute-request-id': 'req-a582eee4-ec5c-483b-b97d-e1dd7deb70b7'}
tempest.common.rest_client: ERROR: Response Body: {u'badRequest': {u'message': u'Invalid imageRef provided.', u'code': 400}}
--------------------- >> end captured logging << ---------------------

Revision history for this message
Jay Pipes (jaypipes) wrote :

David, you wrote "recently broke because nova started returning 400 and it recently was returning 400." I think you meant to say that until recently Nova was returning something different than 400. What return code was Nova returning?

Revision history for this message
David Kranz (david-kranz) wrote :

Sorry about that. The test is expecting NotFound (404).

Revision history for this message
David Kranz (david-kranz) wrote :

If this bug is not fixed in essex real soon now it should be closed as invalid, effectively accepting the API change. The Tempest test, currently being skipped pending resolution, needs to be updated either way.

Eoghan Glynn (eglynn)
Changed in nova:
status: New → In Progress
Revision history for this message
Eoghan Glynn (eglynn) wrote :

I traced through the nova codepath mapping 404 to 400 on invalid image and this is clearly deliberate, see bug:

  https://bugs.launchpad.net/nova/+bug/886701

specifically the patch:

   https://review.openstack.org/3158

containing the change:

    +++ b/nova/api/openstack/compute/servers.py
  @@ -1081,6 +1081,9 @@ class Controller(wsgi.Controller):
           except exception.InstanceNotFound:
               msg = _("Instance could not be found")
               raise exc.HTTPNotFound(explanation=msg)
  + except exception.ImageNotFound as error:
  + msg = _("Cannot find image for rebuild")
  + raise exc.HTTPBadRequest(explanation=msg)

Given the obvious deliberateness here, I'm going the mark this bug as 'Won't Fix' ... instead the tempest test should be modified to reflect the *actual* semantics of the nova API.

Changed in nova:
assignee: nobody → Eoghan Glynn (eglynn)
status: In Progress → Invalid
Revision history for this message
David Kranz (david-kranz) wrote :

I am a bit confused here. Joe Gordon submitted a change that unskiped the tempest test and changed it to expect 400 instead of 404. But the test failed because nova is returning 404 now! Eoghan, was this change somehow reverted?
See https://review.openstack.org/#/c/12994/

Revision history for this message
Eoghan Glynn (eglynn) wrote :

Bug #963248 refers to the response code when the image is not found ... this is still 400 (I just checked it).

Whereas https://review.openstack.org/#/c/12994/1/tempest/tests/compute/test_server_actions.py tests the case where the server (as opposed to the image) is non-existent. In that case, 404 is returned (I don't think there was any change there).

So the confusion simply relates to the "wrong" entity being non-existent.

Revision history for this message
David Kranz (david-kranz) wrote :

There must have been a regression that was fixed in the interim.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.