nova list can sometimes return 404
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
Confirmed
|
Undecided
|
Unassigned |
Bug Description
On a large number of instances 'nova list' may return 404, probably this is because some instances are deleted during command execution. Trace:
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack [req-707a0e40-
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack Traceback (most recent call last):
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return req.get_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack application, catch_exc_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack app_iter = application(
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return resp(environ, start_response)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return self.func(req, *args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack response = req.get_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack application, catch_exc_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack app_iter = application(
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return resp(environ, start_response)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return resp(environ, start_response)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack response = self.app(environ, start_response)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return resp(environ, start_response)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return self.func(req, *args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack content_type, body, accept)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack request, action_args)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack **action_args)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack instances.values())
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack host_status = self.get_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack service = [service for service in instance.services if
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack self.obj_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack self._load_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack expected_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack result = fn(cls, context, *args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack use_slave=
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return f(*args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack columns_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return IMPL.instance_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return f(*args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack return f(context, *args, **kwargs)
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack columns_
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack File "/usr/lib/
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack raise exception.
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack InstanceNotFound: Instance 28c33ed4-
2016-08-05 09:30:52.666 878 ERROR nova.api.openstack
2016-08-05 09:30:52.672 878 INFO nova.api.openstack [req-707a0e40-
2016-08-05 09:30:52.679 878 INFO nova.osapi_
Changed in nova: | |
status: | New → Confirmed |
The bug is reproduced in upstream. /github. com/openstack/ nova/blob/ master/ nova/compute/ api.py# L2053.
Steps to reproduce:
- Add sleep or pdb trace after instance loading.
e.g. on the line
https:/
- update some instance status: update instances set deleted = 1 where id = ...
- continue
It's non-repeatable reads kind of problem.
Possible solutions:
- Load all instance related data at once.
- Use transaction with Repeatable Read isolation level.