public bool SetMasterIsDown(RedisEndPoint endPoint) { if (!Disposed && !endPoint.IsEmpty()) { lock (m_SyncRoot) { var masters = m_Masters; if (masters.IsAlive()) { var masterNodes = masters.Nodes; if (masterNodes != null) { var masterNode = masterNodes.FirstOrDefault(n => n.IsAlive() && n.EndPoint == endPoint); if (masterNode.IsAlive()) { if (!masterNode.IsClosed) { masterNode.IsClosed = true; } ChangeGroup(masterNode); return(true); } } } } } return(false); }
public RedisManagedNode FindNodeOf(RedisEndPoint endPoint) { if (!(Disposed || endPoint.IsEmpty())) { var nodes = m_Nodes; if (nodes != null) { return(nodes.FirstOrDefault(n => !ReferenceEquals(n, null) && (n.EndPoint == endPoint))); } } return(null); }
public void PromoteToMaster(RedisEndPoint newEndPoint, RedisEndPoint oldEndPoint) { if (!Disposed && !newEndPoint.IsEmpty()) { lock (m_SyncRoot) { SetMasterIsDown(oldEndPoint); var masters = m_Masters; if (masters.IsAlive()) { var slaves = m_Slaves; var node = masters.FindNodeOf(newEndPoint); if (node.IsAlive()) { node.Ping(); if (node.IsClosed) { node.IsClosed = false; } if (slaves.IsAlive()) { slaves.RemoveNode(node); } return; } if (slaves.IsAlive()) { var slaveNode = slaves.FindNodeOf(newEndPoint); if (slaveNode.IsAlive()) { if (ChangeGroup(slaveNode)) { if (slaveNode.IsClosed) { slaveNode.IsClosed = false; } } } } } } } }
public Tuple <RedisRole, RedisEndPoint[], RedisSocket> DiscoverNode(RedisEndPoint endPoint) { if (endPoint.IsEmpty()) { throw new RedisFatalException(new ArgumentNullException("endPoint"), RedisErrorCode.MissingParameter); } ValidateNotDisposed(); var settings = Settings.Clone(endPoint.Host, endPoint.Port); using (var connection = NewConnection(settings)) { var nodeInfo = GetNodeInfo(settings.MasterName, connection); if (!(nodeInfo == null || nodeInfo.Role == RedisRole.Undefined)) { var role = nodeInfo.Role; var siblingEndPoints = nodeInfo.Siblings; return(new Tuple <RedisRole, RedisEndPoint[], RedisSocket>(role, siblingEndPoints, connection.RemoveSocket())); } } return(null); }