diff options
| author | Jason Koelker <jason@koelker.net> | 2011-09-14 17:11:21 -0500 |
|---|---|---|
| committer | Jason Koelker <jason@koelker.net> | 2011-09-14 17:11:21 -0500 |
| commit | e8a2a540e574ca2d242b9c2749c1f285498809e7 (patch) | |
| tree | d0b0f56fb103ce3081d68b3a8e7d2fa299ca6804 /nova/db | |
| parent | 9936e1e9457234f7285c794b7c2c286603c84e52 (diff) | |
fix up the filtering so it does not return duplicates if both the network and the db filters match
Diffstat (limited to 'nova/db')
| -rw-r--r-- | nova/db/api.py | 4 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 24 |
2 files changed, 17 insertions, 11 deletions
diff --git a/nova/db/api.py b/nova/db/api.py index 0db4622c9..10a85d273 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -503,10 +503,10 @@ def instance_get_all(context): return IMPL.instance_get_all(context) -def instance_get_all_by_filters(context, filters, instances=None): +def instance_get_all_by_filters(context, filters, instance_ids=None): """Get all instances that match all filters.""" return IMPL.instance_get_all_by_filters(context, filters, - instances=instances) + instance_ids=instance_ids) def instance_get_active_by_window(context, begin, end=None, project_id=None): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 66f9a9f8f..d613602b2 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1201,7 +1201,7 @@ def instance_get_all(context): @require_context -def instance_get_all_by_filters(context, filters, instances=None): +def instance_get_all_by_filters(context, filters, instance_ids=None): """Return instances that match all filters. Deleted instances will be returned by default, unless there's a filter that says otherwise""" @@ -1277,15 +1277,21 @@ def instance_get_all_by_filters(context, filters, instances=None): query_prefix = _exact_match_filter(query_prefix, filter_name, filters.pop(filter_name)) + instances = query_prefix.all() + ids = [instance['id'] for instance in instances if instance['id']] + uuids = [instance['uuid'] for instance in instances if instance['uuid']] + + if instance_ids is None: + instance_ids = [] + # TODO(jkoelker): This is for ID or UUID compat - if instances is None: - instances = [] - elif isinstance(instances, types.StringType): - instances = [instance_get_by_uuid(context, instances)] - elif isinstance(instances, types.IntType): - instances = [instance_get(context, instances)] - - instances.extend(query_prefix.all()) + for instance_id in instance_ids: + if isinstance(instance_id, + types.StringType) and instance_id not in uuids: + instances.append(instance_get_by_uuid(context, instance_id)) + elif isinstance(instance_id, + types.IntType) and instance_id not in ids: + instances.append(instance_get(context, instance_id)) if not instances: return [] |
