From 95b9a83473dad5a2c60e146c0428b2c16d234232 Mon Sep 17 00:00:00 2001 From: Chris Behrens Date: Fri, 24 Jun 2011 00:26:55 -0700 Subject: [PATCH] on 2nd run through filter_hosts, we've already accounted for the topic memory needs converted to Bytes from MB --- nova/scheduler/zone_aware_scheduler.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/nova/scheduler/zone_aware_scheduler.py b/nova/scheduler/zone_aware_scheduler.py index 769b2dd0f13a..e6383b20b2b7 100644 --- a/nova/scheduler/zone_aware_scheduler.py +++ b/nova/scheduler/zone_aware_scheduler.py @@ -244,6 +244,8 @@ class ZoneAwareScheduler(driver.Scheduler): # may have been consumed from a previous build.. host_list = self.filter_hosts(topic, request_spec, host_list) if not host_list: + LOG.warn(_("Ran out of available hosts after weighing " + "%d of %d instances") % (i, num_instances)) break # then weigh the selected hosts. @@ -279,7 +281,7 @@ class ZoneAwareScheduler(driver.Scheduler): is acceptable for scheduling. """ instance_type = request_spec['instance_type'] - requested_mem = instance_type['memory_mb'] + requested_mem = instance_type['memory_mb'] * 1024 * 1024 return capabilities['host_memory_free'] >= requested_mem def filter_hosts(self, topic, request_spec, host_list=None): @@ -297,14 +299,20 @@ class ZoneAwareScheduler(driver.Scheduler): filter_func = getattr(self, '%s_filter' % topic, _default_filter) - filtered_hosts = [] if host_list is None: + first_run = True host_list = self.zone_manager.service_states.iteritems() + else: + first_run = False + + filtered_hosts = [] for host, services in host_list: - if topic not in services: - continue - if filter_func(host, services[topic], request_spec): - filtered_hosts.append((host, services[topic])) + if first_run: + if topic not in services: + continue + services = services['topic'] + if filter_func(host, services, request_spec): + filtered_hosts.append((host, services)) return filtered_hosts def weigh_hosts(self, topic, request_spec, hosts): @@ -318,7 +326,7 @@ class ZoneAwareScheduler(driver.Scheduler): def compute_consume(self, capabilities, instance_type): """Consume compute resources for selected host""" - requested_mem = max(instance_type['memory_mb'], 0) + requested_mem = max(instance_type['memory_mb'], 0) * 1024 * 1024 capabilities['host_memory_free'] -= requested_mem def consume_resources(self, topic, capabilities, instance_type):