Merge "Optional timeout for servers stuck in build"
This commit is contained in:
		@@ -1873,6 +1873,110 @@ class ComputeTestCase(BaseTestCase):
 | 
			
		||||
        for uuid, status in expected_migration_status.iteritems():
 | 
			
		||||
            self.assertEqual(status, fetch_instance_migration_status(uuid))
 | 
			
		||||
 | 
			
		||||
    def test_instance_build_timeout_disabled(self):
 | 
			
		||||
        self.flags(instance_build_timeout=0)
 | 
			
		||||
        ctxt = context.get_admin_context()
 | 
			
		||||
        called = {'get_all': False, 'set_error_state': 0}
 | 
			
		||||
        created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
 | 
			
		||||
 | 
			
		||||
        def fake_instance_get_all_by_filters(*args, **kwargs):
 | 
			
		||||
            called['get_all'] = True
 | 
			
		||||
            return instances[:]
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(db, 'instance_get_all_by_filters',
 | 
			
		||||
                fake_instance_get_all_by_filters)
 | 
			
		||||
 | 
			
		||||
        def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
 | 
			
		||||
            called['set_error_state'] += 1
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(self.compute, '_set_instance_error_state',
 | 
			
		||||
                fake_set_instance_error_state)
 | 
			
		||||
 | 
			
		||||
        instance_map = {}
 | 
			
		||||
        instances = []
 | 
			
		||||
        for x in xrange(5):
 | 
			
		||||
            uuid = 'fake-uuid-%s' % x
 | 
			
		||||
            instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
 | 
			
		||||
                    'vm_state': vm_states.BUILDING,
 | 
			
		||||
                    'created_at': created_at}
 | 
			
		||||
            instances.append(instance_map[uuid])
 | 
			
		||||
 | 
			
		||||
        self.compute._check_instance_build_time(ctxt)
 | 
			
		||||
        self.assertFalse(called['get_all'])
 | 
			
		||||
        self.assertEqual(called['set_error_state'], 0)
 | 
			
		||||
 | 
			
		||||
    def test_instance_build_timeout(self):
 | 
			
		||||
        self.flags(instance_build_timeout=30)
 | 
			
		||||
        ctxt = context.get_admin_context()
 | 
			
		||||
        called = {'get_all': False, 'set_error_state': 0}
 | 
			
		||||
        created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
 | 
			
		||||
 | 
			
		||||
        def fake_instance_get_all_by_filters(*args, **kwargs):
 | 
			
		||||
            called['get_all'] = True
 | 
			
		||||
            return instances[:]
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(db, 'instance_get_all_by_filters',
 | 
			
		||||
                fake_instance_get_all_by_filters)
 | 
			
		||||
 | 
			
		||||
        def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
 | 
			
		||||
            called['set_error_state'] += 1
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(self.compute, '_set_instance_error_state',
 | 
			
		||||
                fake_set_instance_error_state)
 | 
			
		||||
 | 
			
		||||
        instance_map = {}
 | 
			
		||||
        instances = []
 | 
			
		||||
        for x in xrange(5):
 | 
			
		||||
            uuid = 'fake-uuid-%s' % x
 | 
			
		||||
            instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
 | 
			
		||||
                    'vm_state': vm_states.BUILDING,
 | 
			
		||||
                    'created_at': created_at}
 | 
			
		||||
            instances.append(instance_map[uuid])
 | 
			
		||||
 | 
			
		||||
        self.compute._check_instance_build_time(ctxt)
 | 
			
		||||
        self.assertTrue(called['get_all'])
 | 
			
		||||
        self.assertEqual(called['set_error_state'], 5)
 | 
			
		||||
 | 
			
		||||
    def test_instance_build_timeout_mixed_instances(self):
 | 
			
		||||
        self.flags(instance_build_timeout=30)
 | 
			
		||||
        ctxt = context.get_admin_context()
 | 
			
		||||
        called = {'get_all': False, 'set_error_state': 0}
 | 
			
		||||
        created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
 | 
			
		||||
 | 
			
		||||
        def fake_instance_get_all_by_filters(*args, **kwargs):
 | 
			
		||||
            called['get_all'] = True
 | 
			
		||||
            return instances[:]
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(db, 'instance_get_all_by_filters',
 | 
			
		||||
                fake_instance_get_all_by_filters)
 | 
			
		||||
 | 
			
		||||
        def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
 | 
			
		||||
            called['set_error_state'] += 1
 | 
			
		||||
 | 
			
		||||
        self.stubs.Set(self.compute, '_set_instance_error_state',
 | 
			
		||||
                fake_set_instance_error_state)
 | 
			
		||||
 | 
			
		||||
        instance_map = {}
 | 
			
		||||
        instances = []
 | 
			
		||||
        #expired instances
 | 
			
		||||
        for x in xrange(4):
 | 
			
		||||
            uuid = 'fake-uuid-%s' % x
 | 
			
		||||
            instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
 | 
			
		||||
                    'vm_state': vm_states.BUILDING,
 | 
			
		||||
                    'created_at': created_at}
 | 
			
		||||
            instances.append(instance_map[uuid])
 | 
			
		||||
 | 
			
		||||
        #not expired
 | 
			
		||||
        uuid = 'fake-uuid-5'
 | 
			
		||||
        instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
 | 
			
		||||
                'vm_state': vm_states.BUILDING,
 | 
			
		||||
                'created_at': utils.utcnow()}
 | 
			
		||||
        instances.append(instance_map[uuid])
 | 
			
		||||
 | 
			
		||||
        self.compute._check_instance_build_time(ctxt)
 | 
			
		||||
        self.assertTrue(called['get_all'])
 | 
			
		||||
        self.assertEqual(called['set_error_state'], 4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ComputeAPITestCase(BaseTestCase):
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user