Refactor rebuild_instance

This patch moves the creation of the rebuild_claim from rebuild_instance
to _do_rebuild_instance_with_claim() helper so that in later patches
more code can be added to _do_rebuild_instance_with_claim right
before the rebuild_claim is created without dealing with deep nesting
in rebuild_instance.

Change-Id: Icf445ed185086e7add31bc921fd3d3a45344a887
This commit is contained in:
Balazs Gibizer 2019-10-14 16:52:00 +02:00
parent 578b6ea58c
commit 05c60fe70e
2 changed files with 17 additions and 9 deletions

View File

@ -3326,15 +3326,12 @@ class ComputeManager(manager.Manager):
with self._error_out_instance_on_exception(context, instance):
try:
claim_ctxt = rebuild_claim(
context, instance, scheduled_node, allocs,
limits=limits, image_meta=image_meta,
migration=migration)
self._do_rebuild_instance_with_claim(
claim_ctxt, context, instance, orig_image_ref,
context, instance, orig_image_ref,
image_meta, injected_files, new_pass, orig_sys_metadata,
bdms, evacuate, on_shared_storage, preserve_ephemeral,
migration, request_spec, allocs)
migration, request_spec, allocs, rebuild_claim,
scheduled_node, limits)
except (exception.ComputeResourcesUnavailable,
exception.RescheduledException) as e:
if isinstance(e, exception.ComputeResourcesUnavailable):
@ -3392,11 +3389,22 @@ class ComputeManager(manager.Manager):
# mark the instance as belonging to this host.
self._set_migration_status(migration, 'done')
def _do_rebuild_instance_with_claim(self, claim_context, *args, **kwargs):
def _do_rebuild_instance_with_claim(
self, context, instance, orig_image_ref, image_meta,
injected_files, new_pass, orig_sys_metadata, bdms, evacuate,
on_shared_storage, preserve_ephemeral, migration, request_spec,
allocations, rebuild_claim, scheduled_node, limits):
"""Helper to avoid deep nesting in the top-level method."""
claim_context = rebuild_claim(
context, instance, scheduled_node, allocations,
limits=limits, image_meta=image_meta, migration=migration)
with claim_context:
self._do_rebuild_instance(*args, **kwargs)
self._do_rebuild_instance(
context, instance, orig_image_ref, image_meta, injected_files,
new_pass, orig_sys_metadata, bdms, evacuate, on_shared_storage,
preserve_ephemeral, migration, request_spec, allocations)
@staticmethod
def _get_image_name(image_meta):

View File

@ -5119,7 +5119,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase,
mock_rt = self._mock_rt()
with test.nested(
mock.patch.object(self.compute, '_get_compute_info'),
mock.patch.object(self.compute, '_do_rebuild_instance_with_claim'),
mock.patch.object(self.compute, '_do_rebuild_instance'),
mock.patch.object(objects.Instance, 'save'),
mock.patch.object(self.compute, '_set_migration_status'),
) as (mock_get, mock_rebuild, mock_save, mock_set):