public class RocksDBStore<K,V> extends java.lang.Object implements SegmentedAdvancedLoadWriteStore<K,V>
AdvancedCacheLoader.CacheLoaderTask<K,V>, AdvancedCacheLoader.TaskContextAdvancedCacheWriter.PurgeListener<K>| Constructor and Description |
|---|
RocksDBStore() |
| Modifier and Type | Method and Description |
|---|---|
void |
addSegments(IntSet segments)
Invoked when a node becomes an owner of the given segments.
|
java.util.concurrent.CompletionStage<java.lang.Void> |
bulkUpdate(org.reactivestreams.Publisher<MarshallableEntry<? extends K,? extends V>> publisher)
Persist all provided entries to the store in chunks, with the size of each chunk determined by the store
implementation.
|
void |
clear()
Removes all the data from the storage.
|
void |
clear(IntSet segments)
Removes all the data that maps to the given segments from the storage.
|
boolean |
contains(int segment,
java.lang.Object key)
Returns true if the storage contains an entry associated with the given key in the given segment
|
boolean |
contains(java.lang.Object key)
Returns true if the storage contains an entry associated with the given key.
|
boolean |
delete(int segment,
java.lang.Object key)
Removes the entry for the provided key which is in the given segment.
|
boolean |
delete(java.lang.Object key) |
void |
deleteBatch(java.lang.Iterable<java.lang.Object> keys)
Remove all provided keys from the store in a single batch operation.
|
void |
destroy()
Method to be used to destroy and clean up any resources associated with this store.
|
org.reactivestreams.Publisher<MarshallableEntry<K,V>> |
entryPublisher(IntSet segments,
java.util.function.Predicate<? super K> filter,
boolean fetchValue,
boolean fetchMetadata)
Publishes all entries from this store.
|
org.reactivestreams.Publisher<MarshallableEntry<K,V>> |
entryPublisher(java.util.function.Predicate<? super K> filter,
boolean fetchValue,
boolean fetchMetadata)
Publishes all entries from this store.
|
MarshallableEntry<K,V> |
get(int segment,
java.lang.Object key)
Fetches an entry from the storage given a segment to optimize this lookup based on.
|
void |
init(InitializationContext ctx)
Used to initialize a cache loader.
|
boolean |
isAvailable() |
MarshallableEntry |
loadEntry(java.lang.Object key)
Fetches an entry from the storage.
|
protected org.rocksdb.RocksDB |
openDatabase(java.lang.String location,
org.rocksdb.Options options)
Creates database if it doesn't exist.
|
org.reactivestreams.Publisher<K> |
publishKeys(IntSet segments,
java.util.function.Predicate<? super K> filter)
Publishes all the keys that map to the given segments from this store.
|
org.reactivestreams.Publisher<K> |
publishKeys(java.util.function.Predicate<? super K> filter)
Publishes all the keys from this store.
|
void |
purge(java.util.concurrent.Executor executor,
AdvancedCacheWriter.PurgeListener purgeListener)
Using the thread in the pool, removed all the expired data from the persistence storage.
|
void |
removeSegments(IntSet segments)
Invoked when a node loses ownership of a segment.
|
int |
size()
Returns the number of elements in the store.
|
int |
size(IntSet segments)
Returns the number of elements in the store that map to the given segments that aren't expired.
|
void |
start()
Invoked on component start
|
void |
stop()
Invoked on component stop
|
void |
write(int segment,
MarshallableEntry<? extends K,? extends V> entry)
Persists the entry to the storage with the given segment to optimize future lookups.
|
void |
write(MarshallableEntry entry)
Persists the entry to the storage.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitload, publishEntries, writeprocess, publishEntriesloadwrite, writeBatchpublic void init(InitializationContext ctx)
CacheLoaderPersistenceManager
when setting up cache loaders.init in interface CacheLoader<K,V>init in interface CacheWriter<K,V>public void start()
Lifecycleprotected org.rocksdb.RocksDB openDatabase(java.lang.String location,
org.rocksdb.Options options)
throws java.io.IOException,
org.rocksdb.RocksDBException
java.io.IOExceptionorg.rocksdb.RocksDBExceptionpublic void stop()
Lifecyclepublic void destroy()
ExternalStoreThis method will ensure the store is stopped and properly cleans up all resources for it.
destroy in interface ExternalStore<K,V>public boolean isAvailable()
isAvailable in interface CacheLoader<K,V>isAvailable in interface CacheWriter<K,V>isAvailable in interface ExternalStore<K,V>public void clear()
AdvancedCacheWriterclear in interface AdvancedCacheWriter<K,V>public void clear(IntSet segments)
SegmentedAdvancedLoadWriteStoreThis method must only remove entries that map to the provided segments.
This method may be invoked irrespective if the configuration is StoreConfiguration.segmented() or not.
clear in interface SegmentedAdvancedLoadWriteStore<K,V>segments - data mapping to these segments are removed. Always non null.public int size()
AdvancedCacheLoadersize in interface AdvancedCacheLoader<K,V>public int size(IntSet segments)
SegmentedAdvancedLoadWriteStoreThe segments here must be adhered to and the size must not count any entries that don't belong to the provided segments.
This method is not invoked invoked when the store is not configured to be StoreConfiguration.segmented().
size in interface SegmentedAdvancedLoadWriteStore<K,V>segments - the segments which should have their entries counted. Always non null.public boolean contains(java.lang.Object key)
CacheLoadercontains in interface CacheLoader<K,V>public boolean contains(int segment,
java.lang.Object key)
SegmentedAdvancedLoadWriteStoreThe provided segment may be used for performance purposes, however it it is acceptable to ignore this argument.
This method may be invoked invoked irrespective if the store is StoreConfiguration.segmented().
contains in interface SegmentedAdvancedLoadWriteStore<K,V>segment - the segment that the key maps tokey - the key to see if existspublic org.reactivestreams.Publisher<K> publishKeys(java.util.function.Predicate<? super K> filter)
AdvancedCacheLoaderSubscribers as desired. Keys are not retrieved until a given Subscriber requests
them from the Subscription.
Stores will return only non expired keys
publishKeys in interface AdvancedCacheLoader<K,V>filter - a filter - null is treated as allowing all entriespublic org.reactivestreams.Publisher<K> publishKeys(IntSet segments, java.util.function.Predicate<? super K> filter)
SegmentedAdvancedLoadWriteStoreSubscribers as desired. Keys are not retrieved until a given Subscriber requests
them from the Subscription.
Stores will return only non expired keys
The segments here must be adhered to and the keys published must not include any that don't belong to the provided segments.
This method is not invoked invoked when the store is not configured to be StoreConfiguration.segmented().
publishKeys in interface SegmentedAdvancedLoadWriteStore<K,V>segments - the segments that the keys must map to. Always non null.filter - a filterpublic org.reactivestreams.Publisher<MarshallableEntry<K,V>> entryPublisher(java.util.function.Predicate<? super K> filter, boolean fetchValue, boolean fetchMetadata)
AdvancedCacheLoaderSubscribers as desired. Entries are not retrieved until a given Subscriber requests
them from the Subscription.
If fetchMetadata is true this store must guarantee to not return any expired entries.
entryPublisher in interface AdvancedCacheLoader<K,V>filter - a filter - null is treated as allowing all entriesfetchValue - whether or not to fetch the value from the persistent store. E.g. if the iteration is
intended only over the key set, no point fetching the values from the persistent store as
wellfetchMetadata - whether or not to fetch the metadata from the persistent store. E.g. if the iteration is
intended only ove the key set, then no point fetching the metadata from the persistent store
as wellpublic org.reactivestreams.Publisher<MarshallableEntry<K,V>> entryPublisher(IntSet segments, java.util.function.Predicate<? super K> filter, boolean fetchValue, boolean fetchMetadata)
SegmentedAdvancedLoadWriteStoreSubscribers as desired. Entries are not retrieved until a given Subscriber requests them from
the Subscription.
If fetchMetadata is true this store must guarantee to not return any expired entries.
The segments here must be adhered to and the entries published must not include any that don't belong to the provided segments.
This method is not invoked invoked when the store is not configured to be StoreConfiguration.segmented().
StoreConfiguration.segmented().
entryPublisher in interface SegmentedAdvancedLoadWriteStore<K,V>segments - the segments that the keys of the entries must map to. Always non null.filter - a filter on the keys of the entries that if passed will allow the given entry to be returned
from the publisherfetchValue - whether the value should be included in the marshalled entryfetchMetadata - whether the metadata should be included in the marshalled entrypublic boolean delete(java.lang.Object key)
delete in interface CacheWriter<K,V>public boolean delete(int segment,
java.lang.Object key)
SegmentedAdvancedLoadWriteStoreThe provided segment may be used for performance purposes, however it it is acceptable to ignore this argument.
This method may be invoked invoked irrespective if the store is StoreConfiguration.segmented().
delete in interface SegmentedAdvancedLoadWriteStore<K,V>segment - the segment that this key maps tokey - the key of the entry to removepublic void write(MarshallableEntry entry)
CacheWriterwrite in interface CacheWriter<K,V>MarshallableEntrypublic void write(int segment,
MarshallableEntry<? extends K,? extends V> entry)
SegmentedAdvancedLoadWriteStoreThe provided segment may be used for performance purposes, however it it is acceptable to ignore this argument.
This method may be invoked invoked irrespective if the store is StoreConfiguration.segmented().
write in interface SegmentedAdvancedLoadWriteStore<K,V>segment - the segment to persist this entry toentry - the entry to write to the storeMarshallableEntrypublic MarshallableEntry loadEntry(java.lang.Object key)
CacheLoaderMarshallableEntry needs to be created here, InitializationContext.getMarshallableEntryFactory() ()} and InitializationContext.getByteBufferFactory() should be used.loadEntry in interface CacheLoader<K,V>public MarshallableEntry<K,V> get(int segment, java.lang.Object key)
SegmentedAdvancedLoadWriteStoreMarshallableEntry
needs to be created here, InitializationContext.getMarshallableEntryFactory() and InitializationContext.getByteBufferFactory() should be used.
The provided segment may be used for performance purposes, however it it is acceptable to ignore this argument.
This method may be invoked invoked irrespective if the store is StoreConfiguration.segmented().
get in interface SegmentedAdvancedLoadWriteStore<K,V>segment - the segment that the key maps tokey - the key of the entry to fetchpublic java.util.concurrent.CompletionStage<java.lang.Void> bulkUpdate(org.reactivestreams.Publisher<MarshallableEntry<? extends K,? extends V>> publisher)
CacheWriterCacheWriter.write(MarshallableEntry).bulkUpdate in interface CacheWriter<K,V>publisher - a Publisher of MarshallableEntry instancespublic void deleteBatch(java.lang.Iterable<java.lang.Object> keys)
CacheWriterCacheWriter.delete(Object).deleteBatch in interface CacheWriter<K,V>keys - an Iterable of entry Keys to be removed from the store.public void purge(java.util.concurrent.Executor executor,
AdvancedCacheWriter.PurgeListener purgeListener)
AdvancedCacheWriterWhen this method returns all entries will be purged and no tasks will be running due to this loader in the provided executor. If however an exception is thrown there could be tasks still pending or running in the executor.
purge in interface AdvancedCacheWriter<K,V>public void addSegments(IntSet segments)
SegmentedAdvancedLoadWriteStore
This method may be invoked irrespective if the configuration is StoreConfiguration.segmented() or not.
addSegments in interface SegmentedAdvancedLoadWriteStore<K,V>segments - segments to associate with this storepublic void removeSegments(IntSet segments)
SegmentedAdvancedLoadWriteStore
This method may be invoked irrespective if the configuration is StoreConfiguration.segmented() or not.
StoreConfiguration.segmented().
removeSegments in interface SegmentedAdvancedLoadWriteStore<K,V>segments - segments that should no longer be associated with this store