diff --git a/nova/scheduler/abstract_scheduler.py b/nova/scheduler/abstract_scheduler.py index e5ea0f4e..6e8c7d71 100644 --- a/nova/scheduler/abstract_scheduler.py +++ b/nova/scheduler/abstract_scheduler.py @@ -20,8 +20,8 @@ customize the behavior: filter_hosts() and weigh_hosts(). The default behavior is to simply select all hosts and weight them the same. """ -import operator import json +import operator import M2Crypto diff --git a/nova/scheduler/base_scheduler.py b/nova/scheduler/base_scheduler.py index e9c078b8..e8629ca9 100644 --- a/nova/scheduler/base_scheduler.py +++ b/nova/scheduler/base_scheduler.py @@ -27,6 +27,8 @@ from nova.scheduler import abstract_scheduler from nova.scheduler import host_filter FLAGS = flags.FLAGS +flags.DEFINE_boolean('spread_first', False, + 'Use a spread-first zone scheduler strategy') LOG = logging.getLogger('nova.scheduler.base_scheduler') @@ -68,4 +70,9 @@ class BaseScheduler(abstract_scheduler.AbstractScheduler): if num_instances > 0: instances.extend(hosts[:num_instances]) + # Adjust the weights for a spread-first strategy + if FLAGS.spread_first: + for i, host in enumerate(hosts): + host['weight'] = i + 1 + return instances