Exemplo n.º 1
0
 private void AddServersToAvailalableListOnPriorityChange(ServerBunch <TServer> serverBunch)
 {
     foreach (var server in serverBunch.GetServers())
     {
         if (/*!server.IsInAvailableList && */ server.Weight > 0 && !server.IsReserved)
         {
             this.AddToAvailableServers(server);
         }
     }
 }
Exemplo n.º 2
0
        private ServerBunch <TServer> GetOrAddBunch(byte priority)
        {
            ServerBunch <TServer> output;

            this.servers.TryGetValue(priority, out output);
            if (output == null)
            {
                output = new ServerBunch <TServer>(priority, this.ReserveRatio, this.priorityUpThreshold);
                this.servers[priority] = output;
            }
            return(output);
        }
Exemplo n.º 3
0
 private void RemoveServersFromAvailableListOnPriorityChange(ServerBunch <TServer> serverBunch)
 {
     foreach (var server in serverBunch.GetServers())
     {
         if (server.IsInAvailableList)
         {
             this.RemoveFromAvailableServers(server);
             server.Node = null;
             if (server.IsReserved)
             {
                 serverBunch.ReturnServerIntoReserve(server);
             }
         }
     }
 }
Exemplo n.º 4
0
        private int CalcCurrentPriority(out FeedbackLevel level)
        {
            ServerBunch <TServer> lastBunch = null;

            foreach (var serverBunch in this.servers)
            {
                if (serverBunch.Value.ServersCount != 0)
                {
                    level = serverBunch.Value.AverageWorkload;
                    if (level < this.PriorityUpThreshold)
                    {
                        return(serverBunch.Value.Priority);
                    }
                }

                lastBunch = serverBunch.Value;
            }
            level = FeedbackLevel.Highest;
            return(lastBunch != null ? lastBunch.Priority : 0);
        }