public class KCVSCacheInvalidationService extends Object implements CacheInvalidationService
Constructor and Description |
---|
KCVSCacheInvalidationService(KCVSCache edgeStore,
KCVSCache indexStore,
IDManager idManager) |
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(Long vertexId)
Marks a vertex as expired in `edgeStore` cache (
CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long) ) and triggers force
clear of expired cache (i.e. |
void |
forceInvalidateVerticesInEdgeStoreCache(Iterable<Long> vertexIds)
Marks vertices as expired in `edgeStore` cache (
CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long) ) 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(Long vertexId)
Marks specific vertex as expired in `edgeStore` cache.
|
public void markVertexAsExpiredInEdgeStore(Long vertexId)
CacheInvalidationService
Warning! This doesn't invalidate `indexStore` cache. Thus, any queries which are using indices may still return
stale data. See CacheInvalidationService.markKeyAsExpiredInIndexStore(StaticBuffer)
JavaDoc to learn how to invalidate data for
`indexStore`.
markVertexAsExpiredInEdgeStore
in interface CacheInvalidationService
vertexId
- vertex id to expire in `edgeStore` cachepublic void markKeyAsExpiredInEdgeStore(StaticBuffer key)
CacheInvalidationService
Warning! This doesn't invalidate `indexStore` cache. Thus, any queries which are using indices may still return
stale data. See CacheInvalidationService.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 CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long)
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 CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long)
.
markKeyAsExpiredInEdgeStore
in interface CacheInvalidationService
key
- key to expire in `edgeStore` cachepublic void markKeyAsExpiredInIndexStore(StaticBuffer key)
CacheInvalidationService
Warning! This doesn't invalidate `edgeStore` cache. Thus, trying to return properties or edges for the vertex
may still return stale data. See CacheInvalidationService.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(); }
markKeyAsExpiredInIndexStore
in interface CacheInvalidationService
key
- key to expire in `indexStore` cachepublic void forceClearExpiredKeysInEdgeStoreCache()
CacheInvalidationService
forceClearExpiredKeysInEdgeStoreCache
in interface CacheInvalidationService
public void forceClearExpiredKeysInIndexStoreCache()
CacheInvalidationService
forceClearExpiredKeysInIndexStoreCache
in interface CacheInvalidationService
public void forceInvalidateVertexInEdgeStoreCache(Long vertexId)
CacheInvalidationService
CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long)
) and triggers force
clear of expired cache (i.e. CacheInvalidationService.forceClearExpiredKeysInEdgeStoreCache()
)forceInvalidateVertexInEdgeStoreCache
in interface CacheInvalidationService
vertexId
- vertex id to invalidate in `edgeStore` cachepublic void forceInvalidateVerticesInEdgeStoreCache(Iterable<Long> vertexIds)
CacheInvalidationService
CacheInvalidationService.markVertexAsExpiredInEdgeStore(Long)
) and triggers force
clear of expired cache (i.e. CacheInvalidationService.forceClearExpiredKeysInEdgeStoreCache()
)forceInvalidateVerticesInEdgeStoreCache
in interface CacheInvalidationService
vertexIds
- vertex ids to invalidate in `edgeStore` cachepublic void clearEdgeStoreCache()
CacheInvalidationService
clearEdgeStoreCache
in interface CacheInvalidationService
public void clearIndexStoreCache()
CacheInvalidationService
clearIndexStoreCache
in interface CacheInvalidationService
public void clearDBCache()
CacheInvalidationService
CacheInvalidationService.clearEdgeStoreCache()
and CacheInvalidationService.clearIndexStoreCache()
clearDBCache
in interface CacheInvalidationService
Copyright © 2012–2023. All rights reserved.