Merge "Keep resizing&resized instances when compute init"
This commit is contained in:
		@@ -684,21 +684,28 @@ class ComputeManager(manager.Manager):
 | 
			
		||||
        evacuated to another host. Check that the instances reported
 | 
			
		||||
        by the driver are still associated with this host.  If they are
 | 
			
		||||
        not, destroy them, with the exception of instances which are in
 | 
			
		||||
        the MIGRATING state.
 | 
			
		||||
        the MIGRATING, RESIZE_MIGRATING, RESIZE_MIGRATED, RESIZE_FINISH
 | 
			
		||||
        task state or RESIZED vm state.
 | 
			
		||||
        """
 | 
			
		||||
        our_host = self.host
 | 
			
		||||
        filters = {'deleted': False}
 | 
			
		||||
        local_instances = self._get_instances_on_driver(context, filters)
 | 
			
		||||
        for instance in local_instances:
 | 
			
		||||
            if instance.host != our_host:
 | 
			
		||||
                if instance.task_state in [task_states.MIGRATING]:
 | 
			
		||||
                if (instance.task_state in [task_states.MIGRATING,
 | 
			
		||||
                                            task_states.RESIZE_MIGRATING,
 | 
			
		||||
                                            task_states.RESIZE_MIGRATED,
 | 
			
		||||
                                            task_states.RESIZE_FINISH]
 | 
			
		||||
                    or instance.vm_state in [vm_states.RESIZED]):
 | 
			
		||||
                    LOG.debug('Will not delete instance as its host ('
 | 
			
		||||
                              '%(instance_host)s) is not equal to our '
 | 
			
		||||
                              'host (%(our_host)s) but its state is '
 | 
			
		||||
                              '(%(task_state)s)',
 | 
			
		||||
                              'host (%(our_host)s) but its task state is '
 | 
			
		||||
                              '(%(task_state)s) and vm state is '
 | 
			
		||||
                              '(%(vm_state)s)',
 | 
			
		||||
                              {'instance_host': instance.host,
 | 
			
		||||
                               'our_host': our_host,
 | 
			
		||||
                               'task_state': instance.task_state},
 | 
			
		||||
                               'task_state': instance.task_state,
 | 
			
		||||
                               'vm_state': instance.vm_state},
 | 
			
		||||
                              instance=instance)
 | 
			
		||||
                    continue
 | 
			
		||||
                LOG.info(_('Deleting instance as its host ('
 | 
			
		||||
 
 | 
			
		||||
@@ -1551,15 +1551,18 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
 | 
			
		||||
        self._do_test_set_admin_password_driver_error(
 | 
			
		||||
            exc, vm_states.ACTIVE, None, expected_exception)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration(self):
 | 
			
		||||
    def _test_init_host_with_partial_migration(self, task_state=None,
 | 
			
		||||
                                               vm_state=vm_states.ACTIVE):
 | 
			
		||||
        our_host = self.compute.host
 | 
			
		||||
        instance_1 = objects.Instance(self.context)
 | 
			
		||||
        instance_1.uuid = 'foo'
 | 
			
		||||
        instance_1.task_state = task_states.MIGRATING
 | 
			
		||||
        instance_1.task_state = task_state
 | 
			
		||||
        instance_1.vm_state = vm_state
 | 
			
		||||
        instance_1.host = 'not-' + our_host
 | 
			
		||||
        instance_2 = objects.Instance(self.context)
 | 
			
		||||
        instance_2.uuid = 'bar'
 | 
			
		||||
        instance_2.task_state = None
 | 
			
		||||
        instance_2.vm_state = vm_states.ACTIVE
 | 
			
		||||
        instance_2.host = 'not-' + our_host
 | 
			
		||||
 | 
			
		||||
        with contextlib.nested(
 | 
			
		||||
@@ -1580,6 +1583,26 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
 | 
			
		||||
            destroy.assert_called_once_with(self.context, instance_2, None,
 | 
			
		||||
                                            {}, True)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration_migrating(self):
 | 
			
		||||
        self._test_init_host_with_partial_migration(
 | 
			
		||||
            task_state=task_states.MIGRATING)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration_resize_migrating(self):
 | 
			
		||||
        self._test_init_host_with_partial_migration(
 | 
			
		||||
            task_state=task_states.RESIZE_MIGRATING)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration_resize_migrated(self):
 | 
			
		||||
        self._test_init_host_with_partial_migration(
 | 
			
		||||
            task_state=task_states.RESIZE_MIGRATED)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration_finish_resize(self):
 | 
			
		||||
        self._test_init_host_with_partial_migration(
 | 
			
		||||
            task_state=task_states.RESIZE_FINISH)
 | 
			
		||||
 | 
			
		||||
    def test_init_host_with_partial_migration_resized(self):
 | 
			
		||||
        self._test_init_host_with_partial_migration(
 | 
			
		||||
            vm_state=vm_states.RESIZED)
 | 
			
		||||
 | 
			
		||||
    @mock.patch('nova.compute.manager.ComputeManager._instance_update')
 | 
			
		||||
    def test_error_out_instance_on_exception_not_implemented_err(self,
 | 
			
		||||
                                                        inst_update_mock):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user