Example #1
0
        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"))));
        }
Example #2
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);
        }
Example #4
0
        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));
        }
Example #5
0
        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));
            }
        }
Example #6
0
 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);
 }
Example #10
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;
            }
        }
        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;
            }
        }
Example #12
0
 public Task <string> GetRuntimeInstanceId()
 {
     return(Task.FromResult(_siloAddress.ToString()));
 }