/// <summary> /// Refresh projection nodes. /// </summary> /// <returns>Nodes.</returns> private IList <IClientClusterNode> RefreshNodes() { long oldTopVer = Interlocked.Read(ref _topVer); var topology = RequestTopologyInformation(oldTopVer); if (topology != null) { UpdateTopology(topology.Item1, topology.Item2); RequestNodesInfo(topology.Item2); } // No topology changes. Debug.Assert(_nodeIds != null, "At least one topology update should have occurred."); // Local lookup with a native predicate is a trade off between complexity and consistency. var nodesList = new List <IClientClusterNode>(); foreach (Guid nodeId in _nodeIds) { IClientClusterNode node = _ignite.GetClientNode(nodeId); if (_predicate == null || _predicate(node)) { nodesList.Add(node); } } return(nodesList); }
/// <summary> /// Asserts that client and server node representations are equals. /// </summary> /// <param name="clusterNode"></param> /// <param name="clientNode"></param> private static void AssertNodesAreEqual(IClusterNode clusterNode, IClientClusterNode clientNode) { AssertExtensions.ReflectionEqual(clusterNode.Id, clientNode.Id); AssertExtensions.ReflectionEqual(clusterNode.Addresses, clientNode.Addresses); AssertExtensions.ReflectionEqual(clusterNode.HostNames, clientNode.HostNames); AssertExtensions.ReflectionEqual(clusterNode.IsClient, clientNode.IsClient); AssertExtensions.ReflectionEqual(clusterNode.IsDaemon, clientNode.IsDaemon); AssertExtensions.ReflectionEqual(clusterNode.IsLocal, clientNode.IsLocal); AssertExtensions.ReflectionEqual(clusterNode.Order, clientNode.Order); AssertExtensions.ReflectionEqual(clusterNode.Version, clientNode.Version); AssertExtensions.ReflectionEqual(clusterNode.Attributes, clientNode.Attributes); }
public void TestClusterGroupDoesNotUpdateTopologyIfNoChangesDetected() { var clusterGroup = (ClientClusterGroup)Client.GetCluster(); IClientClusterNode node = clusterGroup.GetNode(); // Set the wrong ids, but keep the same topology version. var invalidNodeIds = new[] { Guid.NewGuid(), Guid.Empty }; clusterGroup.UpdateTopology(1L, invalidNodeIds); Assert.AreSame(node, clusterGroup.GetNode()); }