Merge "Allow some instance polling periodic tasks to hit db slave"

This commit is contained in:
Jenkins 2014-01-11 04:34:36 +00:00 committed by Gerrit Code Review
commit 2556264da3
10 changed files with 54 additions and 36 deletions

View File

@ -4492,7 +4492,7 @@ class ComputeManager(manager.Manager):
filters = {'task_state': task_states.REBOOTING,
'host': self.host}
rebooting = instance_obj.InstanceList.get_by_filters(
context, filters, expected_attrs=[])
context, filters, expected_attrs=[], use_slave=True)
to_poll = []
for instance in rebooting:
@ -4508,7 +4508,7 @@ class ComputeManager(manager.Manager):
filters = {'vm_state': vm_states.RESCUED,
'host': self.host}
rescued_instances = self.conductor_api.instance_get_all_by_filters(
context, filters, columns_to_join=[])
context, filters, columns_to_join=[], use_slave=True)
to_unrescue = []
for instance in rescued_instances:
@ -4591,7 +4591,8 @@ class ComputeManager(manager.Manager):
filters = {'vm_state': vm_states.SHELVED,
'host': self.host}
shelved_instances = instance_obj.InstanceList.get_by_filters(
context, filters=filters, expected_attrs=['system_metadata'])
context, filters=filters, expected_attrs=['system_metadata'],
use_slave=True)
to_gc = []
for instance in shelved_instances:
@ -4979,7 +4980,8 @@ class ComputeManager(manager.Manager):
'host': self.host}
instances = instance_obj.InstanceList.get_by_filters(
context, filters,
expected_attrs=instance_obj.INSTANCE_DEFAULT_FIELDS)
expected_attrs=instance_obj.INSTANCE_DEFAULT_FIELDS,
use_slave=True)
for instance in instances:
if self._deleted_old_enough(instance, interval):
capi = self.conductor_api

View File

