flipped service_state in ZoneManager and fixed tests
This commit is contained in:
		@@ -76,11 +76,9 @@ def zone_update(context, zone_id, data):
 | 
			
		||||
    return db.zone_update(context, zone_id, data)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_zone_capabilities(context, service=None):
 | 
			
		||||
    """Returns a dict of key, value capabilities for this zone,
 | 
			
		||||
       or for a particular class of services running in this zone."""
 | 
			
		||||
    return _call_scheduler('get_zone_capabilities', context=context,
 | 
			
		||||
                          params=dict(service=service))
 | 
			
		||||
def get_zone_capabilities(context):
 | 
			
		||||
    """Returns a dict of key, value capabilities for this zone."""
 | 
			
		||||
    return _call_scheduler('get_zone_capabilities', context=context)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def update_service_capabilities(context, service_name, host, capabilities):
 | 
			
		||||
 
 | 
			
		||||
@@ -106,28 +106,26 @@ class ZoneManager(object):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        self.last_zone_db_check = datetime.min
 | 
			
		||||
        self.zone_states = {}  # { <zone_id> : ZoneState }
 | 
			
		||||
        self.service_states = {}  # { <service> : { <host> : { cap k : v }}}
 | 
			
		||||
        self.service_states = {}  # { <host> : { <service> : { cap k : v }}}
 | 
			
		||||
        self.green_pool = greenpool.GreenPool()
 | 
			
		||||
 | 
			
		||||
    def get_zone_list(self):
 | 
			
		||||
        """Return the list of zones we know about."""
 | 
			
		||||
        return [zone.to_dict() for zone in self.zone_states.values()]
 | 
			
		||||
 | 
			
		||||
    def get_zone_capabilities(self, context, service=None):
 | 
			
		||||
    def get_zone_capabilities(self, context):
 | 
			
		||||
        """Roll up all the individual host info to generic 'service'
 | 
			
		||||
           capabilities. Each capability is aggregated into
 | 
			
		||||
           <cap>_min and <cap>_max values."""
 | 
			
		||||
        service_dict = self.service_states
 | 
			
		||||
        if service:
 | 
			
		||||
            service_dict = {service: self.service_states.get(service, {})}
 | 
			
		||||
        hosts_dict = self.service_states
 | 
			
		||||
 | 
			
		||||
        # TODO(sandy) - be smarter about fabricating this structure.
 | 
			
		||||
        # But it's likely to change once we understand what the Best-Match
 | 
			
		||||
        # code will need better.
 | 
			
		||||
        combined = {}  # { <service>_<cap> : (min, max), ... }
 | 
			
		||||
        for service_name, host_dict in service_dict.iteritems():
 | 
			
		||||
            for host, caps_dict in host_dict.iteritems():
 | 
			
		||||
                for cap, value in caps_dict.iteritems():
 | 
			
		||||
        for host, host_dict in hosts_dict.iteritems():
 | 
			
		||||
            for service_name, service_dict in host_dict.iteritems():
 | 
			
		||||
                for cap, value in service_dict.iteritems():
 | 
			
		||||
                    key = "%s_%s" % (service_name, cap)
 | 
			
		||||
                    min_value, max_value = combined.get(key, (value, value))
 | 
			
		||||
                    min_value = min(min_value, value)
 | 
			
		||||
@@ -171,6 +169,6 @@ class ZoneManager(object):
 | 
			
		||||
        """Update the per-service capabilities based on this notification."""
 | 
			
		||||
        logging.debug(_("Received %(service_name)s service update from "
 | 
			
		||||
                            "%(host)s: %(capabilities)s") % locals())
 | 
			
		||||
        service_caps = self.service_states.get(service_name, {})
 | 
			
		||||
        service_caps[host] = capabilities
 | 
			
		||||
        self.service_states[service_name] = service_caps
 | 
			
		||||
        service_caps = self.service_states.get(host, {})
 | 
			
		||||
        service_caps[service_name] = capabilities
 | 
			
		||||
        self.service_states[host] = service_caps
 | 
			
		||||
 
 | 
			
		||||
@@ -78,38 +78,32 @@ class ZoneManagerTestCase(test.TestCase):
 | 
			
		||||
 | 
			
		||||
    def test_service_capabilities(self):
 | 
			
		||||
        zm = zone_manager.ZoneManager()
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, {})
 | 
			
		||||
 | 
			
		||||
        zm.update_service_capabilities("svc1", "host1", dict(a=1, b=2))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(1, 1), svc1_b=(2, 2)))
 | 
			
		||||
 | 
			
		||||
        zm.update_service_capabilities("svc1", "host1", dict(a=2, b=3))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(2, 2), svc1_b=(3, 3)))
 | 
			
		||||
 | 
			
		||||
        zm.update_service_capabilities("svc1", "host2", dict(a=20, b=30))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(2, 20), svc1_b=(3, 30)))
 | 
			
		||||
 | 
			
		||||
        zm.update_service_capabilities("svc10", "host1", dict(a=99, b=99))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(2, 20), svc1_b=(3, 30),
 | 
			
		||||
                                     svc10_a=(99, 99), svc10_b=(99, 99)))
 | 
			
		||||
 | 
			
		||||
        zm.update_service_capabilities("svc1", "host3", dict(c=5))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, None)
 | 
			
		||||
        caps = zm.get_zone_capabilities(None)
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(2, 20), svc1_b=(3, 30),
 | 
			
		||||
                                     svc1_c=(5, 5), svc10_a=(99, 99),
 | 
			
		||||
                                     svc10_b=(99, 99)))
 | 
			
		||||
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, 'svc1')
 | 
			
		||||
        self.assertEquals(caps, dict(svc1_a=(2, 20), svc1_b=(3, 30),
 | 
			
		||||
                                     svc1_c=(5, 5)))
 | 
			
		||||
        caps = zm.get_zone_capabilities(self, 'svc10')
 | 
			
		||||
        self.assertEquals(caps, dict(svc10_a=(99, 99), svc10_b=(99, 99)))
 | 
			
		||||
 | 
			
		||||
    def test_refresh_from_db_replace_existing(self):
 | 
			
		||||
        zm = zone_manager.ZoneManager()
 | 
			
		||||
        zone_state = zone_manager.ZoneState()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user