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