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
	 Sandy Walsh
					Sandy Walsh