Nova returns 'The requested availability zone is not available (HTTP 400)' on any cell errors
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
In Progress
|
Low
|
Andrey Volkov |
Bug Description
Description
===========
In case of for example DB errors `openstack server create --availability-zone ...` command returns
"The requested availability zone is not available (HTTP 400)" instead of actual 50x error.
This considered as client error and e.g. stops Heat to retry requests.
For example:
root@dev01:~# openstack server create --image cirros-
The requested availability zone is not available (HTTP 400) (Request-ID: req-50190228-
Logs:
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context [None req-50190228-
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context Traceback (most recent call last):
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/opt/stack/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context result = fn(*args, **kwargs)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/usr/local/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context result = fn(cls, context, *args, **kwargs)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/opt/stack/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context raise ValueError('Cannot get service list (artificial error to help reproduce a bug)')
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context ValueError: Cannot get service list (artificial error to help reproduce a bug)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context
Jan 19 12:37:32 dev01 <email address hidden>[4869]: DEBUG nova.objects.
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context [None req-50190228-
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context Traceback (most recent call last):
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/opt/stack/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context result = fn(*args, **kwargs)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/usr/local/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context result = fn(cls, context, *args, **kwargs)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context File "/opt/stack/
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context raise ValueError('Cannot get service list (artificial error to help reproduce a bug)')
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context ValueError: Cannot get service list (artificial error to help reproduce a bug)
Jan 19 12:37:32 dev01 <email address hidden>[4869]: ERROR nova.context
Jan 19 12:37:32 dev01 <email address hidden>[4869]: WARNING nova.compute.api [None req-50190228-
Jan 19 12:37:32 dev01 <email address hidden>[4869]: WARNING nova.compute.api [None req-50190228-
Jan 19 12:37:32 dev01 <email address hidden>[4869]: INFO nova.api.
Under the same conditions, `openstack compute service list` returns an empty success result.
Steps to reproduce
==================
To emulate runtime errors something like that can be used:
@@ -629,6 +629,10 @@ class ServiceList(
@base.
def get_all(cls, context, disabled=None, set_zones=False):
+ import datetime
+ if datetime.
+ raise ValueError('Cannot get service list (artificial error to help reproduce a bug)')
if set_zones:
Patch proposed https:/ /review. opendev. org/c/openstack /nova/+ /771440