summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-09-05 05:13:08 +0000
committerGerrit Code Review <review@openstack.org>2021-09-05 05:13:08 +0000
commite9b60776b48e20b41b1c57757605345f77956903 (patch)
tree3a96ec62712cf88aaba3efd71923d4e262609706
parent816c3e9d8537a1eaa23cd9ef8be857b270d353a1 (diff)
parente238cc9cd6ee7ba9d556c0c29f6f69dc3e3a7af9 (diff)
downloadnova-e9b60776b48e20b41b1c57757605345f77956903.tar.gz
Merge "Allow deletion of compute service with no compute nodes" into stable/victoria
-rw-r--r--nova/api/openstack/compute/services.py23
-rw-r--r--nova/tests/unit/api/openstack/compute/test_services.py6
2 files changed, 20 insertions, 9 deletions
diff --git a/nova/api/openstack/compute/services.py b/nova/api/openstack/compute/services.py
index b462b1a9d9..be35f62ee3 100644
--- a/nova/api/openstack/compute/services.py
+++ b/nova/api/openstack/compute/services.py
@@ -267,10 +267,25 @@ class ServiceController(wsgi.Controller):
# service delete since we could orphan resource providers and
# break the ability to do things like confirm/revert instances
# in VERIFY_RESIZE status.
- compute_nodes = objects.ComputeNodeList.get_all_by_host(
- context, service.host)
- self._assert_no_in_progress_migrations(
- context, id, compute_nodes)
+ compute_nodes = []
+ try:
+ compute_nodes = objects.ComputeNodeList.get_all_by_host(
+ context, service.host)
+ self._assert_no_in_progress_migrations(
+ context, id, compute_nodes)
+ except exception.ComputeHostNotFound:
+ # NOTE(artom) Consider the following situation:
+ # - Using the Ironic virt driver
+ # - Replacing (so removing and re-adding) all baremetal
+ # nodes associated with a single nova-compute service
+ # The update resources periodic will have destroyed the
+ # compute node records because they're no longer being
+ # reported by the virt driver. If we then attempt to
+ # manually delete the compute service record,
+ # get_all_host() above will raise, as there are no longer
+ # any compute node records for the host. Catch it here and
+ # continue to allow compute service deletion.
+ pass
aggrs = self.aggregate_api.get_aggregates_by_host(context,
service.host)
diff --git a/nova/tests/unit/api/openstack/compute/test_services.py b/nova/tests/unit/api/openstack/compute/test_services.py
index 07acbaab16..94263833c7 100644
--- a/nova/tests/unit/api/openstack/compute/test_services.py
+++ b/nova/tests/unit/api/openstack/compute/test_services.py
@@ -712,11 +712,7 @@ class ServicesTestV21(test.TestCase):
'topic': 'compute',
'report_count': 0})
compute.create()
- # FIXME(artom) Until bug 1860312 is fixed, the ComputeHostNotFound
- # error will get bubbled up to the API as an error 500.
- self.assertRaises(
- webob.exc.HTTPInternalServerError,
- self.controller.delete, self.req, compute.id)
+ self.controller.delete(self.req, compute.id)
mock_get_all_by_host.assert_called_with(
self.req.environ['nova.context'], 'fake-compute-host')