def manager_select(self, endpoint): # Remember whether this was previous managed. managed = self.endpoint_owned(endpoint) # Find the closest key. keys = self.key_to_manager.keys() if len(keys) == 0: logging.error("No scale manager available!") manager_key = None else: keys.sort() index = bisect.bisect(keys, endpoint.key()) key = keys[index % len(self.key_to_manager)] manager_key = self.key_to_manager[key] # Check if this is us. self.key_to_owned[endpoint.key()] = (manager_key == self.uuid) logging.info("Endpoint %s owned by %s (%s)." % \ (endpoint.name, manager_key, \ self.endpoint_owned(endpoint) and "That's me!" or "Not me!")) # Check if it is one of our own. # Start the endpoint if necessary (now owned). if self.endpoint_owned(endpoint): self.zk_conn.write(paths.endpoint_manager(endpoint.name), self.uuid, ephemeral=True) if not(managed): self.start_endpoint(endpoint)
def get_endpoint_manager(self, endpoint_name): return self.zk_conn.read(paths.endpoint_manager(endpoint_name))