Ejemplo n.º 1
0
        private NodeRoleAndSiblings GetSiblingSentinelsOfSentinel(string masterName, IRedisConnection connection)
        {
            if (masterName.IsEmpty())
            {
                throw new ArgumentNullException("masterName");
            }

            try
            {
                using (var command = new RedisCommand(-1, RedisCommandList.Sentinel, RedisCommandType.SendAndReceive,
                                                      RedisCommandList.Sentinels, masterName.ToBytes()))
                {
                    var raw = command.ExpectArray(connection, false);
                    if (!ReferenceEquals(raw, null))
                    {
                        var rawValue = raw.Value;
                        if (!ReferenceEquals(rawValue, null) && rawValue.Type == RedisRawObjectType.Array)
                        {
                            var sentinelInfos = RedisSentinelNodeInfo.ParseInfoResponse(rawValue);
                            if (sentinelInfos != null)
                            {
                                var length = sentinelInfos.Length;
                                if (length > 0)
                                {
                                    var siblingEndPoints = new List <RedisEndPoint>(length);
                                    for (var i = 0; i < length; i++)
                                    {
                                        var sentinelInfo = sentinelInfos[i];

                                        if (!Disposed && sentinelInfo != null && sentinelInfo.Port.HasValue && !sentinelInfo.IPAddress.IsEmpty())
                                        {
                                            siblingEndPoints.Add(new RedisEndPoint(sentinelInfo.IPAddress, (int)sentinelInfo.Port.Value));
                                        }
                                    }

                                    if (!Disposed)
                                    {
                                        return(new NodeRoleAndSiblings(RedisRole.Sentinel, siblingEndPoints.ToArray()));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            { }
            return(null);
        }
Ejemplo n.º 2
0
        public RedisResult <RedisSentinelNodeInfo[]> Sentinels(string masterName)
        {
            if (masterName.IsEmpty())
            {
                throw new ArgumentNullException("masterName");
            }

            var raw = ExpectArray(RedisCommandList.Sentinel, RedisCommandList.Sentinels, masterName.ToBytes());

            if (!ReferenceEquals(raw, null))
            {
                var rawValue = raw.Value;
                if (!ReferenceEquals(rawValue, null) && rawValue.Type == RedisRawObjectType.Array)
                {
                    var items = RedisSentinelNodeInfo.ParseInfoResponse(rawValue);
                    if (!items.IsEmpty())
                    {
                        return(new RedisResult <RedisSentinelNodeInfo[]>(items));
                    }
                }
            }
            return(new RedisResult <RedisSentinelNodeInfo[]>(null));
        }