Fix regression in RetryFilter
Fixes regression in RetryFilter. The RPC layer would convert the list of tuples that comprised the previously attempted hosts to a list of lists. The RetryFilter was attempting to compare a tuple to a list, which failed. bug 1096196 Change-Id: I30adf42daf5e86ccec0269eca1f84d06ed4beb59
This commit is contained in:
@@ -165,7 +165,7 @@ class FilterScheduler(driver.Scheduler):
|
|||||||
if not retry:
|
if not retry:
|
||||||
return
|
return
|
||||||
hosts = retry['hosts']
|
hosts = retry['hosts']
|
||||||
hosts.append((host, node))
|
hosts.append([host, node])
|
||||||
|
|
||||||
def _add_oversubscription_policy(self, filter_properties, host_state):
|
def _add_oversubscription_policy(self, filter_properties, host_state):
|
||||||
filter_properties['limits'] = host_state.limits
|
filter_properties['limits'] = host_state.limits
|
||||||
|
|||||||
@@ -33,10 +33,13 @@ class RetryFilter(filters.BaseHostFilter):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
hosts = retry.get('hosts', [])
|
hosts = retry.get('hosts', [])
|
||||||
host = (host_state.host, host_state.nodename)
|
host = [host_state.host, host_state.nodename]
|
||||||
|
|
||||||
LOG.debug(_("Previously tried hosts: %(hosts)s. (host=%(host)s)") %
|
passes = host not in hosts
|
||||||
locals())
|
pass_msg = "passes" if passes else "fails"
|
||||||
|
|
||||||
|
LOG.debug(_("Host %(host)s %(pass_msg)s. Previously tried hosts: "
|
||||||
|
"%(hosts)s") % locals())
|
||||||
|
|
||||||
# Host passes if it's not in the list of previously attempted hosts:
|
# Host passes if it's not in the list of previously attempted hosts:
|
||||||
return host not in hosts
|
return passes
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
|
|||||||
|
|
||||||
hosts = filter_properties['retry']['hosts']
|
hosts = filter_properties['retry']['hosts']
|
||||||
self.assertEqual(1, len(hosts))
|
self.assertEqual(1, len(hosts))
|
||||||
self.assertEqual((host, node), hosts[0])
|
self.assertEqual([host, node], hosts[0])
|
||||||
|
|
||||||
def test_post_select_populate(self):
|
def test_post_select_populate(self):
|
||||||
"""Test addition of certain filter props after a node is selected"""
|
"""Test addition of certain filter props after a node is selected"""
|
||||||
@@ -300,7 +300,7 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
|
|||||||
sched._post_select_populate_filter_properties(filter_properties,
|
sched._post_select_populate_filter_properties(filter_properties,
|
||||||
host_state)
|
host_state)
|
||||||
|
|
||||||
self.assertEqual(('host', 'node'),
|
self.assertEqual(['host', 'node'],
|
||||||
filter_properties['retry']['hosts'][0])
|
filter_properties['retry']['hosts'][0])
|
||||||
|
|
||||||
self.assertEqual({'vcpus': 5}, host_state.limits)
|
self.assertEqual({'vcpus': 5}, host_state.limits)
|
||||||
@@ -337,5 +337,5 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
|
|||||||
sched.schedule_prep_resize(self.context, image, request_spec,
|
sched.schedule_prep_resize(self.context, image, request_spec,
|
||||||
filter_properties, instance, instance_type, reservations)
|
filter_properties, instance, instance_type, reservations)
|
||||||
|
|
||||||
self.assertEqual([('host', 'node')],
|
self.assertEqual([['host', 'node']],
|
||||||
filter_properties['retry']['hosts'])
|
filter_properties['retry']['hosts'])
|
||||||
|
|||||||
@@ -1272,8 +1272,8 @@ class HostFiltersTestCase(test.TestCase):
|
|||||||
filt_cls = self.class_map['RetryFilter']()
|
filt_cls = self.class_map['RetryFilter']()
|
||||||
host = fakes.FakeHostState('host1', 'nodeX', {})
|
host = fakes.FakeHostState('host1', 'nodeX', {})
|
||||||
retry = dict(num_attempts=2,
|
retry = dict(num_attempts=2,
|
||||||
hosts=[('host1', 'node1'), # same host, different node
|
hosts=[['host1', 'node1'], # same host, different node
|
||||||
('host2', 'node2'), # different host and node
|
['host2', 'node2'], # different host and node
|
||||||
])
|
])
|
||||||
filter_properties = dict(retry=retry)
|
filter_properties = dict(retry=retry)
|
||||||
self.assertTrue(filt_cls.host_passes(host, filter_properties))
|
self.assertTrue(filt_cls.host_passes(host, filter_properties))
|
||||||
@@ -1283,7 +1283,7 @@ class HostFiltersTestCase(test.TestCase):
|
|||||||
filt_cls = self.class_map['RetryFilter']()
|
filt_cls = self.class_map['RetryFilter']()
|
||||||
host = fakes.FakeHostState('host1', 'node1', {})
|
host = fakes.FakeHostState('host1', 'node1', {})
|
||||||
retry = dict(num_attempts=1,
|
retry = dict(num_attempts=1,
|
||||||
hosts=[('host1', 'node1')])
|
hosts=[['host1', 'node1']])
|
||||||
filter_properties = dict(retry=retry)
|
filter_properties = dict(retry=retry)
|
||||||
self.assertFalse(filt_cls.host_passes(host, filter_properties))
|
self.assertFalse(filt_cls.host_passes(host, filter_properties))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user