diff --git a/nova/scheduler/filters/affinity_filter.py b/nova/scheduler/filters/affinity_filter.py index e6e7a11..652babc 100644 --- a/nova/scheduler/filters/affinity_filter.py +++ b/nova/scheduler/filters/affinity_filter.py @@ -26,8 +26,11 @@ class AffinityFilter(filters.BaseHostFilter): def __init__(self): self.compute_api = compute.API() - def _affinity_host(self, context, instance_id): - return self.compute_api.get(context, instance_id)['host'] + def _all_hosts(self, context): + all_hosts = {} + for instance in self.compute_api.get_all(context): + all_hosts[instance['uuid']] = instance['host'] + return all_hosts class DifferentHostFilter(AffinityFilter): @@ -38,11 +41,11 @@ class DifferentHostFilter(AffinityFilter): scheduler_hints = filter_properties['scheduler_hints'] me = host_state.host + all_hosts = self._all_hosts(context) affinity_uuids = scheduler_hints.get('different_host', []) if affinity_uuids: - return not any([i for i - in affinity_uuids - if self._affinity_host(context, i) == me]) + return not any([i for i in affinity_uuids + if all_hosts.get(i) == me]) # With no different_host key return True @@ -57,11 +60,11 @@ class SameHostFilter(AffinityFilter): scheduler_hints = filter_properties['scheduler_hints'] me = host_state.host + all_hosts = self._all_hosts(context) affinity_uuids = scheduler_hints.get('same_host', []) if affinity_uuids: - return any([i for i - in affinity_uuids - if self._affinity_host(context, i) == me]) + return any([i for i in affinity_uuids + if all_hosts.get(i) == me]) # With no same_host key return True