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; }
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); }
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); }
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); }
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; }