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