Class MongoBlobStore
- java.lang.Object
-
- org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore
-
- org.apache.jackrabbit.oak.plugins.blob.CachingBlobStore
-
- org.apache.jackrabbit.oak.plugins.document.mongo.MongoBlobStore
-
- All Implemented Interfaces:
AutoCloseable,Cache.Backend<AbstractBlobStore.BlockId,AbstractBlobStore.Data>,BlobStore,GarbageCollectableBlobStore
public class MongoBlobStore extends CachingBlobStore
Implementation of blob store for the MongoDB extending fromCachingBlobStore. It saves blobs into a separate collection in MongoDB (not using GridFS) and it supports basic garbage collection. FIXME: -Do we need to create commands for retry etc.? -Not sure if this is going to work for multiple MKs talking to same MongoDB?
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore
AbstractBlobStore.BlockId, AbstractBlobStore.Data
-
-
Field Summary
Fields Modifier and Type Field Description static StringCOLLECTION_BLOBS-
Fields inherited from class org.apache.jackrabbit.oak.plugins.blob.CachingBlobStore
blobCacheSize, cache, DEFAULT_CACHE_SIZE, MEM_CACHE_NAME
-
Fields inherited from class org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore
BLOCK_SIZE_LIMIT, HASH_ALGORITHM, inUse, TYPE_DATA, TYPE_HASH
-
-
Constructor Summary
Constructors Constructor Description MongoBlobStore(@NotNull com.mongodb.client.MongoDatabase db, long cacheSize, @Nullable DocumentNodeStoreBuilder<?> builder)Constructs a newMongoBlobStoreMongoBlobStore(com.mongodb.client.MongoDatabase db)Constructs a newMongoBlobStoreMongoBlobStore(com.mongodb.client.MongoDatabase db, long cacheSize)Constructs a newMongoBlobStore
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description longcountDeleteChunks(List<String> chunkIds, long maxLastModifiedTime)Deletes the blobs with the given ids.Iterator<String>getAllChunkIds(long maxLastModifiedTime)Gets all the identifiers.protected booleanisMarkEnabled()protected voidmark(AbstractBlobStore.BlockId blockId)protected byte[]readBlockFromBackend(AbstractBlobStore.BlockId blockId)Load the block from the storage backend.voidstartMark()Start the mark phase.protected voidstoreBlock(byte[] digest, int level, byte[] data)Store a block of data.intsweep()Remove all unused blocks.-
Methods inherited from class org.apache.jackrabbit.oak.plugins.blob.CachingBlobStore
clearCache, getBlobCacheSize, getCacheStats
-
Methods inherited from class org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore
clearInUse, close, deleteChunks, getBlobId, getBlobLength, getBlockSize, getBlockSizeMin, getInputStream, getOrCreateReferenceKey, getReference, getStatsCollector, load, mark, markInUse, readBlob, resolveChunks, setBlockSize, setBlockSizeMin, setReferenceKey, setReferenceKeyEncoded, setReferenceKeyPlainText, setStatsCollector, usesBlobId, writeBlob, writeBlob, writeBlob
-
-
-
-
Field Detail
-
COLLECTION_BLOBS
public static final String COLLECTION_BLOBS
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
MongoBlobStore
public MongoBlobStore(com.mongodb.client.MongoDatabase db)
Constructs a newMongoBlobStore- Parameters:
db- the database
-
MongoBlobStore
public MongoBlobStore(com.mongodb.client.MongoDatabase db, long cacheSize)Constructs a newMongoBlobStore- Parameters:
db- the databasecacheSize- the cache size
-
MongoBlobStore
public MongoBlobStore(@NotNull @NotNull com.mongodb.client.MongoDatabase db, long cacheSize, @Nullable @Nullable DocumentNodeStoreBuilder<?> builder)Constructs a newMongoBlobStore- Parameters:
db- the databasecacheSize- the cache sizebuilder-DocumentNodeStoreBuilder, supplying further options
-
-
Method Detail
-
storeBlock
protected void storeBlock(byte[] digest, int level, byte[] data) throws IOExceptionDescription copied from class:AbstractBlobStoreStore a block of data.- Specified by:
storeBlockin classAbstractBlobStore- Parameters:
digest- the content hash (32 bytes)level- the indirection level (0 is for user data, 1 is a list of digests that point to user data, 2 is a list of digests that point to digests, and so on). This parameter is for informational use only, and it is not required to store it unless that's easy to achievedata- the data to be stored (the number of bytes is at most the block size)- Throws:
IOException
-
readBlockFromBackend
protected byte[] readBlockFromBackend(AbstractBlobStore.BlockId blockId) throws Exception
Description copied from class:AbstractBlobStoreLoad the block from the storage backend. Returns null if the block was not found.- Specified by:
readBlockFromBackendin classAbstractBlobStore- Parameters:
blockId- the block id- Returns:
- the block data, or null
- Throws:
Exception
-
startMark
public void startMark() throws IOExceptionDescription copied from interface:GarbageCollectableBlobStoreStart the mark phase.- Specified by:
startMarkin interfaceGarbageCollectableBlobStore- Specified by:
startMarkin classAbstractBlobStore- Throws:
IOException
-
isMarkEnabled
protected boolean isMarkEnabled()
- Specified by:
isMarkEnabledin classAbstractBlobStore
-
mark
protected void mark(AbstractBlobStore.BlockId blockId) throws Exception
- Specified by:
markin classAbstractBlobStore- Throws:
Exception
-
sweep
public int sweep() throws IOExceptionDescription copied from interface:GarbageCollectableBlobStoreRemove all unused blocks.- Specified by:
sweepin interfaceGarbageCollectableBlobStore- Specified by:
sweepin classAbstractBlobStore- Returns:
- the number of removed blocks
- Throws:
IOException
-
countDeleteChunks
public long countDeleteChunks(List<String> chunkIds, long maxLastModifiedTime) throws Exception
Description copied from interface:GarbageCollectableBlobStoreDeletes the blobs with the given ids.- Parameters:
chunkIds- the chunk idsmaxLastModifiedTime- the max last modified time to consider for retrieval, with the special value '0' meaning no filtering by time- Returns:
- long the count of successful deletions
- Throws:
Exception- the exception
-
getAllChunkIds
public Iterator<String> getAllChunkIds(long maxLastModifiedTime) throws Exception
Description copied from interface:GarbageCollectableBlobStoreGets all the identifiers.- Parameters:
maxLastModifiedTime- the max last modified time to consider for retrieval, with the special value '0' meaning no filtering by time- Returns:
- the identifiers
- Throws:
Exception- the exception
-
-