+1 to move it to "HDFS feature branch". I'd rather have a eviction class(es) specific to HDFS.
On Fri, Mar 18, 2016 at 4:03 PM, Dan Smith <[email protected]> wrote: > While looking to the HDFS related changes, I noticed that a new custom > eviction feature was also added related to those changes. Unlike the > already existing CustomExpiry which returns an expiration time for a single > key, this takes an EvictionCriteria that is polled periodically and returns > return a list of keys to evict. > > I noticed we currently have no tests for this so I'm not sure if it > actually works or not. Is this something we actually want in geode or > should it get removed? My inclination is to move to the HDFS branch, > asssuming we create one, since it came in with that functionality. And then > not merge it back to develop until there are tests associated with it. > > -Dan > > /** > * Set custom {@link EvictionCriteria} for the region with start time and > * interval of evictor task to be run in milliseconds, or evict incoming > rows > * in case both start and frequency are specified as zero. > * > * @param criteria > * an {@link EvictionCriteria} to be used for eviction for HDFS > * persistent regions > * @param start > * the start time at which periodic evictor task should be first > * fired to apply the provided {@link EvictionCriteria}; if this > is > * zero then current time is used for the first invocation of > evictor > * @param interval > * the periodic frequency at which to run the evictor task after > the > * initial start; if this is if both start and frequency are > zero > * then {@link EvictionCriteria} is applied on incoming > insert/update > * to determine whether it is to be retained > */ > public RegionFactory<K, V> setCustomEvictionAttributes( > EvictionCriteria<K, V> criteria, long start, long interval) { > > /** > * Interface implemented by an EVICTION BY CRITERIA of > * {@link CustomEvictionAttributes}. This will be invoked by periodic > evictor > * task that will get the keys to be evicted using this and then destroy > from > * the region to which this is attached. > * > * @author swale > * @since gfxd 1.0 > */ > public interface EvictionCriteria<K, V> { > > /** > * Get the (key, routing object) of the entries to be evicted from region > * satisfying EVICTION BY CRITERIA at this point of time. > * <p> > * The returned Map.Entry object by the Iterator may be reused internally > so > * caller must extract the key, routing object from the entry on each > * iteration. > */ > Iterator<Map.Entry<K, Object>> getKeysToBeEvicted(long currentMillis, > Region<K, V> region); > > /** > * Last moment check if an entry should be evicted or not applying the > * EVICTION BY CRITERIA again under the region entry lock in case the > entry > * has changed after the check in {@link #getKeysToBeEvicted}. > */ > boolean doEvict(EntryEvent<K, V> event); > > /** > * Return true if this eviction criteria is equivalent to the other one. > This > * is used to ensure that custom eviction is configured identically on > all the > * nodes of a cluster hosting the region to which this eviction criteria > has > * been attached. > */ > boolean isEquivalent(EvictionCriteria<K, V> other); > } > -- ~/William
