Пример #1
0
        /// <summary>Evict expired entries.</summary>
        private void EvictExpiredEntries()
        {
            long now = clock.CurrentTime();

            for (int i = 0; i < EvictionLimit; i++)
            {
                LightWeightCache.Entry peeked = queue.Peek();
                if (peeked == null || !IsExpired(peeked, now))
                {
                    return;
                }
                E evicted = Evict();
                Preconditions.CheckState(evicted == peeked);
            }
        }
Пример #2
0
        public override E Get(K key)
        {
            E entry = base.Get(key);

            if (entry != null)
            {
                if (accessExpirationPeriod > 0)
                {
                    // update expiration time
                    LightWeightCache.Entry existing = (LightWeightCache.Entry)entry;
                    Preconditions.CheckState(queue.Remove(existing));
                    SetExpirationTime(existing, accessExpirationPeriod);
                    queue.Offer(existing);
                }
            }
            return(entry);
        }
Пример #3
0
        public override E Put(E entry)
        {
            if (!(entry is LightWeightCache.Entry))
            {
                throw new HadoopIllegalArgumentException("!(entry instanceof Entry), entry.getClass()="
                                                         + entry.GetType());
            }
            EvictExpiredEntries();
            E existing = base.Put(entry);

            if (existing != null)
            {
                queue.Remove(existing);
            }
            LightWeightCache.Entry e = (LightWeightCache.Entry)entry;
            SetExpirationTime(e, creationExpirationPeriod);
            queue.Offer(e);
            EvictEntries();
            return(existing);
        }
Пример #4
0
 internal virtual bool IsExpired(LightWeightCache.Entry e, long now)
 {
     return(now > e.GetExpirationTime());
 }
Пример #5
0
 internal virtual void SetExpirationTime(LightWeightCache.Entry e, long expirationPeriod
                                         )
 {
     e.SetExpirationTime(clock.CurrentTime() + expirationPeriod);
 }