@ -647,12 +647,13 @@ def instance_get_all(context, columns_to_join=None):
def instance_get_all_by_filters(context, filters, sort_key='created_at',
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
"""Get all instances that match all filters."""
return IMPL.instance_get_all_by_filters(context, filters, sort_key,
sort_dir, limit=limit,
marker=marker,
columns_to_join=columns_to_join)
columns_to_join=columns_to_join,
use_slave=use_slave)
def instance_get_active_by_window_joined(context, begin, end=None,

View File

@ -1820,7 +1820,8 @@ def instance_get_all(context, columns_to_join=None):
@require_context
def instance_get_all_by_filters(context, filters, sort_key, sort_dir,
limit=None, marker=None, columns_to_join=None):
limit=None, marker=None, columns_to_join=None,
use_slave=False):
"""Return instances that match all filters. Deleted instances
will be returned by default, unless there's a filter that says
otherwise.
@ -1857,7 +1858,10 @@ def instance_get_all_by_filters(context, filters, sort_key, sort_dir,
sort_fn = {'desc': desc, 'asc': asc}
session = get_session()
if CONF.database.slave_connection == '':
use_slave = False
session = get_session(slave_session=use_slave)
if columns_to_join is None:
columns_to_join = ['info_cache', 'security_groups']

View File

@ -568,7 +568,8 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
# Version 1.1: Added use_slave to get_by_host
# Instance <= version 1.9
# Version 1.2: Instance <= version 1.11
VERSION = '1.2'
# Version 1.3: Added use_slave to get_by_filters
VERSION = '1.3'
fields = {
'objects': fields.ListOfObjectsField('Instance'),
@ -577,15 +578,17 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
'1.1': '1.9',
# NOTE(danms): Instance was at 1.9 before we added this
'1.2': '1.11',
'1.3': '1.11',
}
@base.remotable_classmethod
def get_by_filters(cls, context, filters,
sort_key='created_at', sort_dir='desc', limit=None,
marker=None, expected_attrs=None):
marker=None, expected_attrs=None, use_slave=False):
db_inst_list = db.instance_get_all_by_filters(
context, filters, sort_key, sort_dir, limit=limit, marker=marker,
columns_to_join=_expected_cols(expected_attrs))
columns_to_join=_expected_cols(expected_attrs),
use_slave=use_slave)
return _make_instance_list(context, cls(), db_inst_list,
expected_attrs)

View File

@ -682,7 +682,7 @@ class ServersControllerTest(ControllerTest):
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'newfake')
self.assertFalse(filters.get('tenant_id'))
@ -701,7 +701,7 @@ class ServersControllerTest(ControllerTest):
def test_tenant_id_filter_no_admin_context(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotEqual(filters, None)
self.assertEqual(filters['project_id'], 'fake')
return [fakes.stub_instance(100)]
@ -716,7 +716,7 @@ class ServersControllerTest(ControllerTest):
def test_tenant_id_filter_implies_all_tenants(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotEqual(filters, None)
# The project_id assertion checks that the project_id
# filter is set to that specified in the request url and
@ -737,7 +737,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_normal(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
@ -753,7 +753,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_one(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
@ -769,7 +769,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_zero(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
@ -785,7 +785,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_false(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
@ -816,7 +816,7 @@ class ServersControllerTest(ControllerTest):
def test_admin_restricted_tenant(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'fake')
return [fakes.stub_instance(100)]
@ -833,7 +833,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_pass_policy(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]

View File

@ -660,7 +660,7 @@ class ServersControllerTest(ControllerTest):
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'newfake')
self.assertFalse(filters.get('tenant_id'))
@ -679,7 +679,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_normal(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
@ -695,7 +695,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_one(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]
@ -711,7 +711,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_zero(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
@ -727,7 +727,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_param_false(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertNotIn('all_tenants', filters)
return [fakes.stub_instance(100)]
@ -758,7 +758,7 @@ class ServersControllerTest(ControllerTest):
def test_admin_restricted_tenant(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertEqual(filters['project_id'], 'fake')
return [fakes.stub_instance(100)]
@ -775,7 +775,7 @@ class ServersControllerTest(ControllerTest):
def test_all_tenants_pass_policy(self):
def fake_get_all(context, filters=None, sort_key=None,
sort_dir='desc', limit=None, marker=None,
columns_to_join=None):
columns_to_join=None, use_slave=False):
self.assertIsNotNone(filters)
self.assertNotIn('project_id', filters)
return [fakes.stub_instance(100)]

View File

@ -458,6 +458,10 @@ def fake_instance_get_all_by_filters(num_servers=5, **kwargs):
if 'columns_to_join' in kwargs:
kwargs.pop('columns_to_join')
if 'use_slave' in kwargs:
kwargs.pop('use_slave')
for i in xrange(num_servers):
uuid = get_fake_uuid(i)
server = stub_instance(id=i + 1, uuid=uuid,

View File

@ -5403,7 +5403,7 @@ class ComputeTestCase(BaseTestCase):
unrescued_instances = {'fake_uuid1': False, 'fake_uuid2': False}
def fake_instance_get_all_by_filters(context, filters,
columns_to_join):
columns_to_join, use_slave=False):
self.assertEqual(columns_to_join, [])
return instances
@ -5940,7 +5940,8 @@ class ComputeTestCase(BaseTestCase):
instance_obj.InstanceList.get_by_filters(
ctxt, mox.IgnoreArg(),
expected_attrs=instance_obj.INSTANCE_DEFAULT_FIELDS
expected_attrs=instance_obj.INSTANCE_DEFAULT_FIELDS,
use_slave=True
).AndReturn(instances)
# The first instance delete fails.

View File

@ -436,7 +436,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
{'uuid': [inst['uuid'] for
inst in driver_instances]},
'created_at', 'desc', columns_to_join=None,
limit=None, marker=None).AndReturn(
limit=None, marker=None,
use_slave=False).AndReturn(
driver_instances)
self.mox.ReplayAll()
@ -476,7 +477,8 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
db.instance_get_all_by_filters(
fake_context, filters,
'created_at', 'desc', columns_to_join=None,
limit=None, marker=None).AndReturn(all_instances)
limit=None, marker=None,
use_slave=False).AndReturn(all_instances)
self.mox.ReplayAll()

View File

@ -853,12 +853,12 @@ class _TestInstanceListObject(object):
self.mox.StubOutWithMock(db, 'instance_get_all_by_filters')
db.instance_get_all_by_filters(self.context, {'foo': 'bar'}, 'uuid',
'asc', limit=None, marker=None,
columns_to_join=['metadata']).AndReturn(
fakes)
columns_to_join=['metadata'],
use_slave=False).AndReturn(fakes)
self.mox.ReplayAll()
inst_list = instance.InstanceList.get_by_filters(
self.context, {'foo': 'bar'}, 'uuid', 'asc',
expected_attrs=['metadata'])
expected_attrs=['metadata'], use_slave=False)
for i in range(0, len(fakes)):
self.assertIsInstance(inst_list.objects[i], instance.Instance)
@ -874,12 +874,13 @@ class _TestInstanceListObject(object):
db.instance_get_all_by_filters(self.context,
{'deleted': True, 'cleaned': False},
'uuid', 'asc', limit=None, marker=None,
columns_to_join=['metadata']).AndReturn(
columns_to_join=['metadata'],
use_slave=False).AndReturn(
[fakes[1]])
self.mox.ReplayAll()
inst_list = instance.InstanceList.get_by_filters(
self.context, {'deleted': True, 'cleaned': False}, 'uuid', 'asc',
expected_attrs=['metadata'])
expected_attrs=['metadata'], use_slave=False)
self.assertEqual(1, len(inst_list))
self.assertIsInstance(inst_list.objects[0], instance.Instance)