Пример #1
0
        /// <summary>
        /// Based on the time it took a request to run, we adjust the priority
        /// of future requests sent by an object
        /// </summary>
        /// <param name="req"></param>
        private void AdjustObjectPriority(HttpRequestObject req)
        {
            Amib.Threading.WorkItemPriority prio = GetObjectPriority(req.SogID);

            if (req.RequestDuration >= SLOW_SCRIPT_TIME)
            {
                if (prio > Amib.Threading.WorkItemPriority.Lowest)
                {
                    prio--;
                    SetObjectPriority(req.SogID, prio);
                }
            }
            else if (req.RequestDuration < NORMAL_SCRIPT_TIME)
            {
                if (prio < Amib.Threading.WorkItemPriority.Normal)
                {
                    prio++;
                    SetObjectPriority(req.SogID, prio);
                }
            }
            else
            {
                //just ping the timestamp if it exists
                UpdatePriorityTimestamp(req.SogID);
            }

            //also if this request was low priority, maintain the counts
            --m_numLowPriorityQueued;
        }
Пример #2
0
        private void SetObjectPriority(UUID sogId, Amib.Threading.WorkItemPriority newPrio)
        {
            TimestampedItem <Amib.Threading.WorkItemPriority> prio;

            if (m_objectPriorities.TryGetValue(sogId, out prio))
            {
                prio.Item = newPrio;
                prio.ResetTimestamp();
            }
            else
            {
                m_objectPriorities[sogId] = new TimestampedItem <Amib.Threading.WorkItemPriority>(newPrio);
            }
        }