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:
 | 
			
		||||
            return
 | 
			
		||||
        hosts = retry['hosts']
 | 
			
		||||
        hosts.append((host, node))
 | 
			
		||||
        hosts.append([host, node])
 | 
			
		||||
 | 
			
		||||
    def _add_oversubscription_policy(self, filter_properties, host_state):
 | 
			
		||||
        filter_properties['limits'] = host_state.limits
 | 
			
		||||
 
 | 
			
		||||
@@ -33,10 +33,13 @@ class RetryFilter(filters.BaseHostFilter):
 | 
			
		||||
            return True
 | 
			
		||||
 | 
			
		||||
        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)") %
 | 
			
		||||
                locals())
 | 
			
		||||
        passes = host not in hosts
 | 
			
		||||
        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:
 | 
			
		||||
        return host not in hosts
 | 
			
		||||
        return passes
 | 
			
		||||
 
 | 
			
		||||
@@ -287,7 +287,7 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase):
 | 
			
		||||
 | 
			
		||||
        hosts = filter_properties['retry']['hosts']
 | 
			
		||||
        self.assertEqual(1, len(hosts))
 | 
			
		||||
        self.assertEqual((host, node), hosts[0])
 | 
			
		||||
        self.assertEqual([host, node], hosts[0])
 | 
			
		||||
 | 
			
		||||
    def test_post_select_populate(self):
 | 
			
		||||
        """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,
 | 
			
		||||
                host_state)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(('host', 'node'),
 | 
			
		||||
        self.assertEqual(['host', 'node'],
 | 
			
		||||
                         filter_properties['retry']['hosts'][0])
 | 
			
		||||
 | 
			
		||||
        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,
 | 
			
		||||
                filter_properties, instance, instance_type, reservations)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual([('host', 'node')],
 | 
			
		||||
        self.assertEqual([['host', 'node']],
 | 
			
		||||
                         filter_properties['retry']['hosts'])
 | 
			
		||||
 
 | 
			
		||||
@@ -1272,8 +1272,8 @@ class HostFiltersTestCase(test.TestCase):
 | 
			
		||||
        filt_cls = self.class_map['RetryFilter']()
 | 
			
		||||
        host = fakes.FakeHostState('host1', 'nodeX', {})
 | 
			
		||||
        retry = dict(num_attempts=2,
 | 
			
		||||
                     hosts=[('host1', 'node1'),  # same host, different node
 | 
			
		||||
                            ('host2', 'node2'),  # different host and node
 | 
			
		||||
                     hosts=[['host1', 'node1'],  # same host, different node
 | 
			
		||||
                            ['host2', 'node2'],  # different host and node
 | 
			
		||||
                            ])
 | 
			
		||||
        filter_properties = dict(retry=retry)
 | 
			
		||||
        self.assertTrue(filt_cls.host_passes(host, filter_properties))
 | 
			
		||||
@@ -1283,7 +1283,7 @@ class HostFiltersTestCase(test.TestCase):
 | 
			
		||||
        filt_cls = self.class_map['RetryFilter']()
 | 
			
		||||
        host = fakes.FakeHostState('host1', 'node1', {})
 | 
			
		||||
        retry = dict(num_attempts=1,
 | 
			
		||||
                     hosts=[('host1', 'node1')])
 | 
			
		||||
                     hosts=[['host1', 'node1']])
 | 
			
		||||
        filter_properties = dict(retry=retry)
 | 
			
		||||
        self.assertFalse(filt_cls.host_passes(host, filter_properties))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user