internal void UpdatePeersInfo(IEnumerable <Row> rs) { var foundPeers = new HashSet <IPEndPoint>(); foreach (var row in rs) { var address = GetAddressForPeerHost(row, _config.AddressTranslator, _config.ProtocolOptions.Port); if (address == null) { _logger.Error("No address found for host, ignoring it."); continue; } foundPeers.Add(address); var host = Metadata.GetHost(address); if (host == null) { host = Metadata.AddHost(address); } host.SetLocationInfo(row.GetValue <string>("data_center"), row.GetValue <string>("rack")); host.Tokens = row.GetValue <IEnumerable <string> >("tokens") ?? new string[0]; } // Removes all those that seems to have been removed (since we lost the control connection or not valid contact point) foreach (var address in Metadata.AllReplicas()) { if (!address.Equals(_host.Address) && !foundPeers.Contains(address)) { Metadata.RemoveHost(address); } } }