public RedisResult <RedisRoleInfo> Role() { var raw = ExpectArray(RedisCommandList.Role); if (!ReferenceEquals(raw, null)) { var result = RedisRoleInfo.Parse(raw.Value); return(new RedisResult <RedisRoleInfo>(result)); } return(new RedisResult <RedisRoleInfo>(null)); }
protected virtual RedisRole DiscoverRole(RedisSocket socket) { if (!Disposed) { var role = RedisRole.Undefined; try { using (var cmd = new RedisCommand(-1, RedisCommandList.Role, RedisCommandType.SendAndReceive)) { var raw = cmd.ExpectArray(new RedisSocketContext(socket, Settings), true); if (!ReferenceEquals(raw, null) && raw.IsCompleted) { var info = RedisRoleInfo.Parse(raw.Value); if (!ReferenceEquals(info, null)) { role = info.Role; } } } } catch (Exception e) { var exception = e; while (exception != null) { if (exception is SocketException) { return(RedisRole.Undefined); } var re = e as RedisException; if (re != null && (re.ErrorCode == RedisErrorCode.ConnectionError || re.ErrorCode == RedisErrorCode.SocketError)) { return(RedisRole.Undefined); } exception = exception.InnerException; } } if (role == RedisRole.Undefined) { try { var serverInfo = GetServerInfo(); if (serverInfo != null) { var serverSection = serverInfo.Server; if (serverSection != null) { role = (serverSection.RedisMode ?? String.Empty).Trim().ToRedisRole(); } if (role == RedisRole.Undefined) { var replicationSection = serverInfo.Replication; if (replicationSection != null) { role = (replicationSection.Role ?? String.Empty).Trim().ToRedisRole(); } if (role == RedisRole.Undefined) { var sentinelSection = serverInfo.Sentinel; if (sentinelSection != null && sentinelSection.SentinelMasters.HasValue) { role = RedisRole.Sentinel; } if (role == RedisRole.Undefined) { role = RedisRole.Master; } } } } } catch (Exception) { } } socket.Role = role; return(role); } return(RedisRole.Undefined); }