/// <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); } }
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); }
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); }
internal virtual bool IsExpired(LightWeightCache.Entry e, long now) { return(now > e.GetExpirationTime()); }
internal virtual void SetExpirationTime(LightWeightCache.Entry e, long expirationPeriod ) { e.SetExpirationTime(clock.CurrentTime() + expirationPeriod); }