internal CqlReader(RowSet rows) { this.popul = rows; for (int idx = 0; idx < popul.Columns.Length; idx++) colidx.Add(popul.Columns[idx].Name, idx); enumRows = popul.GetRows(); enumerRows = enumRows.GetEnumerator(); }
public void PrintResults(RowSet results) { Console.WriteLine(String.Format("{0, -30}\t{1, -20}\t{2, -20}\t{3, -30}", "title", "album", "artist", "tags")); Console.WriteLine("-------------------------------+-----------------------+--------------------+-------------------------------"); foreach (Row row in results.GetRows()) { Console.WriteLine(String.Format("{0, -30}\t{1, -20}\t{2, -20}\t{3}", row.GetValue<String>("title"), row.GetValue<String>("album"), row.GetValue<String>("artist"), Prettify( row.GetValue<List<String>>("tags") ) )); } }
private static void DisplayKeyspace(RowSet result) { try { foreach (var resKeyspace in result.GetRows()) { Console.WriteLine("durable_writes={0} keyspace_name={1} strategy_Class={2} strategy_options={3}", resKeyspace.GetValue<bool>("durable_writes"), resKeyspace.GetValue<string>("keyspace_name"), resKeyspace.GetValue<string>("strategy_class"), resKeyspace.GetValue<string>("strategy_options")); } Console.WriteLine(); } catch (Exception ex) { Console.WriteLine("Command failed {0}", ex.Message); } }
private void RefreshNodeListAndTokenMap() { _logger.Info("Refreshing NodeList and TokenMap.."); // Make sure we're up to date on nodes and tokens var tokenMap = new Dictionary<IPAddress, DictSet<string>>(); string partitioner = null; var foundHosts = new List<IPAddress>(); var dcs = new List<string>(); var racks = new List<string>(); var allTokens = new List<DictSet<string>>(); IPAddress queriedHost; using (var rowset = _session.Query(SelectPeers, ConsistencyLevel.Quorum)) { queriedHost = rowset.Info.QueriedHost; foreach (var row in rowset.GetRows()) { IPAddress hstip = null; if(!row.IsNull("rpc_address")) hstip = row.GetValue<IPEndPoint>("rpc_address").Address; if (hstip == null) { if (!row.IsNull("peer")) hstip = row.GetValue<IPEndPoint>("peer").Address; _logger.Error("No rpc_address found for host in peers system table. "); } else if (hstip.Equals(bindAllAddress)) { if (!row.IsNull("peer")) hstip = row.GetValue<IPEndPoint>("peer").Address; } if (hstip != null) { foundHosts.Add(hstip); dcs.Add(row.GetValue<string>("data_center")); racks.Add(row.GetValue<string>("rack")); var col = row.GetValue<IEnumerable<string>>("tokens"); if (col == null) allTokens.Add(new DictSet<string>()); else allTokens.Add(new DictSet<string>(col)); } } } var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List<Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List<IPAddress> tr = new List<IPAddress>(); Dictionary<IPAddress, List<Exception>> exx = new Dictionary<IPAddress, List<Exception>>(); var cn = _session.Connect(null, iterLiof, tr, exx); using (var outp = cn.Query(SelectLocal, ConsistencyLevel.Default,false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); // Update cluster name, DC and rack for the one node we are connected to foreach (var localRow in rowset.GetRows()) { var clusterName = localRow.GetValue<string>("cluster_name"); if (clusterName != null) _cluster.Metadata.ClusterName = clusterName; // In theory host can't be null. However there is no point in risking a NPE in case we // have a race between a node removal and this. if (localhost != null) { localhost.SetLocationInfo(localRow.GetValue<string>("data_center"), localRow.GetValue<string>("rack")); partitioner = localRow.GetValue<string>("partitioner"); var tokens = localRow.GetValue<IList<string>>("tokens"); if (partitioner != null && tokens.Count > 0) { if (!tokenMap.ContainsKey(localhost.Address)) tokenMap.Add(localhost.Address, new DictSet<string>()); tokenMap[localhost.Address].AddRange(tokens); } } break; //fetch only one row } } } for (int i = 0; i < foundHosts.Count; i++) { var host = _cluster.Metadata.GetHost(foundHosts[i]); if (host == null) { // We don't know that node, add it. host = _cluster.Metadata.AddHost(foundHosts[i]); } host.SetLocationInfo(dcs[i], racks[i]); if (partitioner != null && !allTokens[i].IsEmpty) tokenMap.Add(host.Address, allTokens[i]); } // Removes all those that seems to have been removed (since we lost the control connection) var foundHostsSet = new DictSet<IPAddress>(foundHosts); foreach (var host in _cluster.Metadata.AllReplicas()) if (!host.Equals(queriedHost) && !foundHostsSet.Contains(host)) _cluster.Metadata.RemoveHost(host); if (partitioner != null) _cluster.Metadata.RebuildTokenMap(partitioner, tokenMap); _logger.Info("NodeList and TokenMap have been successfully refreshed!"); }
internal bool WaitForSchemaAgreement(IPAddress forHost = null) { var start = DateTimeOffset.Now; long elapsed = 0; while (elapsed < MaxSchemaAgreementWaitMs) { var versions = new DictSet<Guid>(); IPAddress queriedHost; if (forHost == null) { using (var rowset = _session.Query(SelectSchemaPeers, ConsistencyLevel.Default)) { queriedHost = rowset.Info.QueriedHost; foreach (var row in rowset.GetRows()) { if (row.IsNull("rpc_address") || row.IsNull("schema_version")) continue; var rpc = row.GetValue<IPEndPoint>("rpc_address").Address; if (rpc.Equals(bindAllAddress)) if (!row.IsNull("peer")) rpc = row.GetValue<IPEndPoint>("peer").Address; Host peer = _cluster.Metadata.GetHost(rpc); if (peer != null && peer.IsConsiderablyUp) versions.Add(row.GetValue<Guid>("schema_version")); } } } else { queriedHost = forHost; var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List<Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List<IPAddress> tr = new List<IPAddress>(); Dictionary<IPAddress, List<Exception>> exx = new Dictionary<IPAddress, List<Exception>>(); var cn = _session.Connect(null, iterLiof, tr, exx); using (var outp = cn.Query(SelectSchemaPeers, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); foreach (var row in rowset.GetRows()) { if (row.IsNull("rpc_address") || row.IsNull("schema_version")) continue; var rpc = row.GetValue<IPEndPoint>("rpc_address").Address; if (rpc.Equals(bindAllAddress)) { if (!row.IsNull("peer")) rpc = row.GetValue<IPEndPoint>("peer").Address; } Host peer = _cluster.Metadata.GetHost(rpc); if (peer != null && peer.IsConsiderablyUp) versions.Add(row.GetValue<Guid>("schema_version")); } } } } { var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List<Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List<IPAddress> tr = new List<IPAddress>(); Dictionary<IPAddress, List<Exception>> exx = new Dictionary<IPAddress, List<Exception>>(); var cn = _session.Connect(null, iterLiof, tr, exx); using (var outp = cn.Query(SelectSchemaLocal, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); // Update cluster name, DC and rack for the one node we are connected to foreach (var localRow in rowset.GetRows()) if (!localRow.IsNull("schema_version")) { versions.Add(localRow.GetValue<Guid>("schema_version")); break; } } } } if (versions.Count <= 1) return true; // let's not flood the node too much Thread.Sleep(200); elapsed = (long)(DateTimeOffset.Now - start).TotalMilliseconds; } return false; }
public bool WaitForSchemaAgreement(IPAddress forHost) { var start = DateTimeOffset.Now; long elapsed = 0; while (elapsed < MaxSchemaAgreementWaitMs) { var versions = new HashSet<Guid>(); int streamId1; int streamId2; CassandraConnection connection; { var localhost = _cluster.Metadata.GetHost(forHost); var iterLiof = new List<Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List<IPAddress> tr = new List<IPAddress>(); Dictionary<IPAddress, List<Exception>> exx = new Dictionary<IPAddress, List<Exception>>(); connection = Connect(iterLiof, tr, exx, out streamId1); while (true) { try { streamId2 = connection.AllocateStreamId(); break; } catch (CassandraConnection.StreamAllocationException) { Thread.Sleep(100); } } } { using (var outp = connection.Query(streamId1, SelectSchemaPeers, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); foreach (var row in rowset.GetRows()) { if (row.IsNull("rpc_address") || row.IsNull("schema_version")) continue; var rpc = row.GetValue<IPEndPoint>("rpc_address").Address; if (rpc.Equals(bindAllAddress)) { if (!row.IsNull("peer")) rpc = row.GetValue<IPEndPoint>("peer").Address; } Host peer = _cluster.Metadata.GetHost(rpc); if (peer != null && peer.IsConsiderablyUp) versions.Add(row.GetValue<Guid>("schema_version")); } } } } { using (var outp = connection.Query(streamId2, SelectSchemaLocal, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); // Update cluster name, DC and rack for the one node we are connected to foreach (var localRow in rowset.GetRows()) if (!localRow.IsNull("schema_version")) { versions.Add(localRow.GetValue<Guid>("schema_version")); break; } } } } if (versions.Count <= 1) return true; // let's not flood the node too much Thread.Sleep(200); elapsed = (long)(DateTimeOffset.Now - start).TotalMilliseconds; } return false; }
internal bool WaitForSchemaAgreement(IPAddress forHost = null) { var start = DateTimeOffset.Now; long elapsed = 0; while (elapsed < MaxSchemaAgreementWaitMs) { var versions = new DictSet <Guid>(); IPAddress queriedHost; if (forHost == null) { using (var rowset = _session.Query(SelectSchemaPeers, ConsistencyLevel.Default)) { queriedHost = rowset.Info.QueriedHost; foreach (var row in rowset.GetRows()) { if (row.IsNull("rpc_address") || row.IsNull("schema_version")) { continue; } var rpc = row.GetValue <IPEndPoint>("rpc_address").Address; if (rpc.Equals(bindAllAddress)) { if (!row.IsNull("peer")) { rpc = row.GetValue <IPEndPoint>("peer").Address; } } Host peer = _cluster.Metadata.GetHost(rpc); if (peer != null && peer.IsConsiderablyUp) { versions.Add(row.GetValue <Guid>("schema_version")); } } } } else { queriedHost = forHost; var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List <Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List <IPAddress> tr = new List <IPAddress>(); Dictionary <IPAddress, List <Exception> > exx = new Dictionary <IPAddress, List <Exception> >(); int streamId; var cn = _session.Connect(null, iterLiof, tr, exx, out streamId); using (var outp = cn.Query(streamId, SelectSchemaPeers, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); foreach (var row in rowset.GetRows()) { if (row.IsNull("rpc_address") || row.IsNull("schema_version")) { continue; } var rpc = row.GetValue <IPEndPoint>("rpc_address").Address; if (rpc.Equals(bindAllAddress)) { if (!row.IsNull("peer")) { rpc = row.GetValue <IPEndPoint>("peer").Address; } } Host peer = _cluster.Metadata.GetHost(rpc); if (peer != null && peer.IsConsiderablyUp) { versions.Add(row.GetValue <Guid>("schema_version")); } } } } } { var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List <Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List <IPAddress> tr = new List <IPAddress>(); Dictionary <IPAddress, List <Exception> > exx = new Dictionary <IPAddress, List <Exception> >(); int streamId; var cn = _session.Connect(null, iterLiof, tr, exx, out streamId); using (var outp = cn.Query(streamId, SelectSchemaLocal, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); // Update cluster name, DC and rack for the one node we are connected to foreach (var localRow in rowset.GetRows()) { if (!localRow.IsNull("schema_version")) { versions.Add(localRow.GetValue <Guid>("schema_version")); break; } } } } } if (versions.Count <= 1) { return(true); } // let's not flood the node too much Thread.Sleep(200); elapsed = (long)(DateTimeOffset.Now - start).TotalMilliseconds; } return(false); }
private void RefreshNodeListAndTokenMap() { _logger.Info("Refreshing NodeList and TokenMap.."); // Make sure we're up to date on nodes and tokens var tokenMap = new Dictionary <IPAddress, DictSet <string> >(); string partitioner = null; var foundHosts = new List <IPAddress>(); var dcs = new List <string>(); var racks = new List <string>(); var allTokens = new List <DictSet <string> >(); IPAddress queriedHost; using (var rowset = _session.Query(SelectPeers, ConsistencyLevel.Quorum)) { queriedHost = rowset.Info.QueriedHost; foreach (var row in rowset.GetRows()) { IPAddress hstip = null; if (!row.IsNull("rpc_address")) { hstip = row.GetValue <IPEndPoint>("rpc_address").Address; } if (hstip == null) { if (!row.IsNull("peer")) { hstip = row.GetValue <IPEndPoint>("peer").Address; } _logger.Error("No rpc_address found for host in peers system table. "); } else if (hstip.Equals(bindAllAddress)) { if (!row.IsNull("peer")) { hstip = row.GetValue <IPEndPoint>("peer").Address; } } if (hstip != null) { foundHosts.Add(hstip); dcs.Add(row.GetValue <string>("data_center")); racks.Add(row.GetValue <string>("rack")); var col = row.GetValue <IEnumerable <string> >("tokens"); if (col == null) { allTokens.Add(new DictSet <string>()); } else { allTokens.Add(new DictSet <string>(col)); } } } } var localhost = _cluster.Metadata.GetHost(queriedHost); var iterLiof = new List <Host>() { localhost }.GetEnumerator(); iterLiof.MoveNext(); List <IPAddress> tr = new List <IPAddress>(); Dictionary <IPAddress, List <Exception> > exx = new Dictionary <IPAddress, List <Exception> >(); int streamId; var cn = _session.Connect(null, iterLiof, tr, exx, out streamId); using (var outp = cn.Query(streamId, SelectLocal, ConsistencyLevel.Default, false)) { if (outp is OutputRows) { var rowset = new RowSet((outp as OutputRows), null, false); // Update cluster name, DC and rack for the one node we are connected to foreach (var localRow in rowset.GetRows()) { var clusterName = localRow.GetValue <string>("cluster_name"); if (clusterName != null) { _cluster.Metadata.ClusterName = clusterName; } // In theory host can't be null. However there is no point in risking a NPE in case we // have a race between a node removal and this. if (localhost != null) { localhost.SetLocationInfo(localRow.GetValue <string>("data_center"), localRow.GetValue <string>("rack")); partitioner = localRow.GetValue <string>("partitioner"); var tokens = localRow.GetValue <IList <string> >("tokens"); if (partitioner != null && tokens.Count > 0) { if (!tokenMap.ContainsKey(localhost.Address)) { tokenMap.Add(localhost.Address, new DictSet <string>()); } tokenMap[localhost.Address].AddRange(tokens); } } break; //fetch only one row } } } for (int i = 0; i < foundHosts.Count; i++) { var host = _cluster.Metadata.GetHost(foundHosts[i]); if (host == null) { // We don't know that node, add it. host = _cluster.Metadata.AddHost(foundHosts[i]); } host.SetLocationInfo(dcs[i], racks[i]); if (partitioner != null && !allTokens[i].IsEmpty) { tokenMap.Add(host.Address, allTokens[i]); } } // Removes all those that seems to have been removed (since we lost the control connection) var foundHostsSet = new DictSet <IPAddress>(foundHosts); foreach (var host in _cluster.Metadata.AllReplicas()) { if (!host.Equals(queriedHost) && !foundHostsSet.Contains(host)) { _cluster.Metadata.RemoveHost(host); } } if (partitioner != null) { _cluster.Metadata.RebuildTokenMap(partitioner, tokenMap); } _logger.Info("NodeList and TokenMap have been successfully refreshed!"); }