diff options
author | Zuul <zuul@review.opendev.org> | 2021-09-05 05:13:08 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2021-09-05 05:13:08 +0000 |
commit | e9b60776b48e20b41b1c57757605345f77956903 (patch) | |
tree | 3a96ec62712cf88aaba3efd71923d4e262609706 | |
parent | 816c3e9d8537a1eaa23cd9ef8be857b270d353a1 (diff) | |
parent | e238cc9cd6ee7ba9d556c0c29f6f69dc3e3a7af9 (diff) | |
download | nova-e9b60776b48e20b41b1c57757605345f77956903.tar.gz |
Merge "Allow deletion of compute service with no compute nodes" into stable/victoria
-rw-r--r-- | nova/api/openstack/compute/services.py | 23 | ||||
-rw-r--r-- | nova/tests/unit/api/openstack/compute/test_services.py | 6 |
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') |