public async Task <MembershipTableData> ReadRow(SiloAddress key) { Logger?.Debug($"{nameof(ReadRow)}: {key.ToString()}"); var val = await _db.HashGetAsync(ClusterKey, key.ToString()); if (val.HasValue) { var entry = Deserialize <VersionedEntry>(val); return(await Task.FromResult(new MembershipTableData(Tuple.Create(entry.Entry, entry.ResourceVersion), new TableVersion(entry.TableVersion.Version, entry.ResourceVersion)))); } return(await Task.FromResult(new MembershipTableData(new TableVersion(0, "0")))); }
protected override bool GetSendingSocket(Message msg, out Socket socket, out SiloAddress targetSilo, out string error) { socket = null; targetSilo = msg.TargetSilo; error = null; try { socket = messageCenter.SocketManager.GetSendingSocket(targetSilo.Endpoint); if (socket.Connected) { return(true); } messageCenter.SocketManager.InvalidateEntry(targetSilo.Endpoint); socket = messageCenter.SocketManager.GetSendingSocket(targetSilo.Endpoint); return(true); } catch (Exception ex) { error = "Exception getting a sending socket to endpoint " + targetSilo.ToString(); Log.Warn(ErrorCode.Messaging_UnableToGetSendingSocket, error, ex); messageCenter.SocketManager.InvalidateEntry(targetSilo.Endpoint); lastConnectionFailure[targetSilo] = DateTime.UtcNow; return(false); } }
private SiloMetricsData PopulateSiloMetricsDataTableEntry(ISiloPerformanceMetrics metricsData) { // NOTE: Repeatedly re-uses a single SiloMetricsData object, updated with the latest current data // Add data row header info metricsDataObject.PartitionKey = deploymentId; metricsDataObject.RowKey = siloName; metricsDataObject.Timestamp = DateTime.UtcNow; metricsDataObject.DeploymentId = deploymentId; metricsDataObject.SiloName = siloName; metricsDataObject.Address = siloAddress.ToString(); if (gateway != null) { metricsDataObject.GatewayAddress = gateway.ToString(); } metricsDataObject.HostName = myHostName; // Add metrics data metricsDataObject.CPU = metricsData.CpuUsage; metricsDataObject.MemoryUsage = metricsData.MemoryUsage; metricsDataObject.Activations = metricsData.ActivationCount; metricsDataObject.RecentlyUsedActivations = metricsData.RecentlyUsedActivationCount; metricsDataObject.SendQueue = metricsData.SendQueueLength; metricsDataObject.ReceiveQueue = metricsData.ReceiveQueueLength; metricsDataObject.RequestQueue = metricsData.RequestQueueLength; metricsDataObject.SentMessages = metricsData.SentMessages; metricsDataObject.ReceivedMessages = metricsData.ReceivedMessages; metricsDataObject.LoadShedding = metricsData.IsOverloaded; metricsDataObject.ClientCount = metricsData.ClientCount; return(metricsDataObject); }
public async Task <MembershipTableData> ReadRow(SiloAddress key) { var batch = _db.CreateBatch(); var _vesrionId = batch.StringGetAsync(ClusterVersionKey); var _vesrionEtag = batch.StringGetAsync(ClusterVersionEtagKey); var _row = batch.HashGetAsync(ClusterKey, key.ToString()); batch.Execute(); var TableVersion = new TableVersion((int)await _vesrionId, await _vesrionEtag); var rows = new List <Tuple <MembershipEntry, string> >(); var rowJson = await _row; if (!rowJson.IsNullOrEmpty) { var ent = Deserialize <VersionedEntry>(rowJson); rows.Add(Tuple.Create(ent.Entry, ent.GetVersion().VersionEtag)); } if (rows.Count == 0) { return(new MembershipTableData(TableVersion)); } return(new MembershipTableData(rows.ToList(), TableVersion)); }
public async Task <MembershipTableData> ReadRow(SiloAddress key) { var tx = _db.CreateTransaction(); var tableVersionRowTask = tx.HashGetAsync(_clusterKey, TableVersionKey); var entryRowTask = tx.HashGetAsync(_clusterKey, key.ToString()); if (!await tx.ExecuteAsync()) { throw new RedisClusteringException($"Unexpected transaction failure while reading key {key}"); } TableVersion tableVersion = GetTableVersionFromRow(await tableVersionRowTask); var entryRow = await entryRowTask; if (entryRow.HasValue) { var entry = Deserialize(entryRow); return(new MembershipTableData(Tuple.Create(entry, tableVersion.VersionEtag), tableVersion)); } else { return(new MembershipTableData(tableVersion)); } }
public override string ToString() { return(SiloAddress.ToString()); }
internal static void OnPingReplyMissed(SiloAddress replier) { FindCounter(perSiloPingReplyMissedCounters, new StatisticName(StatisticNames.MESSAGING_PINGS_REPLYMISSED_PER_SILO, replier.ToString()), CounterStorage.LogOnly).Increment(); }
internal static void OnPingReceive(SiloAddress destination) { FindCounter(perSiloPingReceiveCounters, new StatisticName(StatisticNames.MESSAGING_PINGS_RECEIVED_PER_SILO, destination.ToString()), CounterStorage.LogOnly).Increment(); }
private static void OnMessageSend_Impl(SiloAddress targetSilo, Message.Directions direction, int numTotalBytes, int headerBytes, int numMsgsInBatch) { MessagesSentTotal.IncrementBy(numMsgsInBatch); MessagesSentPerDirection[(int)direction].IncrementBy(numMsgsInBatch); TotalBytesSent.IncrementBy(numTotalBytes); HeaderBytesSent.IncrementBy(headerBytes); sentMsgSizeHistogram.AddData(numTotalBytes); FindCounter(perSiloSendCounters, new StatisticName(StatisticNames.MESSAGING_SENT_MESSAGES_PER_SILO, (targetSilo != null ? targetSilo.ToString() : "Null")), CounterStorage.LogOnly).IncrementBy(numMsgsInBatch); }
protected override bool GetSendingSocket(Message msg, out Socket socket, out SiloAddress targetSilo, out string error) { socket = null; targetSilo = msg.TargetSilo; error = null; try { socket = messageCenter.SocketManager.GetSendingSocket(targetSilo.Endpoint); if (socket.Connected) return true; messageCenter.SocketManager.InvalidateEntry(targetSilo.Endpoint); socket = messageCenter.SocketManager.GetSendingSocket(targetSilo.Endpoint); return true; } catch (Exception ex) { error = "Exception getting a sending socket to endpoint " + targetSilo.ToString(); Log.Warn(ErrorCode.Messaging_UnableToGetSendingSocket, error, ex); messageCenter.SocketManager.InvalidateEntry(targetSilo.Endpoint); lastConnectionFailure[targetSilo] = DateTime.UtcNow; return false; } }
public async Task <MembershipTableData> ReadRow(SiloAddress key) { try { var entityId = key.AsSiloInstanceId(); var ids = new[] { entityId, ClusterVersion.Id }; var data = await _dataTable .Where(x => x.ClusterId == _clusterId && ids.Contains(x.EntityId)) .AllowFiltering() .SetConsistencyLevel(DefaultConsistencyLevel) .ExecuteAsync(); return(CreateMembershipTableData(data)); } catch (DriverException) { _logger.LogWarning("Cassandra driver error occured while reading data for silo with key {siloKey}.", key.ToString()); throw; } }
public Task <string> GetRuntimeInstanceId() { return(Task.FromResult(_siloAddress.ToString())); }