diff options
author | Zuul <zuul@review.opendev.org> | 2023-05-11 22:40:40 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2023-05-11 22:40:40 +0000 |
commit | 3b84421c6ccadb69ab7e3ead3550931f20db2ec4 (patch) | |
tree | 046f007131350d15584ee06a2c4daae92d5b713d /nova/virt/ironic/driver.py | |
parent | f1009524f2778c482f9e67cc6195f1101b5f6bdc (diff) | |
parent | d71e9f6ec4933f9430db55537a36678b16ce895a (diff) | |
download | nova-3b84421c6ccadb69ab7e3ead3550931f20db2ec4.tar.gz |
Merge "Ironic: retry when node not available" into stable/zed
Diffstat (limited to 'nova/virt/ironic/driver.py')
-rw-r--r-- | nova/virt/ironic/driver.py | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/nova/virt/ironic/driver.py b/nova/virt/ironic/driver.py index 5583ac5236..117294ff89 100644 --- a/nova/virt/ironic/driver.py +++ b/nova/virt/ironic/driver.py @@ -397,6 +397,18 @@ class IronicDriver(virt_driver.ComputeDriver): _("Ironic node uuid not supplied to " "driver for instance %s.") % instance.uuid) node = self._get_node(node_uuid) + + # Its possible this node has just moved from deleting + # to cleaning. Placement will update the inventory + # as all reserved, but this instance might have got here + # before that happened, but after the previous allocation + # got deleted. We trigger a re-schedule to another node. + if (self._node_resources_used(node) or + self._node_resources_unavailable(node)): + msg = "Chosen ironic node %s is not available" % node_uuid + LOG.info(msg, instance=instance) + raise exception.ComputeResourcesUnavailable(reason=msg) + self._set_instance_id(node, instance) def failed_spawn_cleanup(self, instance): |