public interface CacheInvalidationService
This class provides method for data invalidation for both `edgeStore` cache and `indexStore` cache but invalidating entries in one cache doesn't invalidate entries in another cache. Thus, for proper invalidation you need to invalidate necessary keys for both `edgeStore` and `indexStore`.
EdgeStore accepts keys where a key is an encoded vertex id. It's usually easy to invalidate EdgeStore because it doesn't require you to know more information to form a key except knowing a vertex id.
IndexStore accepts keys where a key is an encoded IndexUpdate key. To form IndexUpdate key you need to know the next information: vertex id, updated property name, previous property value and / or new property value. Thus forming IndexUpdate key to invalidate IndexStore may be more complicated.
EdgeStore caches properties and edges for vertices. IndexStore caches results for queries which use indices.
See JavaDoc on methods to learn how to properly form a `key` to invalidate cache in `edgeStore` or `indexStore`.
Modifier and Type | Method and Description |
---|---|
void |
clearDBCache()
Clears both `edgeStore` cache and `indexStore` cache fully.
|
void |
clearEdgeStoreCache()
Clears `edgeStore` cache fully
|
void |
clearIndexStoreCache()
Clears `indexStore` cache fully
|
void |
forceClearExpiredKeysInEdgeStoreCache()
Instead of waiting for a probabilistic invalidation it triggers all cached queries scan and invalidation in `edgeStore`.
|
void |
forceClearExpiredKeysInIndexStoreCache()
Instead of waiting for a probabilistic invalidation it triggers all cached queries scan and invalidation in `indexStore`.
|
void |
forceInvalidateVertexInEdgeStoreCache(Object vertexId)
Marks a vertex as expired in `edgeStore` cache (
markVertexAsExpiredInEdgeStore(Object) ) and triggers force
clear of expired cache (i.e. |
void |
forceInvalidateVerticesInEdgeStoreCache(Iterable<Object> vertexIds)
Marks vertices as expired in `edgeStore` cache (
markVertexAsExpiredInEdgeStore(Object) ) and triggers force
clear of expired cache (i.e. |
void |
markKeyAsExpiredInEdgeStore(StaticBuffer key)
Marks specific key as expired in `edgeStore` cache.
|
void |
markKeyAsExpiredInIndexStore(StaticBuffer key)
Marks specific key as expired in `indexStore` cache.
|
void |
markVertexAsExpiredInEdgeStore(Object vertexId)
Marks specific vertex as expired in `edgeStore` cache.
|
void markVertexAsExpiredInEdgeStore(Object vertexId)
Warning! This doesn't invalidate `indexStore` cache. Thus, any queries which are using indices may still return
stale data. See markKeyAsExpiredInIndexStore(StaticBuffer)
JavaDoc to learn how to invalidate data for
`indexStore`.
vertexId
- vertex id to expire in `edgeStore` cachevoid markKeyAsExpiredInEdgeStore(StaticBuffer key)
Warning! This doesn't invalidate `indexStore` cache. Thus, any queries which are using indices may still return
stale data. See markKeyAsExpiredInIndexStore(StaticBuffer)
JavaDoc to learn how to invalidate data for
`indexStore`.
IDManager.getKey(Object)
can be used to form a `key` from vertex id.
Alternatively, a method markVertexAsExpiredInEdgeStore(Object)
can be used which converts vertex id into
the `key` before passing the key to this method.
In case vertices invalidation is needed by processing transaction logs via ChangeState
then the method ChangeState.getVertices(Change)
can be used to retrieve all
changed vertices and passing their ids to markVertexAsExpiredInEdgeStore(Object)
.
key
- key to expire in `edgeStore` cachevoid markKeyAsExpiredInIndexStore(StaticBuffer key)
Warning! This doesn't invalidate `edgeStore` cache. Thus, trying to return properties or edges for the vertex
may still return stale data. See markKeyAsExpiredInEdgeStore(StaticBuffer)
JavaDoc to learn how to invalidate
data for `edgeStore`.
`key` is the encoded key of IndexUpdate
which can be retrieved via
IndexUpdate.getKey()
. To form the `IndexUpdate` it is possible to use
IndexSerializer.getIndexUpdates(InternalRelation)
or
IndexSerializer.getIndexUpdates(InternalVertex, Collection)
.
Usually updated vertices and relations (edges or properties) can be found in retrieved mutation logs which are
passed via ChangeState
(described in `Transaction Log` documentation of JanusGraph).
It is also possible to trigger `indexStore` invalidation by forming a vertex and a property yourself. For example, below method can be used to trigger `indexStore` invalidation for updated property if previous value, new value, property name, and vertex id are known.
public void invalidateUpdatedVertexProperty(StandardJanusGraph graph, long vertexIdUpdated, String propertyNameUpdated, Object previousPropertyValue, Object newPropertyValue){ JanusGraphTransaction tx = graph.newTransaction(); JanusGraphManagement graphMgmt = graph.openManagement(); PropertyKey propertyKey = graphMgmt.getPropertyKey(propertyNameUpdated); CacheVertex cacheVertex = new CacheVertex((StandardJanusGraphTx) tx, vertexIdUpdated, ElementLifeCycle.Loaded); StandardVertexProperty propertyPreviousVal = new StandardVertexProperty(propertyKey.longId(), propertyKey, cacheVertex, previousPropertyValue, ElementLifeCycle.Removed); StandardVertexProperty propertyNewVal = new StandardVertexProperty(propertyKey.longId(), propertyKey, cacheVertex, newPropertyValue, ElementLifeCycle.New); IndexSerializer indexSerializer = graph.getIndexSerializer(); Collection<IndexUpdate> indexUpdates = indexSerializer.getIndexUpdates(cacheVertex, Arrays.asList(propertyPreviousVal, propertyNewVal)); CacheInvalidationService invalidationService = graph.getDBCacheInvalidationService(); for(IndexUpdate indexUpdate : indexUpdates){ StaticBuffer keyToInvalidate = (StaticBuffer) indexUpdate.getKey(); invalidationService.markKeyAsExpiredInIndexStore(keyToInvalidate); } invalidationService.forceClearExpiredKeysInIndexStoreCache(); invalidationService.forceInvalidateVertexInEdgeStoreCache(vertexIdUpdated); graphMgmt.rollback(); tx.rollback(); }
key
- key to expire in `indexStore` cachevoid forceClearExpiredKeysInEdgeStoreCache()
void forceClearExpiredKeysInIndexStoreCache()
void forceInvalidateVertexInEdgeStoreCache(Object vertexId)
markVertexAsExpiredInEdgeStore(Object)
) and triggers force
clear of expired cache (i.e. forceClearExpiredKeysInEdgeStoreCache()
)vertexId
- vertex id to invalidate in `edgeStore` cachevoid forceInvalidateVerticesInEdgeStoreCache(Iterable<Object> vertexIds)
markVertexAsExpiredInEdgeStore(Object)
) and triggers force
clear of expired cache (i.e. forceClearExpiredKeysInEdgeStoreCache()
)vertexIds
- vertex ids to invalidate in `edgeStore` cachevoid clearEdgeStoreCache()
void clearIndexStoreCache()
void clearDBCache()
clearEdgeStoreCache()
and clearIndexStoreCache()
Copyright © 2012–2024. All rights reserved.