Merge "Ensure anti affinity scheduling works" into stable/grizzly

This commit is contained in:
Jenkins 2013-11-19 08:59:31 +00:00 committed by Gerrit Code Review
commit 4655df12b9
3 changed files with 12 additions and 3 deletions

View File

@ -240,7 +240,7 @@ def exact_filter(query, model, filters, legal_keys):
# OK, filtering on this key; what value do we search for?
value = filters.pop(key)
if key == 'metadata':
if key == 'metadata' or key == 'system_metadata':
column_attr = getattr(model, key)
if isinstance(value, list):
for item in value:
@ -1691,7 +1691,8 @@ def instance_get_all_by_filters(context, filters, sort_key, sort_dir,
# For other filters that don't match this, we will do regexp matching
exact_match_filter_names = ['project_id', 'user_id', 'image_ref',
'vm_state', 'instance_type_id', 'uuid',
'metadata', 'task_state']
'metadata', 'host', 'task_state',
'system_metadata']
# Filter the query
query_prefix = exact_filter(query_prefix, models.Instance,

View File

@ -144,7 +144,7 @@ class Scheduler(object):
# The system_metadata 'group' will be filtered
members = db.instance_get_all_by_filters(context,
{'deleted': False, 'group': group})
{'deleted': False, 'system_metadata': {'group': group}})
return [member['host']
for member in members
if member.get('host') is not None]

View File

@ -181,6 +181,14 @@ class DbApiTestCase(DbTestCase):
{'metadata': {'foo': 'bar'}})
self.assertEqual(1, len(result))
def test_instance_get_all_by_filters_system_metadata(self):
instance = self.create_instances_with_args(
system_metadata={'foo': 'bar'})
self.create_instances_with_args()
result = db.instance_get_all_by_filters(self.context,
{'system_metadata': {'foo': 'bar'}})
self.assertEqual(1, len(result))
def test_instance_get_all_by_filters_unicode_value(self):
self.create_instances_with_args(display_name=u'test♥')
result = db.instance_get_all_by_filters(self.context,