def _update_traffic_policy(self, traffic_policy: TrafficPolicy): self.endpoint_policy = RandomEndpointPolicy(traffic_policy) backend_tags = traffic_policy.backend_tags added, removed, _ = compute_iterable_delta( self.backend_replicas.keys(), backend_tags, ) for tag in added: self._get_or_create_replica_set(tag) for tag in removed: del self.backend_replicas[tag] if not self._pending_endpoint_registered.is_set(): self._pending_endpoint_registered.set()
def update_worker_replicas(self, worker_replicas: Iterable[ActorHandle]): added, removed, _ = compute_iterable_delta( self.in_flight_queries.keys(), worker_replicas) for new_replica_handle in added: self.in_flight_queries[new_replica_handle] = set() for removed_replica_handle in removed: # Delete it directly because shutdown is processed by controller. del self.in_flight_queries[removed_replica_handle] if len(added) > 0 or len(removed) > 0: self.replica_iterator = itertools.cycle( self.in_flight_queries.keys()) self.config_updated_event.set()
def update_worker_replicas(self, worker_replicas: Iterable[ActorHandle]): added, removed, _ = compute_iterable_delta( self.in_flight_queries.keys(), worker_replicas) for new_replica_handle in added: self.in_flight_queries[new_replica_handle] = set() for removed_replica_handle in removed: # Delete it directly because shutdown is processed by controller. del self.in_flight_queries[removed_replica_handle] if len(added) > 0 or len(removed) > 0: # Shuffle the keys to avoid synchronization across clients. handles = list(self.in_flight_queries.keys()) random.shuffle(handles) self.replica_iterator = itertools.cycle(handles) logger.debug( f"ReplicaSet: +{len(added)}, -{len(removed)} replicas.") self.config_updated_event.set()