org.infinispan.persistence.spi.AdvancedCacheExpirationWriter Maven / Gradle / Ivy
package org.infinispan.persistence.spi;
import java.util.concurrent.Executor;
import org.infinispan.commons.util.Experimental;
import org.infinispan.marshall.core.MarshalledEntry;
/**
* Defines functionality for advanced expiration techniques. Note this interface allows for providing not just the key
* when an entry is expired. This is important so that proper cluster wide expiration can be performed.
* @param
* @param
* @since 8.0
*/
@Experimental
public interface AdvancedCacheExpirationWriter extends AdvancedCacheWriter {
/**
* Using the thread in the pool, removed all the expired data from the persistence storage. For each removed entry,
* the supplied listener is invoked. This should be preferred to
* {@link AdvancedCacheWriter#purge(Executor, PurgeListener)} since it allows for value and metadata to be provided
* which provides more accurate expiration when coordination is required.
*
* @param executor the executor to invoke the given command on
* @param listener the listener that is notified for each expired entry
* @throws PersistenceException in case of an error, e.g. communicating with the external storage
*/
void purge(Executor executor, ExpirationPurgeListener listener);
/**
* Callback to be notified when an entry is removed by the {@link #purge(Executor, ExpirationPurgeListener)} method.
* Note this interface adds a new method to the purge listener. It is possible that a cache store may want to
* have a key only expiration and a key/metadata for various performance reasons.
*/
interface ExpirationPurgeListener extends PurgeListener {
/**
* Optional. If possible, {@link AdvancedCacheExpirationWriter} implementors should invoke this method for every
* entry that is purged from the store. One of the side effects of not implementing this method is that listeners
* do not receive {@link org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired} for the
* entries that are removed from the persistent store directly.
*/
void marshalledEntryPurged(MarshalledEntry entry);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy