Reviewed: https://review.openstack.org/531117 Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=b933847cbbf03ffb0ea6762ae60bca9ad92bc1e3 Submitter: Zuul Branch: master
commit b933847cbbf03ffb0ea6762ae60bca9ad92bc1e3 Author: Yikun Jiang <yikunk...@gmail.com> Date: Thu Jan 4 17:50:54 2018 +0800 Fix 500 in test_resize_server_negative_invalid_state In some case(such as, delete a confirmResize server), the actions maybe have same instance_uuid and request_id. When we record the event we should get the last created action, otherwise, we would find the wrong action, and we can't find the specific event using this wrong action id. Finally, raise a 500 error due to the error of InstanceActionEventNotFound. So, if more than one actions with same instance uuid and request id are exists. we should choice the last created action id as event record action id. This change fixes this by sorting action by desc(created_at, id) and get back the last created action. Change-Id: Ie6efee14d4b4d25a73dc23f0649a56bfa724c492 Closes-Bug: #1741220 ** 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/1741220 Title: raise 500 in test_resize_server_negative_invalid_state Status in OpenStack Compute (nova): Fix Released Bug description: Description =========== We reproduce this bug in https://review.openstack.org/#/c/530429 In test_resize_server_negative_invalid_state 1. first, the confirm resize action are recorded: https://github.com/openstack/nova/blob/2fc5d27332023a68e0a3977305a594f061f99cc8/nova/compute/api.py#L1950 2. and then a delete action are recorded. the import thing is: the delete action and the resize action have SAME instance uuid and same requst id. But when we get the action in here: https://github.com/openstack/nova/blob/2fc5d27332023a68e0a3977305a594f061f99cc8/nova/db/sqlalchemy/api.py#L5755-L5756 it assume that we can get the only one action by different instance uuid and request_id. We want to record the terminate_event on delete action, unfortunately, we get the wrong confirm-resize action first. I think this problem has always existed, but after we add the index, the order of we get action is changed. so, this bug are exposed. Steps to reproduce ================== 1. add index: https://review.openstack.org/#/c/530429/ 2. run test nosetests -svx nova.tests.functional.test_servers:ServersTest.test_resize_server_negative_invalid_state Logs & Configs ============== Traceback (most recent call last): File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/rpc/server.py", line 163, in _process_incoming res = self.dispatcher.dispatch(message) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 220, in dispatch return self._do_dispatch(endpoint, method, ctxt, args) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 190, in _do_dispatch result = func(ctxt, **new_args) File "nova/exception_wrapper.py", line 76, in wrapped function_name, call_dict, binary) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__ self.force_reraise() File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise six.reraise(self.type_, self.value, self.tb) File "nova/exception_wrapper.py", line 67, in wrapped return f(self, context, *args, **kw) File "nova/compute/manager.py", line 186, in decorated_function "Error: %s", e, instance=instance) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__ self.force_reraise() File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise six.reraise(self.type_, self.value, self.tb) File "nova/compute/manager.py", line 156, in decorated_function return function(self, context, *args, **kwargs) File "nova/compute/utils.py", line 911, in decorated_function return function(self, context, *args, **kwargs) File "nova/compute/utils.py", line 889, in __exit__ exc_tb=exc_tb, want_result=False) File "nova/objects/base.py", line 308, in wrapper return fn.__get__(None, obj)(*args, **kwargs) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_versionedobjects/base.py", line 184, in wrapper result = fn(cls, context, *args, **kwargs) File "nova/objects/instance_action.py", line 185, in event_finish_with_failure db_event = db.action_event_finish(context, values) File "nova/db/api.py", line 1906, in action_event_finish return IMPL.action_event_finish(context, values) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_db/api.py", line 147, in wrapper ectxt.value = e.inner_exc File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__ self.force_reraise() File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise six.reraise(self.type_, self.value, self.tb) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_db/api.py", line 135, in wrapper return f(*args, **kwargs) File "nova/db/sqlalchemy/api.py", line 253, in wrapped return f(context, *args, **kwargs) File "nova/db/sqlalchemy/api.py", line 5845, in action_event_finish event=values['event']) InstanceActionEventNotFound: Event compute_terminate_instance not found for action id 3 2017-12-29 06:45:21,779 ERROR [nova.api.openstack.wsgi] Unexpected exception in API method Traceback (most recent call last): File "nova/api/openstack/wsgi.py", line 803, in wrapped return f(*args, **kwargs) File "nova/api/openstack/compute/servers.py", line 831, in delete self._delete(req.environ['nova.context'], req, id) File "nova/api/openstack/compute/servers.py", line 685, in _delete self.compute_api.delete(context, instance) File "nova/compute/api.py", line 201, in inner return function(self, context, instance, *args, **kwargs) File "nova/compute/api.py", line 209, in _wrapped return fn(self, context, instance, *args, **kwargs) File "nova/compute/api.py", line 149, in inner return f(self, context, instance, *args, **kw) File "nova/compute/api.py", line 2111, in delete self._delete_instance(context, instance) File "nova/compute/api.py", line 2102, in _delete_instance task_state=task_states.DELETING) File "nova/compute/api.py", line 1897, in _delete cb(context, instance, bdms) File "nova/compute/api.py", line 2065, in _do_delete delete_type='delete') File "nova/compute/rpcapi.py", line 1041, in terminate_instance reservations=reservations) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/rpc/client.py", line 174, in call retry=self.retry) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/transport.py", line 131, in _send timeout=timeout, retry=retry) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/_drivers/impl_fake.py", line 219, in send return self._send(target, ctxt, message, wait_for_reply, timeout) File "/home/zuul/src/git.openstack.org/openstack/nova/.tox/functional/local/lib/python2.7/site-packages/oslo_messaging/_drivers/impl_fake.py", line 206, in _send raise failure InstanceActionEventNotFound: Event compute_terminate_instance not found for action id 3 2017-12-29 06:45:21,780 INFO [nova.api.openstack.wsgi] HTTP exception thrown: Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible. <class 'nova.exception.InstanceActionEventNotFound'> 2017-12-29 06:45:21,782 INFO [nova.api.openstack.requestlog] 127.0.0.1 "DELETE /v2.1/6f70656e737461636b20342065766572/servers/f39a6060-4612-4855-8de1-8b9aa9d12df3" status: 500 len: 216 microversion: 2.1 time: 0.607800 2017-12-29 06:45:22,001 WARNING [nova.service] Service killed that has no database entry }}} Traceback (most recent call last): File "nova/tests/functional/test_servers.py", line 702, in test_resize_server_negative_invalid_state self._delete_server(created_server_id) File "nova/tests/functional/test_servers.py", line 102, in _delete_server self.api.delete_server(server_id) File "nova/tests/functional/api/client.py", line 286, in delete_server return self.api_delete('/servers/%s' % server_id) File "nova/tests/functional/api/client.py", line 239, in api_delete return APIResponse(self.api_request(relative_uri, **kwargs)) File "nova/tests/functional/api/client.py", line 202, in api_request response=response) nova.tests.functional.api.client.OpenStackApiException: Unexpected status code: {"computeFault": {"code": 500, "message": "Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\n<class 'nova.exception.InstanceActionEventNotFound'>"}} To manage notifications about this bug go to: https://bugs.launchpad.net/nova/+bug/1741220/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp