Пример #1
0
        public void Release(DrainingNode node)
        {
            //remove server from waiting list
            lock (_lock)
            {
                _drainingNodes.Remove(node);
            }

            ThreadPool.QueueUserWorkItem(node.Callback);
        }
Пример #2
0
        public bool IsDrained(DrainingNode node)
        {
            var nodeName = Helpers.GetNodeName(node.Server.Address, _config.TCPPort);

            var lastUsed = LoadBalancer.GetNodeLastUsed(_config, nodeName);

            var isDrained = (lastUsed > _config.DrainingPeriod);

            if (isDrained)
            {
                node.Server.TraceInfo("Draining finished for node {0} in pool {1}.Timeout: {2} secs,  Since Last Used: {3} secs.", nodeName, _config.PoolName, _config.DrainingPeriod, lastUsed);
            }
            else
            {
                node.Server.TraceInfo("Still draining node {0} in pool {1}. Timeout: {2} secs,  Since Last Used: {3} secs.", nodeName, _config.PoolName, _config.DrainingPeriod, lastUsed);
            }

            return(isDrained);
        }
Пример #3
0
        public void Wait(ServerContext serverContext, WaitCallback callback)
        {
            var node = Helpers.GetNodeName(serverContext.Address, _config.TCPPort);

            //start node draining
            LoadBalancer.DrainNode(this._config, node);

            serverContext.TraceInfo("Draining started for node {0} in pool {1}. Timeout: {2}.", node, _config.PoolName, _config.DrainingPeriod);

            var drainingNode = new DrainingNode()
            {
                Server = serverContext, Callback = callback
            };

            //add server to waiting list
            lock (_lock)
            {
                _drainingNodes.Add(drainingNode);
            }
        }