Ejemplo n.º 1
0
        private void SetClusterAddresses(RelayNodeConfig config)
        {
            HashSet <IPAddress> localClusterAddresses = null;

            if (config != null)
            {
                var cluster = config.GetMyCluster();
                if (cluster != null)
                {
                    localClusterAddresses = new HashSet <IPAddress>();
                    foreach (var clusterNode in cluster.RelayNodes)
                    {
                        if (clusterNode.Activated)
                        {
                            var addr = clusterNode.IPAddress;
                            if (!localClusterAddresses.Contains(addr))
                            {
                                localClusterAddresses.Add(addr);
                            }
                        }
                    }
                }
            }
            clusterAddresses = localClusterAddresses;
        }
Ejemplo n.º 2
0
        internal void ReloadMapping(RelayNodeGroupDefinition groupDefinition, RelayNodeConfig newConfig, ForwardingConfig newForwardingConfig)
        {
            RelayNodeClusterDefinition myClusterDefinition = newConfig.GetMyCluster();

            Activated         = groupDefinition.Activated;
            GroupDefinition   = groupDefinition;
            _clusterByRange   = groupDefinition.UseIdRanges;
            _forwardingConfig = newForwardingConfig;

            if (groupDefinition.RelayNodeClusters.Length == Clusters.Count)
            {
                //same number of clusters, just let the clusters rebuild themselves. the clusters will entirely rebuild, so shuffinling around servers should be okay
                if (_log.IsDebugEnabled)
                {
                    _log.DebugFormat("Rebuilding existing clusters in group {0}.", groupDefinition.Name);
                }
                for (int i = 0; i < groupDefinition.RelayNodeClusters.Length; i++)
                {
                    Clusters[i].ReloadMapping(groupDefinition.RelayNodeClusters[i], newConfig, newForwardingConfig);
                    if (groupDefinition.RelayNodeClusters[i] == myClusterDefinition)
                    {
                        MyCluster = Clusters[i];
                    }
                }
                if (myClusterDefinition == null && MyCluster != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.InfoFormat("Group {0} no longer contains this server. Removing.", GroupName);
                    }
                    //this group no longer contains "me". If it DID contain "me", it would've been set above.
                    MyCluster = null;
                }
            }
            else
            {
                //build new clusters and replace the existing ones with them
                if (_log.IsInfoEnabled)
                {
                    _log.InfoFormat("Number of clusters in group {0} changed, rebuilding.", groupDefinition.Name);
                }
                NodeCluster        myCluster   = null;
                List <NodeCluster> newClusters = new List <NodeCluster>();
                foreach (RelayNodeClusterDefinition clusterDefintion in groupDefinition.RelayNodeClusters)
                {
                    NodeCluster nodeCluster = new NodeCluster(clusterDefintion, newConfig, this, newForwardingConfig);
                    if (clusterDefintion == myClusterDefinition)
                    {
                        myCluster = nodeCluster;
                    }
                    newClusters.Add(nodeCluster);
                }
                Clusters  = newClusters;
                MyCluster = myCluster;
            }
            _nodeReselectTimer.Change(NodeReselectIntervalMilliseconds, NodeReselectIntervalMilliseconds);
        }
Ejemplo n.º 3
0
        private int GetResetDuration()
        {
            var resetDuration = 0;
            // node
            var node = configuration.GetMyNode();

            if (node == null)
            {
                return(resetDuration);
            }
            resetDuration = node.StartupRepopulateDuration;
            if (resetDuration != 0)
            {
                return(resetDuration);
            }
            // cluster
            var cluster = configuration.GetMyCluster();

            if (cluster == null)
            {
                return(resetDuration);
            }
            resetDuration = cluster.StartupRepopulateDuration;
            if (resetDuration != 0)
            {
                return(resetDuration);
            }
            // group
            var group = configuration.GetMyGroup();

            if (group == null)
            {
                return(resetDuration);
            }
            resetDuration = group.StartupRepopulateDuration;
            return(resetDuration);
        }
Ejemplo n.º 4
0
		internal void ReloadMapping(RelayNodeGroupDefinition groupDefinition, RelayNodeConfig newConfig, ForwardingConfig newForwardingConfig)
		{
			RelayNodeClusterDefinition myClusterDefinition = newConfig.GetMyCluster();
			Activated = groupDefinition.Activated;
			GroupDefinition = groupDefinition;
			_clusterByRange = groupDefinition.UseIdRanges;
			_forwardingConfig = newForwardingConfig;
			NodeSelectionHopWindowSize = groupDefinition.NodeSelectionHopWindowSize;
			if (groupDefinition.RelayNodeClusters.Length == Clusters.Count)
			{
				//same number of clusters, just let the clusters rebuild themselves. the clusters will entirely rebuild, so shuffinling around servers should be okay
				if (_log.IsInfoEnabled)
					_log.InfoFormat("Rebuilding existing clusters in group {0}.", groupDefinition.Name);
				for (int i = 0; i < groupDefinition.RelayNodeClusters.Length; i++)
				{
					Clusters[i].ReloadMapping(groupDefinition.RelayNodeClusters[i], newConfig, newForwardingConfig);
					if (groupDefinition.RelayNodeClusters[i] == myClusterDefinition)
					{
						MyCluster = Clusters[i];
					}
				}
				if (myClusterDefinition == null && MyCluster != null)
				{
					if (_log.IsInfoEnabled)
						_log.InfoFormat("Group {0} no longer contains this server. Removing.", GroupName);
					//this group no longer contains "me". If it DID contain "me", it would've been set above.
					MyCluster = null;
				}
			}
			else
			{
				//build new clusters and replace the existing ones with them
				if (_log.IsInfoEnabled)
					_log.InfoFormat("Number of clusters in group {0} changed, rebuilding.", groupDefinition.Name);
				NodeCluster myCluster = null;
				List<NodeCluster> newClusters = new List<NodeCluster>();
				foreach (RelayNodeClusterDefinition clusterDefintion in groupDefinition.RelayNodeClusters)
				{
					NodeCluster nodeCluster = new NodeCluster(clusterDefintion, newConfig, this, newForwardingConfig);
					if (clusterDefintion == myClusterDefinition)
					{
						myCluster = nodeCluster;
					}
					newClusters.Add(nodeCluster);
				}
				Clusters = newClusters;
				MyCluster = myCluster;
			}
			_nodeReselectTimer.Change(NodeReselectIntervalMilliseconds, NodeReselectIntervalMilliseconds);
		}
Ejemplo n.º 5
0
		private void SetClusterAddresses(RelayNodeConfig config)
		{
			HashSet<IPAddress> localClusterAddresses = null;
			if (config != null)
			{
				var cluster = config.GetMyCluster();
				if (cluster != null)
				{
					localClusterAddresses = new HashSet<IPAddress>();
					foreach (var clusterNode in cluster.RelayNodes)
					{
						if (clusterNode.Activated)
						{
							var addr = clusterNode.IPAddress;
							if (!localClusterAddresses.Contains(addr))
							{
								localClusterAddresses.Add(addr);
							}
						}
					}
				}
			}
			clusterAddresses = localClusterAddresses;
		}