Merge proposals opened for sponsorship & test PPA at [1]. The test
packages resolve the issue as described in the test plan.

Please note that the Plucky test package has an extra line in the patch
headers that I removed from the MP.

[1] https://launchpad.net/~whershberger/+archive/ubuntu/nova-lp2095364

** Description changed:

+ [ Impact ]
+ 
+ The user who reported this in Caracal is experiencing intermittent VM build
+ failures in their environment; depending on when the build fails, Nova may not
+ have created the VM's record in the nova_api:request_specs table yet, leading
+ to the failure when the user requests details about the VM.
+ 
+ We do not have a consistent organic reproducer that produces the missing 
record
+ during machine build. However, it's possible to remove the record from the
+ database for an existing server to reproduce the failure.
+ 
+ As noted in the upstream commit and original bug description, Nova should be
+ able to handle the missing record [1].
+ 
+ I've included the related unit tests in the patch and verified that the patch
+ fixes the issue in Noble & Plucky using regress-stack.
+ 
+ [1]
+ 
https://opendev.org/openstack/nova/commit/509820f156e339e825f799d84b06cb11ac6b6096
+ 
+ [ Test Plan ]
+ 
+ Run the test plan in a VM with sufficient disk (25GiB+) and RAM (4GiB+).
+ 
+ For plucky, apply the following commit to regress-stack:
+ https://github.com/MggMuggins/regress-
+ stack/commit/748cb81fae39796fc90ca6a6d4427eb6eae4a0c0
+ 
+ Deploy regress-stack and set up a playground environment:
+ ```
+ sudo snap install openstackclients --channel=2024.1/stable
+ sudo snap install astral-uv --classic
+ sudo apt-get install --yes dpkg-dev python3-dev python-apt-dev
+ git clone https://github.com/canonical/regress-stack.git
+ cd regress-stack
+ uv sync
+ sudo apt-get install --yes $(uv run regress-stack packages nova)
+ sudo uv run regress-stack setup
+ 
+ # Grab the openrc since regress-stack was set up as root
+ sudo cp /root/auth.rc ~/
+ sudo chown $(id -u):$(id -g) ~/auth.rc
+ 
+ uv run regress-stack playground
+ ```
+ 
+ ```
+ . ~/auth.rc
+ openstack server create --image ubuntu-{noble,plucky} --flavor m1.small 
--network private-network demo-test1
+ ```
+ 
+ ```
+ sudo mysql -u root
+ use nova_api;
+ delete from request_specs where instance_uuid = "<UUID>";
+ exit
+ ```
+ 
+ Actual behavior:
+ ```
+ $ openstack --os-compute-api-version 2.96 server list --long
+ HttpException: 500: Server Error for url: 
http://10.148.1.2:8774/v2.1/servers/detail?deleted=False, Unexpected API Error. 
Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API 
log if possible.
+ <class 'KeyError'>
+ ```
+ 
+ Expected behavior:
+ ```
+ $ openstack --os-compute-api-version 2.96 server list --long
+ 
+-------------------+------------+--------+------------+-------------+-------------------+---------------+-------------------+----------+-------------------+--------+------------+-------------+
+ | ID                | Name       | Status | Task State | Power State | 
Networks          | Image Name    | Image ID          | Flavor   | Availability 
Zone | Host   | Properties | Host Status |
+ 
+-------------------+------------+--------+------------+-------------+-------------------+---------------+-------------------+----------+-------------------+--------+------------+-------------+
+ | 24ef1693-2375-    | demo-test1 | ACTIVE | None       | Running     | 
private-network=1 | ubuntu-plucky | 1348517e-a509-    | m1.small | nova         
     | p0.lxd |            | UP          |
+ | 4061-98ec-        |            |        |            |             | 
92.168.133.201    |               | 47f2-91e2-        |          |              
     |        |            |             |
+ | 106cb4f7d877      |            |        |            |             |        
           |               | e26d3064f549      |          |                   | 
       |            |             |
+ 
+-------------------+------------+--------+------------+-------------+-------------------+---------------+-------------------+----------+-------------------+--------+------------+-------------+
+ ```
+ 
+ [ Where problems could occur ]
+ 
+ The fix for this issue touches code that is only run when handling requests to
+ the /servers/detail endpoint. Failures in this code would show up when 
directly
+ querying that endpoint or using the `--long` option of the openstack CLI.
+ 
+ [ Original Description ]
+ 
  The List Server API and List Server detail API with v2.96 microversion
  hits 500 error if one or more instance's request spec object don't exist
  by any reason.
  
  The error reason is v2.96 and later version requires the request_spec
  information for the requested_az information, but the latest list view
  builder code assumes all request_spec objects for all instances exist
  correctly.
- 
  
  ## Stacktrace
  
  2025-01-16T06:39:41.756 10 ERROR nova.api.openstack.wsgi [F] [None 
req-0605cf7e-09db-4ba1-9914-68d34d935587 9d5b1aa120675648abcb2cb156f8020b 
792bb91fb3a254b4b5cbf61bed57854e - - default default] Unexpected exception in 
API method: KeyError: '5d9070aa-33da-46bc-94bc-604746ecfbd2'
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-] 
Traceback (most recent call last):
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/wsgi.py", line 665, 
in wrapped
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
return f(*args, **kwargs)
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/validation/__init__.py", line 
195, in wrapper
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
return func(*args, **kwargs)
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/validation/__init__.py", line 
195, in wrapper
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
return func(*args, **kwargs)
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/validation/__init__.py", line 
195, in wrapper
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
return func(*args, **kwargs)
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   
[Previous line repeated 2 more times]
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/compute/servers.py",
 line 146, in detail
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
servers = self._get_servers(req, is_detail=True)
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/compute/servers.py",
 line 360, in _get_servers
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
response = self._view_builder.detail(
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/compute/views/servers.py",
 line 475, in detail
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
servers_dict = self._list_view(self.show, request, instances,
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/compute/views/servers.py",
 line 529, in _list_view
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
server_list = [func(request, server,
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]   File 
"/opt/nova/lib64/python3.9/site-packages/nova/api/openstack/compute/views/servers.py",
 line 535, in <listcomp>
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-]     
provided_az=req_specs_dict[server.uuid])["server"]
  2025-01-16T06:39:41.756 10 EXCEPTION nova.api.openstack.wsgi [P] [-] 
KeyError: '5d9070aa-33da-46bc-94bc-604746ecfbd2'

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2095364

Title:
  List server API v2.96 returns 500 if there is missing request spec
  object

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/2095364/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to