yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #47460
[Bug 1548980] Re: nova list --deleted as admin fails with 404
Reviewed: https://review.openstack.org/283820
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=3d6bb233828ce63ae649e98e02dc59e04f3db2f5
Submitter: Jenkins
Branch: master
commit 3d6bb233828ce63ae649e98e02dc59e04f3db2f5
Author: Matt Riedemann <mriedem@xxxxxxxxxx>
Date: Tue Feb 23 16:34:39 2016 -0500
Don't lazy-load instance.services if the instance is deleted
The 2.16 microversion added the host_status extended
server attribute which relies on the instance.services field.
The primary join in the database for that field is dependent on
the instance not being deleted.
When listing deleted instances at microversion>=2.16, the
compute API attempts to lazy-load the instance.services field
which fails with an InstanceNotFound because the instance
is deleted.
In this case, it's best to just set instance.services to an
empty ServiceList when lazy loading the services field on a
deleted instance since the DB object won't have any value for
the services attribute anyway.
Change-Id: Ic2f239f634f917a5771b0401a5073546c710c036
Closes-Bug: #1548980
** 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/1548980
Title:
nova list --deleted as admin fails with 404
Status in OpenStack Compute (nova):
Fix Released
Bug description:
Mitaka devstack created about a week ago:
stack@neutron:~/python-novaclient$ cd /opt/stack/nova
stack@neutron:~/nova$ git log -1
commit 11019fab7a2415cbca8b93e9346b21327e79688d
Author: bhagyashris <bhagyashri.shewale@xxxxxxxxxxx>
Date: Tue Feb 16 01:13:23 2016 -0800
Remove duplicate key from dictionary
There is a duplicate dictionary key entry in test_vmops.py.
Removed duplicate key 'display_name' from dictionary.
TrivialFix
Change-Id: I4e779bceb26077b95bd3ae4ab19e60152c126e34
stack@neutron:~/nova$
--
I have a deleted instance:
mysql> select id,uuid,display_name,deleted from nova.instances;
+----+--------------------------------------+--------------+---------+
| id | uuid | display_name | deleted |
+----+--------------------------------------+--------------+---------+
| 1 | 55b9808b-7e01-44ba-ab84-c0bac34d57f1 | test1 | 1 |
+----+--------------------------------------+--------------+---------+
1 row in set (0.00 sec)
I try to list deleted instances using 'nova list --deleted' and it fails with a 404.
Checking the n-api logs there is an InstanceNotFound, it looks like
when lazy-loading the instance.services field:
2016-02-23 20:17:25.103 DEBUG nova.objects.instance [req-4f701f32-d988-4ae0-93f5-11a4591b297e admin alt_demo] Lazy-loading 'services' on Instance uuid 55b9808b-7e01-44ba-ab84-c0bac34d57f1 from (pid=17965) obj_load_attr /opt/stack/nova/nova/objects/instance.py:879
2016-02-23 20:17:25.168 ERROR nova.api.openstack [req-4f701f32-d988-4ae0-93f5-11a4591b297e admin alt_demo] Caught error: Instance 55b9808b-7e01-44ba-ab84-c0bac34d57f1 could not be found.
2016-02-23 20:17:25.168 TRACE nova.api.openstack Traceback (most recent call last):
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/__init__.py", line 140, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack return req.get_response(self.application)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1317, in send
2016-02-23 20:17:25.168 TRACE nova.api.openstack application, catch_exc_info=False)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1281, in call_application
2016-02-23 20:17:25.168 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack return resp(environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2016-02-23 20:17:25.168 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/keystonemiddleware/auth_token/__init__.py", line 457, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack response = req.get_response(self._app)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1317, in send
2016-02-23 20:17:25.168 TRACE nova.api.openstack application, catch_exc_info=False)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1281, in call_application
2016-02-23 20:17:25.168 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack return resp(environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack return resp(environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/routes/middleware.py", line 136, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack response = self.app(environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack return resp(environ, start_response)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2016-02-23 20:17:25.168 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 672, in __call__
2016-02-23 20:17:25.168 TRACE nova.api.openstack content_type, body, accept)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 756, in _process_stack
2016-02-23 20:17:25.168 TRACE nova.api.openstack request, action_args)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/wsgi.py", line 619, in post_process_extensions
2016-02-23 20:17:25.168 TRACE nova.api.openstack **action_args)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/api/openstack/compute/extended_server_attributes.py", line 90, in detail
2016-02-23 20:17:25.168 TRACE nova.api.openstack instances.values())
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/compute/api.py", line 3461, in get_instances_host_statuses
2016-02-23 20:17:25.168 TRACE nova.api.openstack host_status = self.get_instance_host_status(instance)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/compute/api.py", line 3439, in get_instance_host_status
2016-02-23 20:17:25.168 TRACE nova.api.openstack service = [service for service in instance.services if
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 67, in getter
2016-02-23 20:17:25.168 TRACE nova.api.openstack self.obj_load_attr(name)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/objects/instance.py", line 902, in obj_load_attr
2016-02-23 20:17:25.168 TRACE nova.api.openstack self._load_generic(attrname)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/objects/instance.py", line 746, in _load_generic
2016-02-23 20:17:25.168 TRACE nova.api.openstack expected_attrs=[attrname])
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py", line 181, in wrapper
2016-02-23 20:17:25.168 TRACE nova.api.openstack result = fn(cls, context, *args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/objects/instance.py", line 399, in get_by_uuid
2016-02-23 20:17:25.168 TRACE nova.api.openstack use_slave=use_slave)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 283, in wrapper
2016-02-23 20:17:25.168 TRACE nova.api.openstack return f(*args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/objects/instance.py", line 391, in _db_instance_get_by_uuid
2016-02-23 20:17:25.168 TRACE nova.api.openstack columns_to_join=columns_to_join)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/api.py", line 670, in instance_get_by_uuid
2016-02-23 20:17:25.168 TRACE nova.api.openstack return IMPL.instance_get_by_uuid(context, uuid, columns_to_join)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 227, in wrapper
2016-02-23 20:17:25.168 TRACE nova.api.openstack return f(*args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py", line 709, in wrapper
2016-02-23 20:17:25.168 TRACE nova.api.openstack return fn(*args, **kwargs)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 1746, in instance_get_by_uuid
2016-02-23 20:17:25.168 TRACE nova.api.openstack columns_to_join=columns_to_join)
2016-02-23 20:17:25.168 TRACE nova.api.openstack File "/opt/stack/nova/nova/db/sqlalchemy/api.py", line 1755, in _instance_get_by_uuid
2016-02-23 20:17:25.168 TRACE nova.api.openstack raise exception.InstanceNotFound(instance_id=uuid)
2016-02-23 20:17:25.168 TRACE nova.api.openstack InstanceNotFound: Instance 55b9808b-7e01-44ba-ab84-c0bac34d57f1 could not be found.
2016-02-23 20:17:25.168 TRACE nova.api.openstack
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1548980/+subscriptions
References