Class ClusterExpirationManager<K,V>
- java.lang.Object
-
- org.infinispan.expiration.impl.ExpirationManagerImpl<K,V>
-
- org.infinispan.expiration.impl.ClusterExpirationManager<K,V>
-
- Type Parameters:
K-V-
- All Implemented Interfaces:
ExpirationManager<K,V>,InternalExpirationManager<K,V>
- Direct Known Subclasses:
TxClusterExpirationManager
@ThreadSafe public class ClusterExpirationManager<K,V> extends ExpirationManagerImpl<K,V>
Allows for cluster based expirations to occur. This provides guarantees that when an entry is expired that it will expire that entry across the entire cluster at once. This requires obtaining the lock for said entry before expiration is performed. Since expiration can occur without holding onto the lock it is possible for an expiration to occur immediately after a value has been updated. This can cause a premature expiration to occur. Attempts are made to prevent this by using the expired entry's value and lifespan to limit this expiration so it only happens in a smaller amount of cases.Cache stores however do not supply the value or metadata information which means if an entry is purged from the cache store that it will forcibly remove the value even if a concurrent write updated it just before. This will be addressed by future SPI changes to the cache store.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.infinispan.expiration.impl.InternalExpirationManager
InternalExpirationManager.ExpirationConsumer<T,U>
-
-
Field Summary
Fields Modifier and Type Field Description protected AdvancedCache<K,V>cacheprotected ComponentRef<AdvancedCache<K,V>>cacheRefprotected DistributionManagerdistributionManagerprotected RpcManagerrpcManager-
Fields inherited from class org.infinispan.expiration.impl.ExpirationManagerImpl
cacheNotifier, cf, cfRef, componentRegistry, configuration, dataContainer, enabled, executor, expirationTask, expiring, invokerRef, keyPartitioner, persistenceManager, timeService
-
-
Constructor Summary
Constructors Constructor Description ClusterExpirationManager()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected CompletionStage<Boolean>checkExpiredMaxIdle(InternalCacheEntry ice, int segment)Response is whether the value should be treated as expired.CompletableFuture<Boolean>entryExpiredInMemory(InternalCacheEntry<K,V> entry, long currentTime, boolean isWrite)This should be invoked passing in an entry that is now expired.booleanentryExpiredInMemoryFromIteration(InternalCacheEntry<K,V> entry, long currentTime)This method is very similar toInternalExpirationManager.entryExpiredInMemory(InternalCacheEntry, long, boolean)except that it does the bare minimum when an entry expired to guarantee if the entry is valid or not.CompletionStage<Void>handleInStoreExpirationInternal(K key)This is to be invoked when a store entry expires.CompletionStage<Void>handleInStoreExpirationInternal(MarshallableEntry<K,V> marshalledEntry)This is to be invoked when a store entry expires and the value and/or metadata is available to be used.voidprocessExpiration()Processes the expiration event queue.voidstart()-
Methods inherited from class org.infinispan.expiration.impl.ExpirationManagerImpl
addInternalListener, handleInMemoryExpiration, handlePossibleExpiration, isEnabled, removeInternalListener, stop
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.infinispan.expiration.ExpirationManager
registerWriteIncoming, unregisterWrite
-
Methods inherited from interface org.infinispan.expiration.impl.InternalExpirationManager
handleInStoreExpiration, handleInStoreExpiration
-
-
-
-
Field Detail
-
cacheRef
protected ComponentRef<AdvancedCache<K,V>> cacheRef
-
rpcManager
protected RpcManager rpcManager
-
distributionManager
protected DistributionManager distributionManager
-
cache
protected AdvancedCache<K,V> cache
-
-
Method Detail
-
start
public void start()
- Overrides:
startin classExpirationManagerImpl<K,V>
-
processExpiration
public void processExpiration()
Description copied from interface:ExpirationManagerProcesses the expiration event queue.- Specified by:
processExpirationin interfaceExpirationManager<K,V>- Overrides:
processExpirationin classExpirationManagerImpl<K,V>
-
entryExpiredInMemory
public CompletableFuture<Boolean> entryExpiredInMemory(InternalCacheEntry<K,V> entry, long currentTime, boolean isWrite)
Description copied from interface:InternalExpirationManagerThis should be invoked passing in an entry that is now expired. This method may attempt to lock this key to preserve atomicity. This method should be invoked when an entry was read via get but found to be expired.This method returns true if the entry was removed due to expiration or false if the entry was not removed due to expiration
If hasLock is true, this method assumes that the caller has the lock for the key and it must allow the expiration to occur, ie. returned CompletableFuture has completed, before the lock is released. Failure to do so may cause inconsistency in data.
- Specified by:
entryExpiredInMemoryin interfaceInternalExpirationManager<K,V>- Overrides:
entryExpiredInMemoryin classExpirationManagerImpl<K,V>- Parameters:
entry- the entry that has expiredcurrentTime- the current time when it expiredisWrite- if the expiration was found during a write operation- Returns:
- if this entry actually expired or not
-
entryExpiredInMemoryFromIteration
public boolean entryExpiredInMemoryFromIteration(InternalCacheEntry<K,V> entry, long currentTime)
Description copied from interface:InternalExpirationManagerThis method is very similar toInternalExpirationManager.entryExpiredInMemory(InternalCacheEntry, long, boolean)except that it does the bare minimum when an entry expired to guarantee if the entry is valid or not. This is important to reduce time spent per entry when iterating. This method may not actually remove the entry and may just return immediately if it is safe to do so.- Specified by:
entryExpiredInMemoryFromIterationin interfaceInternalExpirationManager<K,V>- Overrides:
entryExpiredInMemoryFromIterationin classExpirationManagerImpl<K,V>- Parameters:
entry- the entry that has expiredcurrentTime- the current time when it expired- Returns:
- if this entry actually expired or not
-
handleInStoreExpirationInternal
public CompletionStage<Void> handleInStoreExpirationInternal(K key)
Description copied from interface:InternalExpirationManagerThis is to be invoked when a store entry expires. This method may attempt to lock this key to preserve atomicity.Note this method doesn't currently take a
InternalCacheEntryand this is due to a limitation in the cache store API. This may cause some values to be removed if they were updated at the same time.- Specified by:
handleInStoreExpirationInternalin interfaceInternalExpirationManager<K,V>- Overrides:
handleInStoreExpirationInternalin classExpirationManagerImpl<K,V>- Parameters:
key- the key of the expired entry This method will be renamed to handleInStoreExpiration when the method can be removed fromExpirationManager
-
handleInStoreExpirationInternal
public CompletionStage<Void> handleInStoreExpirationInternal(MarshallableEntry<K,V> marshalledEntry)
Description copied from interface:InternalExpirationManagerThis is to be invoked when a store entry expires and the value and/or metadata is available to be used. This method is preferred overExpirationManager.handleInStoreExpiration(Object)as it allows for more specific expiration to possibly occur.- Specified by:
handleInStoreExpirationInternalin interfaceInternalExpirationManager<K,V>- Overrides:
handleInStoreExpirationInternalin classExpirationManagerImpl<K,V>- Parameters:
marshalledEntry- the entry that can be unmarshalled as needed This method will be renamed to handleInStoreExpiration when the method can be removed fromExpirationManager
-
checkExpiredMaxIdle
protected CompletionStage<Boolean> checkExpiredMaxIdle(InternalCacheEntry ice, int segment)
Description copied from class:ExpirationManagerImplResponse is whether the value should be treated as expired. This is determined by if a value as able to be touched or not, that is if it couldn't be touched - we assumed expired (as it was removed in some way).- Overrides:
checkExpiredMaxIdlein classExpirationManagerImpl<K,V>- Parameters:
ice- the entry to check expiration and touchsegment- the segment the entry maps to- Returns:
- whether the entry was expired or not
-
-