示例#1
0
        public void Initialize(ConfigServerConfiguration configuration)
        {
            if (LoggerManager.Instance.CONDBLogger != null && LoggerManager.Instance.CONDBLogger.IsInfoEnabled)
            {
                LoggerManager.Instance.CONDBLogger.Info("ConfigurationCluster", "started configuration cluster");
            }

            UpdateConfiguration(configuration);
        }
示例#2
0
        protected override void BeginProcessing()
        {
            if (string.IsNullOrEmpty(Server))
            {
                Server = ProviderUtil.GetLocalAddress();
            }

            var rcm = new RemoteConfigurationManager();

            rcm.Initilize(StandAlone?MiscUtil.LOCAL:MiscUtil.CLUSTERED, Server, Port, new ConfigurationChannelFormatter(), new SSPIClientAuthenticationCredential());

            if (!_standAlone)
            {
                if (rcm.VerifyConfigurationCluster())
                {
                    ConfigurationConnection.ConfigCluster        = rcm.GetConfigurationClusterConfiguration();
                    ConfigurationConnection.ClusterConfiguration = rcm.GetDatabaseClusterConfig(true);
                    ConfigurationConnection.Current = rcm;
                    ConfigurationConnection.UpdateDatabaseClusterInfo();
                }
                else
                {
                    throw new Exception("Database cluster does not exist on the specified server.");
                }
            }
            else
            {
                var localConfig = rcm.GetDatabaseClusterConfig(false);
                if (localConfig != null)
                {
                    var configCluster = new ConfigServerConfiguration
                    {
                        Name    = MiscUtil.STAND_ALONE,
                        Port    = Port,
                        Servers = new ServerNodes()
                    };
                    configCluster.Servers.AddNode(new ServerNode {
                        Name = Server, Priority = 1
                    });
                    ConfigurationConnection.ConfigCluster        = configCluster;
                    ConfigurationConnection.ClusterConfiguration = localConfig;
                    ConfigurationConnection.Current = rcm;
                    ConfigurationConnection.UpdateClusterConfiguration();
                    ConfigurationConnection.UpdateDatabaseClusterInfo();
                }
                else
                {
                    throw new Exception("Standalone database does not exist on the specified server.");
                }
            }
        }
示例#3
0
 public ConfigClusterInfo(ConfigServerConfiguration configuration)
 {
     if (configuration != null)
     {
         if (!string.IsNullOrWhiteSpace(configuration.Name))
         {
             Name = configuration.Name;
             Port = configuration.Port;
             List <ServerDetail> serverList = new List <ServerDetail>();
             foreach (ServerNode serv in configuration.Servers.Nodes.Values)
             {
                 ServerDetail serverNodeInfo = new ServerDetail();
                 serverNodeInfo.IPAddress = serv.Name;
                 serverNodeInfo.Priority  = serv.Priority;
                 serverList.Add(serverNodeInfo);
             }
             Servers = serverList.ToArray();
         }
     }
 }
示例#4
0
        private void DetermineSecondaryConfigurationServer()
        {
            if (AutoReconnect && FailoverToSecondary)
            {
                ConfigServerConfiguration configuration = _session.GetConfigurationClusterConfiguration("*");

                if (configuration != null)
                {
                    if (configuration.Servers != null && configuration.Servers.Nodes != null)
                    {
                        ServerNode secondServer = configuration.Servers.Nodes.Values.FirstOrDefault(s => s.Name.ToLower() != _firstConfiguratioServer);

                        if (secondServer != null)
                        {
                            _secondConfiguratioServer = secondServer.Name;
                        }
                    }
                }
            }
        }
示例#5
0
 public ConfigurationConnection(ConfigServerConfiguration configCluster)
 {
     _configClusterInfo = configCluster;
 }
示例#6
0
        public void UpdateConfiguration(ConfigServerConfiguration configuration)
        {
            _configuration = configuration;
            bool needReconnect = false;

            if (LoggerManager.Instance.CONDBLogger != null && LoggerManager.Instance.CONDBLogger.IsInfoEnabled)
            {
                LoggerManager.Instance.CONDBLogger.Info("ConfigurationCluster", "configuration has been changed");
            }


            if (_configuration != null)
            {
                ServerNode peerNode = _configuration.Servers.Nodes.Values.FirstOrDefault(p => p.Name.ToLower() != _localServerIP.ToLower());

                if (_peerNode != null)
                {
                    if (peerNode == null || !peerNode.Name.ToLower().Equals(_peerNode.Name.ToLower()))
                    {
                        //peer node is removed from configuration
                        if (_session != null)
                        {
                            _session.Disconnect();
                        }

                        if (_reconnctionThread != null)
                        {
                            _reconnctionThread.Abort();
                        }
                        needReconnect = peerNode != null && !peerNode.Name.ToLower().Equals(_peerNode.Name.ToLower());
                    }
                }
                else
                {
                    if (peerNode != null)
                    {
                        needReconnect = true;
                    }
                }

                _peerNode = peerNode;
                if (LoggerManager.Instance.CONDBLogger != null && LoggerManager.Instance.CONDBLogger.IsInfoEnabled && _peerNode != null)
                {
                    LoggerManager.Instance.CONDBLogger.Info("ConfigurationCluster.Update", "peer configuration server " + _peerNode.Name);
                }

                if (needReconnect)
                {
                    if (!ConnectToPeerServer())
                    {
                        ConnectInBackground();
                    }
                }
                else
                {
                    if (_peerNode == null)
                    {
                        if (_session != null)
                        {
                            _session.Disconnect();
                        }
                    }
                    if (_reconnctionThread != null && _reconnctionThread.IsAlive)
                    {
                        _reconnctionThread.Abort();
                    }
                    DetermineRole();
                }
                if (!(_configuration.Servers != null && _configuration.Servers.Nodes != null && _configuration.Servers.Nodes.Count > 0))
                {
                    //By default an unitialized server is considered in primary role
                    BecomePrimary();
                }
            }
        }
示例#7
0
 public void CreateConfigurationCluster(ConfigServerConfiguration serverConfig, int heartBeat, ReplicationConfiguration replConfig, string displayName)
 {
     _session.CreateConfigurationCluster(serverConfig, heartBeat, replConfig, displayName);
 }