Scheduler: return a namedtuple from _get_group_details

Commit 459ca56de2 added the utility
method _get_group_details. This patch returns a namedtuple that
contains the hosts and policies for the instance group. This makes
the code easier to read and more robust.

TrivialFix

Change-Id: I76208092b06408022f48b1d965b982af86c78161
This commit is contained in:
Gary Kotton 2014-12-01 06:22:19 -08:00
parent 1b3e99773e
commit 19c13fc59d
2 changed files with 10 additions and 5 deletions

View File

@ -14,6 +14,7 @@
"""Utility methods for scheduling."""
import collections
import sys
from oslo.config import cfg
@ -43,6 +44,8 @@ CONF.register_opts(scheduler_opts)
CONF.import_opt('scheduler_default_filters', 'nova.scheduler.host_manager')
GroupDetails = collections.namedtuple('GroupDetails', ['hosts', 'policies'])
def build_request_spec(ctxt, image, instances, instance_type=None):
"""Build a request_spec for the scheduler.
@ -254,7 +257,7 @@ def _get_group_details(context, instance_uuids, user_group_hosts=None):
:param instance_uuids: list of instance uuids
:param user_group_hosts: Hosts from the group or empty set
:returns: None or tuple (group_hosts, group_policies)
:returns: None or namedtuple GroupDetails
"""
global _SUPPORTS_AFFINITY
if _SUPPORTS_AFFINITY is None:
@ -290,7 +293,8 @@ def _get_group_details(context, instance_uuids, user_group_hosts=None):
raise exception.NoValidHost(reason=msg)
group_hosts = set(group.get_hosts(context))
user_hosts = set(user_group_hosts) if user_group_hosts else set()
return (user_hosts | group_hosts, group.policies)
return GroupDetails(hosts=user_hosts | group_hosts,
policies=group.policies)
def setup_instance_group(context, request_spec, filter_properties):
@ -306,5 +310,5 @@ def setup_instance_group(context, request_spec, filter_properties):
group_info = _get_group_details(context, instance_uuids, group_hosts)
if group_info is not None:
filter_properties['group_updated'] = True
(filter_properties['group_hosts'],
filter_properties['group_policies']) = group_info
filter_properties['group_hosts'] = group_info.hosts
filter_properties['group_policies'] = group_info.policies

View File

@ -316,7 +316,8 @@ class SchedulerUtilsTestCase(test.NoDBTestCase):
@mock.patch.object(scheduler_utils, '_get_group_details')
def test_setup_instance_group_in_filter_properties(self, mock_ggd):
mock_ggd.return_value = (set(['hostA', 'hostB']), ['policy'])
mock_ggd.return_value = scheduler_utils.GroupDetails(
hosts=set(['hostA', 'hostB']), policies=['policy'])
spec = {'instance_uuids': ['fake-uuid']}
filter_props = {'group_hosts': ['hostC']}