Package net.sf.ehcache.store.disk
Class DiskStore
- java.lang.Object
-
- net.sf.ehcache.store.AbstractStore
-
- net.sf.ehcache.store.disk.DiskStore
-
- All Implemented Interfaces:
AuthoritativeTier,Store,StripedReadWriteLockProvider
public final class DiskStore extends AbstractStore implements StripedReadWriteLockProvider, AuthoritativeTier
Implements a persistent-to-disk store.All new elements are automatically scheduled for writing to disk.
- Author:
- Chris Dennis, Ludovic Orban
-
-
Field Summary
-
Fields inherited from class net.sf.ehcache.store.AbstractStore
attributeExtractors, searchManager
-
Fields inherited from interface net.sf.ehcache.store.Store
CLUSTER_COHERENT, NODE_COHERENT
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanbufferFull()Some store types, such as the disk stores can fill their write buffers if puts come in too fast.voidchangeDiskCapacity(int newCapacity)Change the disk capacity, in number of elementsvoidclearFaultedBit()Marks all entries has flushed (i.e.booleancontainsKey(java.lang.Object key)A check to see if a key is in the Store.booleancontainsKeyInMemory(java.lang.Object key)A check to see if a key is in the Store and is currently held in memory.booleancontainsKeyOffHeap(java.lang.Object key)A check to see if a key is in the Store and is currently held off-heap.booleancontainsKeyOnDisk(java.lang.Object key)A check to see if a key is in the Store and is currently held on disk.static DiskStorecreate(Cache cache)Creates a persitent-to-disk store for the given cache, using the given disk path.static DiskStorecreate(Ehcache cache, Pool onHeapPool, Pool onDiskPool)Creates a persitent-to-disk store for the given cache, using the given disk path.static StorecreateCacheStore(Ehcache cache, Pool onHeapPool, Pool onDiskPool)Create a DiskBackedMemoryStore instanceStripedReadWriteLockcreateStripedReadWriteLock()Will create a StripedReadWriteLock always using the same spreading functionvoiddispose()Prepares for shutdown.booleanevict(java.lang.Object key, DiskStorageFactory.DiskSubstitute substitute)Remove the matching mapping.ElementevictElement(java.lang.Object key, DiskStorageFactory.DiskSubstitute substitute)Remove the matching mapping.voidexpireElements()Expire all elements.Elementfault(java.lang.Object key, boolean updateStats)Marks the entry as not evictable and returns it atomicallybooleanfault(java.lang.Object key, net.sf.ehcache.store.disk.DiskStorageFactory.Placeholder expect, DiskStorageFactory.DiskMarker fault)Atomically switch (CAS) theexpectrepresentation of this element for thefaultrepresentation.voidflush()Flush elements to persistent store.voidflush(Element element)This marks the entry as evictable again and updates relevant access statsElementget(java.lang.Object key)Gets an item from the cache.java.io.FilegetDataFile()Return a reference to the data file backing this store.java.io.FilegetIndexFile()Return a reference to the index file for this store.PolicygetInMemoryEvictionPolicy()intgetInMemorySize()Returns the current local in-memory store sizelonggetInMemorySizeInBytes()Gets the size of the in-memory portion of the store, in bytes.java.lang.ObjectgetInternalContext()This should not be used, and will generally return nulljava.util.ListgetKeys()Gets an Array of the keys for all elements in the disk store.java.lang.ObjectgetMBean()Optional implementation specific MBean exposed by the store.intgetOffHeapSize()Returns the current local off-heap store sizelonggetOffHeapSizeInBytes()Gets the size of the off-heap portion of the store, in bytes.intgetOnDiskSize()Returns the current local on-disk store sizelonggetOnDiskSizeInBytes()Gets the size of the on-disk portion of the store, in bytes.ElementgetQuiet(java.lang.Object key)Gets anElementfrom the Store, without updating statisticsjava.util.List<DiskStorageFactory.DiskSubstitute>getRandomSample(ElementSubstituteFilter factory, int sampleSize, java.lang.Object keyHint)Select a random sample of elements generated by the supplied factory.intgetSize()Returns the current local store sizeStatusgetStatus()Returns the cache status.intgetTerracottaClusteredSize()Returns the current Terracotta clustered store sizebooleanisFaulted(java.lang.Object key)Verifies if the mapping for a key is marked as faultedjava.util.Set<java.lang.Object>keySet()Get a set view of the keys in this storebooleanput(Element element)Puts an item into the store.booleanputFaulted(Element element)Stupid "implicit" contract in tests that dictates that entries put, will be in highest tier!ElementputIfAbsent(Element element)Put an element in the store if no element is currently mapped to the elements key.booleanputRawIfAbsent(java.lang.Object key, DiskStorageFactory.DiskMarker encoded)Put the given encoded element directly into the storebooleanputWithWriter(Element element, CacheWriterManager writerManager)Puts an item into the store and the cache writer manager in an atomic operationElementremove(java.lang.Object key)Removes an item from the cache.voidremoveAll()Remove all of the elements from the store.ElementremoveElement(Element element, ElementValueComparator comparator)Remove the Element mapped to the key for the supplied element if the value of the supplied Element is equal to the value of the cached Element.ElementremoveWithWriter(java.lang.Object key, CacheWriterManager writerManager)Removes an item from the store and the cache writer manager in an atomic operation.Elementreplace(Element element)Replace the cached element only if an Element is currently cached for this keybooleanreplace(Element old, Element element, ElementValueComparator comparator)Replace the cached element only if the value of the current Element is equal to the value of the supplied old Element.voidsetInMemoryEvictionPolicy(Policy policy)Sets the eviction policy strategy.java.lang.ObjectunretrievedGet(java.lang.Object key)Return the unretrieved (undecoded) value for this key-
Methods inherited from class net.sf.ehcache.store.AbstractStore
addStoreListener, executeQuery, getAll, getAllQuiet, getEventListenerList, getSearchAttribute, getSearchAttributes, hasAbortedSizeOf, isCacheCoherent, isClusterCoherent, isNodeCoherent, putAll, recalculateSize, removeAll, removeStoreListener, setAttributeExtractors, setNodeCoherent, waitUntilClusterCoherent
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.sf.ehcache.store.Store
addStoreListener, executeQuery, getAll, getAllQuiet, getSearchAttribute, getSearchAttributes, hasAbortedSizeOf, isCacheCoherent, isClusterCoherent, isNodeCoherent, putAll, recalculateSize, removeAll, removeStoreListener, setAttributeExtractors, setNodeCoherent, waitUntilClusterCoherent
-
-
-
-
Method Detail
-
create
public static DiskStore create(Ehcache cache, Pool onHeapPool, Pool onDiskPool)
Creates a persitent-to-disk store for the given cache, using the given disk path.- Parameters:
cache- cache that fronts this storeonHeapPool- pool to track heap usageonDiskPool- pool to track disk usage- Returns:
- a fully initialized store
-
create
public static DiskStore create(Cache cache)
Creates a persitent-to-disk store for the given cache, using the given disk path. Heap and disk usage are not tracked by the returned store.- Parameters:
cache- cache that fronts this store- Returns:
- a fully initialized store
-
createCacheStore
public static Store createCacheStore(Ehcache cache, Pool onHeapPool, Pool onDiskPool)
Create a DiskBackedMemoryStore instance- Parameters:
cache- the cacheonHeapPool- the pool tracking on-heap usageonDiskPool- the pool tracking on-disk usage- Returns:
- a DiskBackedMemoryStore instance
-
createStripedReadWriteLock
public StripedReadWriteLock createStripedReadWriteLock()
Will create a StripedReadWriteLock always using the same spreading function- Specified by:
createStripedReadWriteLockin interfaceStripedReadWriteLockProvider- Returns:
- a newly created StripedReadWriteLock
-
fault
public Element fault(java.lang.Object key, boolean updateStats)
Description copied from interface:AuthoritativeTierMarks the entry as not evictable and returns it atomically- Specified by:
faultin interfaceAuthoritativeTier- Returns:
-
putFaulted
public boolean putFaulted(Element element)
Description copied from interface:AuthoritativeTierStupid "implicit" contract in tests that dictates that entries put, will be in highest tier!- Specified by:
putFaultedin interfaceAuthoritativeTier- Returns:
-
flush
public void flush(Element element)
Description copied from interface:AuthoritativeTierThis marks the entry as evictable again and updates relevant access stats- Specified by:
flushin interfaceAuthoritativeTier
-
isFaulted
public boolean isFaulted(java.lang.Object key)
Verifies if the mapping for a key is marked as faulted- Parameters:
key- the key to check the mapping for- Returns:
- true if faulted, false otherwise (including no mapping)
-
changeDiskCapacity
public void changeDiskCapacity(int newCapacity)
Change the disk capacity, in number of elements- Parameters:
newCapacity- the new max elements on disk
-
bufferFull
public boolean bufferFull()
Some store types, such as the disk stores can fill their write buffers if puts come in too fast. The thread will wait for a short time before checking again.- Specified by:
bufferFullin interfaceStore- Returns:
- true if the store write buffer is backed up.
-
containsKeyInMemory
public boolean containsKeyInMemory(java.lang.Object key)
A check to see if a key is in the Store and is currently held in memory.- Specified by:
containsKeyInMemoryin interfaceStore- Parameters:
key- The Element key- Returns:
- true if found. No check is made to see if the Element is expired.
-
containsKeyOffHeap
public boolean containsKeyOffHeap(java.lang.Object key)
A check to see if a key is in the Store and is currently held off-heap.- Specified by:
containsKeyOffHeapin interfaceStore- Parameters:
key- The Element key- Returns:
- true if found. No check is made to see if the Element is expired.
-
containsKeyOnDisk
public boolean containsKeyOnDisk(java.lang.Object key)
A check to see if a key is in the Store and is currently held on disk.- Specified by:
containsKeyOnDiskin interfaceStore- Parameters:
key- The Element key- Returns:
- true if found. No check is made to see if the Element is expired.
-
expireElements
public void expireElements()
Expire all elements.- Specified by:
expireElementsin interfaceStore
-
flush
public void flush() throws java.io.IOExceptionFlush elements to persistent store.
-
getInMemoryEvictionPolicy
public Policy getInMemoryEvictionPolicy()
- Specified by:
getInMemoryEvictionPolicyin interfaceStore- Returns:
- the current eviction policy. This may not be the configured policy, if it has been dynamically set.
- See Also:
Store.setInMemoryEvictionPolicy(Policy)
-
getInMemorySize
public int getInMemorySize()
Returns the current local in-memory store size- Specified by:
getInMemorySizein interfaceStore- Returns:
- the count of the Elements in the Store and in-memory on the local machine
-
getInMemorySizeInBytes
public long getInMemorySizeInBytes()
Gets the size of the in-memory portion of the store, in bytes.This method may be expensive to run, depending on implementation. Implementers may choose to return an approximate size.
- Specified by:
getInMemorySizeInBytesin interfaceStore- Returns:
- the approximate in-memory size of the store in bytes
-
getOffHeapSize
public int getOffHeapSize()
Returns the current local off-heap store size- Specified by:
getOffHeapSizein interfaceStore- Returns:
- the count of the Elements in the Store and off-heap on the local machine
-
getOffHeapSizeInBytes
public long getOffHeapSizeInBytes()
Gets the size of the off-heap portion of the store, in bytes.- Specified by:
getOffHeapSizeInBytesin interfaceStore- Returns:
- the approximate off-heap size of the store in bytes
-
getOnDiskSize
public int getOnDiskSize()
Returns the current local on-disk store size- Specified by:
getOnDiskSizein interfaceStore- Returns:
- the count of the Elements in the Store and on-disk on the local machine
-
getOnDiskSizeInBytes
public long getOnDiskSizeInBytes()
Gets the size of the on-disk portion of the store, in bytes.- Specified by:
getOnDiskSizeInBytesin interfaceStore- Returns:
- the on-disk size of the store in bytes
-
getTerracottaClusteredSize
public int getTerracottaClusteredSize()
Returns the current Terracotta clustered store size- Specified by:
getTerracottaClusteredSizein interfaceStore- Returns:
- the count of the Elements in the Store across the cluster
-
setInMemoryEvictionPolicy
public void setInMemoryEvictionPolicy(Policy policy)
Sets the eviction policy strategy. The Store will use a policy at startup. The store may allow changing the eviction policy strategy dynamically. Otherwise implementations will throw an exception if this method is called.- Specified by:
setInMemoryEvictionPolicyin interfaceStore- Parameters:
policy- the new policy
-
getDataFile
public java.io.File getDataFile()
Return a reference to the data file backing this store.- Returns:
- a reference to the data file backing this store.
-
getIndexFile
public java.io.File getIndexFile()
Return a reference to the index file for this store.- Returns:
- a reference to the index file for this store.
-
getMBean
public java.lang.Object getMBean()
Optional implementation specific MBean exposed by the store.
-
put
public boolean put(Element element)
Puts an item into the store.
-
putWithWriter
public boolean putWithWriter(Element element, CacheWriterManager writerManager)
Puts an item into the store and the cache writer manager in an atomic operation- Specified by:
putWithWriterin interfaceStore- Returns:
- true if this is a new put for the key or element is null. Returns false if it was an update.
-
get
public Element get(java.lang.Object key)
Gets an item from the cache.
-
getQuiet
public Element getQuiet(java.lang.Object key)
Gets anElementfrom the Store, without updating statistics
-
unretrievedGet
public java.lang.Object unretrievedGet(java.lang.Object key)
Return the unretrieved (undecoded) value for this key- Parameters:
key- key to lookup- Returns:
- Element or ElementSubstitute
-
putRawIfAbsent
public boolean putRawIfAbsent(java.lang.Object key, DiskStorageFactory.DiskMarker encoded) throws java.lang.IllegalArgumentExceptionPut the given encoded element directly into the store- Parameters:
key- the key of the elementencoded- the encoded element- Returns:
- true if the encoded element was installed
- Throws:
java.lang.IllegalArgumentException- if the supplied key is already present
-
getKeys
public java.util.List getKeys()
Gets an Array of the keys for all elements in the disk store.
-
keySet
public java.util.Set<java.lang.Object> keySet()
Get a set view of the keys in this store- Returns:
- a set view of the keys in this store
-
remove
public Element remove(java.lang.Object key)
Removes an item from the cache.
-
removeWithWriter
public Element removeWithWriter(java.lang.Object key, CacheWriterManager writerManager)
Removes an item from the store and the cache writer manager in an atomic operation.- Specified by:
removeWithWriterin interfaceStore
-
removeAll
public void removeAll()
Remove all of the elements from the store.If there are registered
CacheEventListeners they are notified of the expiry or removal of theElementas each is removed.
-
clearFaultedBit
public void clearFaultedBit()
Marks all entries has flushed (i.e. not faulted)
-
getSize
public int getSize()
Returns the current local store size
-
getStatus
public Status getStatus()
Returns the cache status.
-
containsKey
public boolean containsKey(java.lang.Object key)
A check to see if a key is in the Store.- Specified by:
containsKeyin interfaceStore- Parameters:
key- The Element key- Returns:
- true if found. No check is made to see if the Element is expired. 1.2
-
getInternalContext
public java.lang.Object getInternalContext()
This should not be used, and will generally return null- Specified by:
getInternalContextin interfaceStore- Returns:
- some internal context (probably null)
-
putIfAbsent
public Element putIfAbsent(Element element) throws java.lang.NullPointerException
Put an element in the store if no element is currently mapped to the elements key.- Specified by:
putIfAbsentin interfaceStore- Parameters:
element- element to be added- Returns:
- the element previously cached for this key, or null if none.
- Throws:
java.lang.NullPointerException- if the element is null, or has a null key
-
removeElement
public Element removeElement(Element element, ElementValueComparator comparator) throws java.lang.NullPointerException
Remove the Element mapped to the key for the supplied element if the value of the supplied Element is equal to the value of the cached Element. This is a CAS operation. It is consistent even against a distributed cache that is not coherent. If the old value is stale when this operation is attempted the remove does not take place.- Specified by:
removeElementin interfaceStore- Parameters:
element- Element to be removedcomparator- ElementValueComparator to use to compare elements- Returns:
- the Element removed or null if no Element was removed
- Throws:
java.lang.NullPointerException- if the element is null, or has a null key
-
replace
public boolean replace(Element old, Element element, ElementValueComparator comparator) throws java.lang.NullPointerException, java.lang.IllegalArgumentException
Replace the cached element only if the value of the current Element is equal to the value of the supplied old Element.- Specified by:
replacein interfaceStore- Parameters:
old- Element to be test againstelement- Element to be cachedcomparator- ElementValueComparator to use to compare elements- Returns:
- true is the Element was replaced
- Throws:
java.lang.NullPointerException- if the either Element is null or has a null keyjava.lang.IllegalArgumentException- if the two Element keys are non-null but not equal
-
replace
public Element replace(Element element) throws java.lang.NullPointerException
Replace the cached element only if an Element is currently cached for this key
-
fault
public boolean fault(java.lang.Object key, net.sf.ehcache.store.disk.DiskStorageFactory.Placeholder expect, DiskStorageFactory.DiskMarker fault)Atomically switch (CAS) theexpectrepresentation of this element for thefaultrepresentation.A successful switch will return
true, and free the replaced element/element-proxy. A failed switch will returnfalseand free the element/element-proxy which was not installed.- Parameters:
key- key to which this element (proxy) is mappedexpect- element (proxy) expectedfault- element (proxy) to install- Returns:
trueiffaultwas installed
-
evict
public boolean evict(java.lang.Object key, DiskStorageFactory.DiskSubstitute substitute)Remove the matching mapping. The evict method does referential comparison of the unretrieved substitute against the argument value.- Parameters:
key- key to match againstsubstitute- optional value to match against- Returns:
trueon a successful remove
-
evictElement
public Element evictElement(java.lang.Object key, DiskStorageFactory.DiskSubstitute substitute)
Remove the matching mapping. The evict method does referential comparison of the unretrieved substitute against the argument value.- Parameters:
key- key to match againstsubstitute- optional value to match against- Returns:
- the evicted element on a successful remove
-
getRandomSample
public java.util.List<DiskStorageFactory.DiskSubstitute> getRandomSample(ElementSubstituteFilter factory, int sampleSize, java.lang.Object keyHint)
Select a random sample of elements generated by the supplied factory.- Parameters:
factory- generator of the given typesampleSize- minimum number of elements to returnkeyHint- a key on which we are currently working- Returns:
- list of sampled elements/element substitute
-
-