Merge "Fix WeighedHost logging regression" into stable/pike

This commit is contained in:
Zuul 2019-03-26 15:32:05 +00:00 committed by Gerrit Code Review
commit 8643ab5dc4
2 changed files with 15 additions and 3 deletions

View File

@ -317,11 +317,12 @@ class FilterScheduler(driver.Scheduler):
weighed_hosts = self.host_manager.get_weighed_hosts(filtered_hosts,
spec_obj)
# Log the weighed hosts before stripping off the wrapper class so that
# the weight value gets logged.
LOG.debug("Weighed %(hosts)s", {'hosts': weighed_hosts})
# Strip off the WeighedHost wrapper class...
weighed_hosts = [h.obj for h in weighed_hosts]
LOG.debug("Weighed %(hosts)s", {'hosts': weighed_hosts})
# We randomize the first element in the returned list to alleviate
# congestion where the same host is consistently selected among
# numerous potential hosts for similar request specs.

View File

@ -368,10 +368,11 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
self.assertEqual(['host2', 'host1'], ig.hosts)
self.assertEqual({}, ig.obj_get_changes())
@mock.patch('nova.scheduler.filter_scheduler.LOG.debug')
@mock.patch('random.choice', side_effect=lambda x: x[1])
@mock.patch('nova.scheduler.host_manager.HostManager.get_weighed_hosts')
@mock.patch('nova.scheduler.host_manager.HostManager.get_filtered_hosts')
def test_get_sorted_hosts(self, mock_filt, mock_weighed, mock_rand):
def test_get_sorted_hosts(self, mock_filt, mock_weighed, mock_rand, debug):
"""Tests the call that returns a sorted list of hosts by calling the
host manager's filtering and weighing routines
"""
@ -384,8 +385,18 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
weights.WeighedHost(hs1, 1.0), weights.WeighedHost(hs2, 1.0),
]
# Make sure that when logging the weighed hosts we are logging them
# with the WeighedHost wrapper class rather than the HostState objects.
def fake_debug(message, *args, **kwargs):
if message.startswith('Weighed'):
self.assertEqual(1, len(args))
for weighed_host in args[0]['hosts']:
self.assertIsInstance(weighed_host, weights.WeighedHost)
debug.side_effect = fake_debug
results = self.driver._get_sorted_hosts(mock.sentinel.spec,
all_host_states, mock.sentinel.index)
debug.assert_called()
mock_filt.assert_called_once_with(all_host_states, mock.sentinel.spec,
mock.sentinel.index)