Class DefaultDataContainer<K,V>

java.lang.Object
org.infinispan.container.impl.AbstractInternalDataContainer<K,V>
org.infinispan.container.impl.DefaultDataContainer<K,V>
All Implemented Interfaces:
Iterable<InternalCacheEntry<K,V>>, DataContainer<K,V>, InternalDataContainer<K,V>

@ThreadSafe public class DefaultDataContainer<K,V> extends AbstractInternalDataContainer<K,V>
DefaultDataContainer is both eviction and non-eviction based data container.
Since:
4.0
Author:
Manik Surtani, Galder ZamarreƱo, Vladimir Blagojevic, Trustin Lee
  • Constructor Details

    • DefaultDataContainer

      public DefaultDataContainer(int concurrencyLevel)
    • DefaultDataContainer

      protected DefaultDataContainer(int concurrencyLevel, long thresholdSize, EvictionType thresholdPolicy)
    • DefaultDataContainer

      protected DefaultDataContainer(int concurrencyLevel, long thresholdSize, EntrySizeCalculator<? super K,? super V> sizeCalculator)
      Method invoked when memory policy is used. This calculator only calculates the given key and value.
      Parameters:
      concurrencyLevel -
      thresholdSize -
      sizeCalculator -
    • DefaultDataContainer

      protected DefaultDataContainer(long thresholdSize, EntrySizeCalculator<? super K,? super InternalCacheEntry<K,V>> sizeCalculator)
      Constructor that allows user to provide a size calculator that also handles the cache entry and metadata.
      Parameters:
      thresholdSize -
      sizeCalculator -
  • Method Details

    • boundedDataContainer

      public static <K, V> DefaultDataContainer<K,V> boundedDataContainer(int concurrencyLevel, long maxEntries, EvictionType thresholdPolicy)
    • boundedDataContainer

      public static <K, V> DefaultDataContainer<K,V> boundedDataContainer(int concurrencyLevel, long maxEntries, EntrySizeCalculator<? super K,? super V> sizeCalculator)
    • unBoundedDataContainer

      public static <K, V> DefaultDataContainer<K,V> unBoundedDataContainer(int concurrencyLevel)
    • getMapForSegment

      protected PeekableTouchableMap<K,V> getMapForSegment(int segment)
      Specified by:
      getMapForSegment in class AbstractInternalDataContainer<K,V>
    • getSegmentForKey

      protected int getSegmentForKey(Object key)
      Specified by:
      getSegmentForKey in class AbstractInternalDataContainer<K,V>
    • capacity

      public long capacity()
      Description copied from interface: DataContainer
      Returns the capacity of the underlying container. This is only supported if the container is bounded. An UnsupportedOperationException is thrown otherwise.
      Returns:
    • resize

      public void resize(long newSize)
      Description copied from interface: DataContainer
      Resizes the capacity of the underlying container. This is only supported if the container is bounded. An UnsupportedOperationException is thrown otherwise.
      Parameters:
      newSize - the new size
    • sizeIncludingExpired

      public int sizeIncludingExpired()
      Returns:
      count of the number of entries in the container including expired entries
    • clear

      public void clear(IntSet segments)
      Description copied from interface: InternalDataContainer
      Removes entries from the container whose key maps to one of the provided segments
      Specified by:
      clear in interface InternalDataContainer<K,V>
      Overrides:
      clear in class AbstractInternalDataContainer<K,V>
      Parameters:
      segments - segments of entries to remove
    • clear

      public void clear()
      Description copied from interface: DataContainer
      Removes all entries in the container
    • publisher

      public org.reactivestreams.Publisher<InternalCacheEntry<K,V>> publisher(IntSet segments)
    • iterator

      public Iterator<InternalCacheEntry<K,V>> iterator()
      Description copied from interface: DataContainer

      This iterator only returns entries that are not expired, however it will not remove them while doing so.

      Returns:
      iterator that doesn't produce expired entries
    • iterator

      public Iterator<InternalCacheEntry<K,V>> iterator(IntSet segments)
      Description copied from interface: InternalDataContainer
      Same as DataContainer.iterator() except that only entries that map to the provided segments are returned via the iterator. The iterator will not return expired entries.
      Parameters:
      segments - segments of entries to use
      Returns:
      iterator that returns all entries mapped to the given segments
    • spliterator

      public Spliterator<InternalCacheEntry<K,V>> spliterator()
      Description copied from interface: DataContainer

      This spliterator only returns entries that are not expired, however it will not remove them while doing so.

      Returns:
      spliterator that doesn't produce expired entries
    • spliterator

      public Spliterator<InternalCacheEntry<K,V>> spliterator(IntSet segments)
      Description copied from interface: InternalDataContainer
      Same as DataContainer.spliterator() except that only entries that map to the provided segments are returned via this spliterator. The spliterator will not return expired entries.
      Parameters:
      segments - segments of entries to return
      Returns:
      spliterator containing entries mapping to those segments that aren't expired
    • spliteratorIncludingExpired

      public Spliterator<InternalCacheEntry<K,V>> spliteratorIncludingExpired()
      Description copied from interface: DataContainer
      Same as DataContainer.spliterator() except that is also returns expired entries.
      Returns:
      spliterator that returns all entries including expired ones
    • spliteratorIncludingExpired

      public Spliterator<InternalCacheEntry<K,V>> spliteratorIncludingExpired(IntSet segments)
      Description copied from interface: InternalDataContainer
      Same as DataContainer.spliteratorIncludingExpired() except that only entries that map to the provided segments are returned via this spliterator. The spliterator will return expired entries as well.
      Parameters:
      segments - segments of entries to use
      Returns:
      spliterator containing entries mapping to those segments that could be expired
    • iteratorIncludingExpired

      public Iterator<InternalCacheEntry<K,V>> iteratorIncludingExpired()
      Description copied from interface: DataContainer
      Same as DataContainer.iterator() except that is also returns expired entries.
      Returns:
      iterator that returns all entries including expired ones
    • iteratorIncludingExpired

      public Iterator<InternalCacheEntry<K,V>> iteratorIncludingExpired(IntSet segments)
      Description copied from interface: InternalDataContainer
      Same as DataContainer.iteratorIncludingExpired() except that only entries that map to the provided segments are returned via the iterator. The iterator can return expired entries.
      Parameters:
      segments - segments of entries to use
      Returns:
      iterator that returns all entries mapped to the given segments that could be expired
    • evictionSize

      public long evictionSize()
      Description copied from interface: DataContainer
      Returns how large the eviction size is currently. This is only supported if the container is bounded. An UnsupportedOperationException is thrown otherwise. This value will always be lower than the value returned from DataContainer.capacity()
      Returns:
      how large the counted eviction is
    • addSegments

      public void addSegments(IntSet segments)
      Description copied from interface: InternalDataContainer
      Sets what segments this data container should be using. Already associated segments are unaffected by this and takes a union of existing and new segments.
      Parameters:
      segments - segments to associate with this container
    • removeSegments

      public void removeSegments(IntSet segments)
      Description copied from interface: InternalDataContainer
      Removes and un-associates the given segments. This will notify any listeners registered via InternalDataContainer.addRemovalListener(Consumer) of entries that were removed due to no longer being associated with this container. There is no guarantee if the consumer is invoked once or multiple times for a given group of segments and could be in any order.

      When this method is invoked an implementation is free to remove any entries that don't map to segments currently associated with this container. Note that entries that were removed due to their segments never being associated with this container do not notify listeners registered via InternalDataContainer.addRemovalListener(Consumer).

      Parameters:
      segments - segments that should no longer be associated with this container
    • cleanUp

      public void cleanUp()
      Description copied from interface: InternalDataContainer
      Method used to cleanup any pending data, such as evictions
    • forEachSegment

      public void forEachSegment(ObjIntConsumer<PeekableTouchableMap<K,V>> segmentMapConsumer)
      Description copied from interface: InternalDataContainer
      Performs the given consumer for each map inside this container, once for each segment until all maps have been processed or the action throws an exception. Exceptions thrown by the action are relayed to the caller. The consumer will be provided with the segment as well that maps to the given segment.
      Parameters:
      segmentMapConsumer - The action to be performed for each element map