Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions nova/compute/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -2851,16 +2851,13 @@ def _build_resources(self, context, instance, requested_networks,
self._build_resources_cleanup(instance, network_info)
raise exception.BuildAbortException(instance_uuid=instance.uuid,
reason=e.format_message())
except Exception as e:
except Exception:
LOG.exception('Failure prepping block device',
instance=instance)
# Make sure the async call finishes
if network_info is not None:
network_info.wait(do_raise=False)
self.driver.clean_networks_preparation(instance, network_info)
self.driver.failed_spawn_cleanup(instance)
self._build_resources_cleanup(instance, network_info)
raise exception.BuildAbortException('Failure prepping block device. ' + str(e))
msg = _('Failure prepping block device.')
raise exception.BuildAbortException(instance_uuid=instance.uuid,
reason=msg)

resources['accel_info'] = list(spec_arqs.values())
try:
Expand Down
27 changes: 19 additions & 8 deletions nova/tests/unit/compute/test_compute_mgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -7145,7 +7145,8 @@ def _wrapped_do_build_and_run_instance(*args, **kwargs):
[self.instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')
mock_failed.assert_called_once_with(self.node)

@mock.patch.object(manager.ComputeManager, '_shutdown_instance')
Expand Down Expand Up @@ -7232,7 +7233,8 @@ def test_rescheduled_exception_with_network_allocated(self,
[instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')

@mock.patch.object(manager.ComputeManager, '_build_and_run_instance')
@mock.patch.object(manager.ComputeManager, '_cleanup_allocated_networks')
Expand Down Expand Up @@ -7279,7 +7281,8 @@ def test_rescheduled_exception_with_network_allocated_with_neutron(self,
[instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')

@mock.patch.object(manager.ComputeManager, '_build_and_run_instance')
@mock.patch.object(conductor_api.ComputeTaskAPI, 'build_instances')
Expand Down Expand Up @@ -7334,7 +7337,8 @@ def test_rescheduled_exception_with_sriov_network_allocated(self,
[instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')

@mock.patch.object(objects.InstanceActionEvent,
'event_finish_with_failure')
Expand Down Expand Up @@ -7443,7 +7447,8 @@ def _wrapped_do_build_and_run_instance(*args, **kwargs):
[self.instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')

@mock.patch.object(objects.InstanceActionEvent,
'event_finish_with_failure')
Expand Down Expand Up @@ -7498,7 +7503,8 @@ def _wrapped_do_build_and_run_instance(*args, **kwargs):
[self.instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message='')

@mock.patch('nova.compute.resource_tracker.ResourceTracker.instance_claim',
new=mock.MagicMock())
Expand Down Expand Up @@ -7564,7 +7570,9 @@ def _wrapped_do_build_and_run_instance(*args, **kwargs):
[self.instance], self.image, self.filter_properties,
self.admin_pass, self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message=(
'Affinity instance group policy was violated'))

@mock.patch('nova.compute.resource_tracker.ResourceTracker.instance_claim',
new=mock.MagicMock())
Expand Down Expand Up @@ -8044,7 +8052,10 @@ def test_reschedule_on_resources_unavailable(self, mock_claim,
self.image, self.filter_properties, self.admin_pass,
self.injected_files, self.requested_networks,
self.security_groups, self.block_device_mapping,
request_spec={}, host_lists=[fake_host_list])
request_spec={}, host_lists=[fake_host_list],
last_seen_error_message=(
'Insufficient compute resources: '
'resource unavailable.'))
mock_nil.assert_called_once_with(self.instance)

@mock.patch.object(manager.ComputeManager, '_build_resources')
Expand Down
6 changes: 4 additions & 2 deletions nova/tests/unit/conductor/test_conductor.py
Original file line number Diff line number Diff line change
Expand Up @@ -4722,7 +4722,8 @@ def _test(prepare_mock, can_send_mock):
'injected_files': mock.sentinel.injected_files,
'requested_networks': mock.sentinel.requested_networks,
'security_groups': mock.sentinel.security_groups,
'request_spec': mock.sentinel.request_spec}
'request_spec': mock.sentinel.request_spec,
'last_seen_error_message': None}
cctxt_mock.cast.assert_called_once_with(
self.context, 'build_instances', **kw)
_test()
Expand Down Expand Up @@ -4752,7 +4753,8 @@ def _test(prepare_mock, can_send_mock):
'admin_password': mock.sentinel.admin_password,
'injected_files': mock.sentinel.injected_files,
'requested_networks': mock.sentinel.requested_networks,
'security_groups': mock.sentinel.security_groups}
'security_groups': mock.sentinel.security_groups,
'last_seen_error_message': None}
cctxt_mock.cast.assert_called_once_with(
self.context, 'build_instances', **kw)
_test()
Expand Down
Loading