Class SplitStorageEngine<K,V>

java.lang.Object
org.terracotta.offheapstore.storage.SplitStorageEngine<K,V>
Type Parameters:
K - key type handled by this engine
V - value type handled by this engine
All Implemented Interfaces:
StorageEngine<K,V>
Direct Known Subclasses:
PersistentSplitStorageEngine

public class SplitStorageEngine<K,V> extends Object implements StorageEngine<K,V>
A StorageEngine composed of two independent engines, one for the keys, one for the values.
  • Field Details

  • Constructor Details

    • SplitStorageEngine

      public SplitStorageEngine(HalfStorageEngine<? super K> keyStorageEngine, HalfStorageEngine<? super V> valueStorageEngine)
      Creates a composite storage engine, with independent key and value engines.
      Parameters:
      keyStorageEngine - storage engine for the keys
      valueStorageEngine - storage engine for the values
  • Method Details

    • createFactory

      public static <K,V> Factory<SplitStorageEngine<K,V>> createFactory(Factory<? extends HalfStorageEngine<K>> keyFactory, Factory<? extends HalfStorageEngine<V>> valueFactory)
    • writeMapping

      public Long writeMapping(K key, V value, int hash, int metadata)
      Description copied from interface: StorageEngine
      Converts the supplied key and value objects into their encoded form.
      Specified by:
      writeMapping in interface StorageEngine<K,V>
      Parameters:
      key - a key object
      value - a value object
      hash - the key hash
      metadata - the metadata bits
      Returns:
      the encoded mapping
    • attachedMapping

      public void attachedMapping(long encoding, int hash, int metadata)
      Specified by:
      attachedMapping in interface StorageEngine<K,V>
    • freeMapping

      public void freeMapping(long encoding, int hash, boolean removal)
      Description copied from interface: StorageEngine
      Called to indicate that the associated encoded value is no longer needed.

      This call can be used to free any associated resources tied to the lifecycle of the supplied encoded value.

      Specified by:
      freeMapping in interface StorageEngine<K,V>
      Parameters:
      encoding - encoded value
      hash - hash of the freed mapping
      removal - marks removal from a map
    • readValue

      public V readValue(long encoding)
      Description copied from interface: StorageEngine
      Converts the supplied encoded value into its correct object form.
      Specified by:
      readValue in interface StorageEngine<K,V>
      Parameters:
      encoding - encoded value
      Returns:
      a decoded value object
    • equalsValue

      public boolean equalsValue(Object value, long encoding)
      Description copied from interface: StorageEngine
      Called to determine the equality of the given Java object value against the given encoded form.

      Simple implementations will probably perform a decode on the given encoded form in order to do a regular Object.equals(Object) comparison. This method is provided to allow implementations to optimize this comparison if possible.

      Specified by:
      equalsValue in interface StorageEngine<K,V>
      Parameters:
      value - a value object
      encoding - encoded value
      Returns:
      true if the value and the encoding are equal
    • readKey

      public K readKey(long encoding, int hashCode)
      Description copied from interface: StorageEngine
      Converts the supplied encoded key into its correct object form.
      Specified by:
      readKey in interface StorageEngine<K,V>
      Parameters:
      encoding - encoded key
      hashCode - hash-code of the decoded key
      Returns:
      a decoded key object
    • equalsKey

      public boolean equalsKey(Object key, long encoding)
      Description copied from interface: StorageEngine
      Called to determine the equality of the given object against the given encoded form.

      Simple implementations will probably perform a decode on the given encoded form in order to do a regular Object.equals(Object) comparison. This method is provided to allow implementations to optimize this comparison if possible.

      Specified by:
      equalsKey in interface StorageEngine<K,V>
      Parameters:
      key - a key object
      encoding - encoded value
      Returns:
      true if the key and the encoding are equal
    • clear

      public void clear()
      Description copied from interface: StorageEngine
      Called to indicate that all keys and values are now free.
      Specified by:
      clear in interface StorageEngine<K,V>
    • getAllocatedMemory

      public long getAllocatedMemory()
      Description copied from interface: StorageEngine
      Returns a measure of the amount of memory allocated for this storage engine.
      Specified by:
      getAllocatedMemory in interface StorageEngine<K,V>
      Returns:
      memory allocated for this engine in bytes
    • getOccupiedMemory

      public long getOccupiedMemory()
      Description copied from interface: StorageEngine
      Returns a measure of the amount of memory consumed by this storage engine.
      Specified by:
      getOccupiedMemory in interface StorageEngine<K,V>
      Returns:
      memory occupied by this engine in bytes
    • getVitalMemory

      public long getVitalMemory()
      Description copied from interface: StorageEngine
      Returns a measure of the amount of vital memory allocated for this storage engine.
      Specified by:
      getVitalMemory in interface StorageEngine<K,V>
      Returns:
      vital memory allocated for this engine in bytes
    • getDataSize

      public long getDataSize()
      Description copied from interface: StorageEngine
      Returns a measure of the total size of the keys and values stored in this storage engine.
      Specified by:
      getDataSize in interface StorageEngine<K,V>
      Returns:
      size of the stored keys and values in bytes
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • invalidateCache

      public void invalidateCache()
      Description copied from interface: StorageEngine
      Invalidate any local key/value caches.

      This is called to indicate the termination of a map write "phase". Caching is permitted within a write operation (i.e. to cache around allocation failures during eviction processes).

      Specified by:
      invalidateCache in interface StorageEngine<K,V>
    • bind

      public void bind(StorageEngine.Owner owner)
      Specified by:
      bind in interface StorageEngine<K,V>
    • destroy

      public void destroy()
      Specified by:
      destroy in interface StorageEngine<K,V>
    • shrink

      public boolean shrink()
      Specified by:
      shrink in interface StorageEngine<K,V>
    • valueEncoding

      public static int valueEncoding(long encoding)
    • keyEncoding

      public static int keyEncoding(long encoding)
    • encoding

      public static long encoding(int keyEncoding, int valueEncoding)