]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
Query deleted instance records during _destroy_evacuated_instances
authormdrabe <mdrabe@us.ibm.com>
Wed, 24 May 2017 20:56:13 +0000 (15:56 -0500)
committermdrabe <mdrabe@us.ibm.com>
Tue, 11 Jul 2017 18:43:24 +0000 (13:43 -0500)
_destroy_evacuated_instances is responsible for cleaning up the
remnants of instance evacuations from the source host. Currently
this method doesn't account for instances that have been deleted
after being evacuated.

Change-Id: Ib5f6b03189b7fc5cd0b226ea2dca74865fbef12a
Closes-Bug: #1687479
(cherry picked from commit 42b1fa965028c12d6e78b70d2487d5dd49158176)

nova/compute/manager.py
nova/tests/unit/compute/test_compute.py
nova/tests/unit/compute/test_compute_mgr.py

index 1a3c49f01a8964d1fd4d1d52f02ffbc9f7d8e20f..6e9756277c209c9a70d2807f0217c0f3b72a9d07 100644 (file)
@@ -636,13 +636,14 @@ class ComputeManager(manager.Manager):
             'status': ['accepted', 'done'],
             'migration_type': 'evacuation',
         }
-        evacuations = objects.MigrationList.get_by_filters(context, filters)
+        with utils.temporary_mutation(context, read_deleted='yes'):
+            evacuations = objects.MigrationList.get_by_filters(context,
+                                                               filters)
         if not evacuations:
             return
         evacuations = {mig.instance_uuid: mig for mig in evacuations}
 
-        filters = {'deleted': False}
-        local_instances = self._get_instances_on_driver(context, filters)
+        local_instances = self._get_instances_on_driver(context)
         evacuated = [inst for inst in local_instances
                      if inst.uuid in evacuations]
         for instance in evacuated:
index 7083a0a9db08b08e0b0d50143c54faa7623e1486..ff9c1cdce33300eded8fb9dff72374b6548b2685 100644 (file)
@@ -7061,7 +7061,7 @@ class ComputeTestCase(BaseTestCase):
                                          {'source_compute': self.compute.host,
                                           'status': ['accepted', 'done'],
                                           'migration_type': 'evacuation'})
-        mock_get_inst.assert_called_once_with(fake_context, {'deleted': False})
+        mock_get_inst.assert_called_once_with(fake_context)
         mock_get_nw.assert_called_once_with(fake_context, evacuated_instance)
         mock_get_blk.assert_called_once_with(fake_context, evacuated_instance)
         mock_is_inst.assert_called_once_with(fake_context, evacuated_instance)
@@ -7115,7 +7115,7 @@ class ComputeTestCase(BaseTestCase):
                 return_value='fake_network_info') as mock_get_nw:
             self.compute._destroy_evacuated_instances(fake_context)
 
-        mock_get_drv.assert_called_once_with(fake_context, {'deleted': False})
+        mock_get_drv.assert_called_once_with(fake_context)
         mock_get_nw.assert_called_once_with(fake_context, evacuated_instance)
         mock_get_blk.assert_called_once_with(fake_context, evacuated_instance)
         mock_check_local.assert_called_once_with(fake_context,
@@ -7173,7 +7173,7 @@ class ComputeTestCase(BaseTestCase):
                 return_value='fake_network_info') as mock_get_nw:
             self.compute._destroy_evacuated_instances(fake_context)
 
-        mock_get_inst.assert_called_once_with(fake_context, {'deleted': False})
+        mock_get_inst.assert_called_once_with(fake_context)
         mock_get_nw.assert_called_once_with(fake_context, evacuated_instance)
         mock_get_blk.assert_called_once_with(fake_context, evacuated_instance)
         mock_check_local.assert_called_once_with(fake_context,
index 7e08d60099fa1ebe9e25ebd78ea908119ee63ab1..19595fd9cccd15522f424fa8434086c088c5fb6d 100644 (file)
@@ -583,11 +583,12 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
     @mock.patch.object(objects.InstanceList, 'get_by_host')
     @mock.patch.object(fake_driver.FakeDriver, 'destroy')
     @mock.patch.object(fake_driver.FakeDriver, 'init_host')
+    @mock.patch('nova.utils.temporary_mutation')
     @mock.patch('nova.objects.MigrationList.get_by_filters')
     @mock.patch('nova.objects.Migration.save')
     def test_init_host_with_evacuated_instance(self, mock_save, mock_mig_get,
-            mock_init_host, mock_destroy, mock_host_get, mock_admin_ctxt,
-            mock_init_virt, mock_get_inst):
+            mock_temp_mut, mock_init_host, mock_destroy, mock_host_get,
+            mock_admin_ctxt, mock_init_virt, mock_get_inst):
         our_host = self.compute.host
         not_our_host = 'not-' + our_host
 
@@ -610,7 +611,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
         mock_host_get.assert_called_once_with(self.context, our_host,
                                 expected_attrs=['info_cache', 'metadata'])
         mock_init_virt.assert_called_once_with()
-        mock_get_inst.assert_called_once_with(self.context, {'deleted': False})
+        mock_temp_mut.assert_called_once_with(self.context, read_deleted='yes')
+        mock_get_inst.assert_called_once_with(self.context)
         mock_get_net.assert_called_once_with(self.context, deleted_instance)
 
         # ensure driver.destroy is called so that driver may