Class InMemoryBlobStore
- java.lang.Object
-
- org.nuxeo.ecm.core.blob.AbstractBlobStore
-
- org.nuxeo.ecm.core.blob.InMemoryBlobStore
-
- All Implemented Interfaces:
BlobStore
public class InMemoryBlobStore extends AbstractBlobStore
Blob storage in memory, mostly for unit tests.- Since:
- 11.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
InMemoryBlobStore.InMemoryBlobGarbageCollector
-
Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.blob.BlobStore
BlobStore.OptionalOrUnknown<T>
-
-
Field Summary
Fields Modifier and Type Field Description protected boolean
allowByteRange
protected boolean
emulateLocalFile
protected boolean
emulateNoStream
protected boolean
emulateVersioning
protected InMemoryBlobStore.InMemoryBlobGarbageCollector
gc
protected Map<String,Boolean>
legalHold
protected Map<String,byte[]>
map
protected static Random
RANDOM
-
Fields inherited from class org.nuxeo.ecm.core.blob.AbstractBlobStore
BYTE_RANGE_SEP, keyStrategy, name
-
-
Constructor Summary
Constructors Modifier Constructor Description InMemoryBlobStore(String name, KeyStrategy keyStrategy)
protected
InMemoryBlobStore(String name, KeyStrategy keyStrategy, boolean emulateNoStream, boolean emulateLocalFile)
InMemoryBlobStore(String name, PropertyBasedConfiguration config, KeyStrategy keyStrategy)
protected
InMemoryBlobStore(String name, PropertyBasedConfiguration config, KeyStrategy keyStrategy, boolean emulateNoStream, boolean emulateLocalFile)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
copyBlob(String key, BlobStore sourceStore, String sourceKey)
boolean
copyBlob(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove)
Writes a file based on a key, as a copy/move from a source in another blob store.boolean
copyBlobIsOptimized(BlobStore sourceStore)
Checks if blob copy/move from another blob store to this one can be done efficiently.void
deleteBlob(String key)
Deletes a blob based on a key.BinaryGarbageCollector
getBinaryGarbageCollector()
Returns the binary garbage collector (GC).BlobStore.OptionalOrUnknown<Path>
getFile(String key)
Gets an already-existing file containing the blob for the given key, if present.BlobStore.OptionalOrUnknown<InputStream>
getStream(String key)
Gets the stream of the blob for the given key, if present.protected ByteArrayInputStream
getStreamInternal(String key)
boolean
hasVersioning()
Whether this blob store has versioning.boolean
readBlob(String key, Path dest)
Reads a blob based on its key into the given file.String
writeBlob(BlobWriteContext blobWriteContext)
Writes a blob.void
writeBlobProperties(BlobUpdateContext blobUpdateContext)
Sets properties on a blob.-
Methods inherited from class org.nuxeo.ecm.core.blob.AbstractBlobStore
deleteBlob, getByteRangeFromKey, getKeyStrategy, getName, logTrace, logTrace, logTrace, randomLong, randomString, setByteRangeInKey, stripBlobKeyPrefix, transfer, transfer, transfer, unwrap, writeBlob
-
-
-
-
Field Detail
-
gc
protected final InMemoryBlobStore.InMemoryBlobGarbageCollector gc
-
emulateNoStream
protected final boolean emulateNoStream
-
emulateLocalFile
protected final boolean emulateLocalFile
-
emulateVersioning
protected final boolean emulateVersioning
-
allowByteRange
protected final boolean allowByteRange
-
-
Constructor Detail
-
InMemoryBlobStore
public InMemoryBlobStore(String name, KeyStrategy keyStrategy)
-
InMemoryBlobStore
public InMemoryBlobStore(String name, PropertyBasedConfiguration config, KeyStrategy keyStrategy)
-
InMemoryBlobStore
protected InMemoryBlobStore(String name, KeyStrategy keyStrategy, boolean emulateNoStream, boolean emulateLocalFile)
-
InMemoryBlobStore
protected InMemoryBlobStore(String name, PropertyBasedConfiguration config, KeyStrategy keyStrategy, boolean emulateNoStream, boolean emulateLocalFile)
-
-
Method Detail
-
hasVersioning
public boolean hasVersioning()
Description copied from interface:BlobStore
Whether this blob store has versioning.With versioning, two writes may use the same key. The returned keys will include a different version number to distinguish the writes.
- Specified by:
hasVersioning
in interfaceBlobStore
- Overrides:
hasVersioning
in classAbstractBlobStore
-
writeBlob
public String writeBlob(BlobWriteContext blobWriteContext) throws IOException
Description copied from interface:BlobStore
Writes a blob.Note that the returned key may be different than the one requested by the
BlobWriteContext
, if the blob store needs additional version info to retrieve it.- Parameters:
blobWriteContext
- the context of the blob write, including the blob- Returns:
- the key to use to read this blob in the future
- Throws:
IOException
-
writeBlobProperties
public void writeBlobProperties(BlobUpdateContext blobUpdateContext) throws IOException
Description copied from interface:BlobStore
Sets properties on a blob.- Specified by:
writeBlobProperties
in interfaceBlobStore
- Overrides:
writeBlobProperties
in classAbstractBlobStore
- Parameters:
blobUpdateContext
- the blob update context- Throws:
IOException
-
copyBlobIsOptimized
public boolean copyBlobIsOptimized(BlobStore sourceStore)
Description copied from interface:BlobStore
Checks if blob copy/move from another blob store to this one can be done efficiently.- Specified by:
copyBlobIsOptimized
in interfaceBlobStore
- Overrides:
copyBlobIsOptimized
in classAbstractBlobStore
- Parameters:
sourceStore
- the source store- Returns:
true
if the copy/move can be done efficiently
-
copyBlob
public boolean copyBlob(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) throws IOException
Description copied from interface:BlobStore
Writes a file based on a key, as a copy/move from a source in another blob store.If the copy/move is requested to be atomic, then the destination file is created atomically. In case of atomic move, in some stores the destination will be created atomically but the source will only be deleted afterwards.
- Parameters:
key
- the keysourceStore
- the source storesourceKey
- the source keyatomicMove
-true
for an atomic move,false
for a regular copy- Returns:
true
if the file was found in the source store,false
if it was not found- Throws:
IOException
-
copyBlob
protected boolean copyBlob(String key, BlobStore sourceStore, String sourceKey) throws IOException
- Throws:
IOException
-
getStreamInternal
protected ByteArrayInputStream getStreamInternal(String key)
-
getFile
public BlobStore.OptionalOrUnknown<Path> getFile(String key)
Description copied from interface:BlobStore
Gets an already-existing file containing the blob for the given key, if present.Note that this method is best-effort, it may return unknown even though the blob exists in the store, it's just that it's not handily available locally in a file.
- Parameters:
key
- the blob key- Returns:
- the file containing the blob, or empty if the blob cannot be found, or unknown if no file is available locally
-
getStream
public BlobStore.OptionalOrUnknown<InputStream> getStream(String key) throws IOException
Description copied from interface:BlobStore
Gets the stream of the blob for the given key, if present.Note that this method is best-effort, it may return unknown even though the blob exists in the store, it's just that it's not efficient to return it as a stream.
- Parameters:
key
- the blob key- Returns:
- the blob stream, or empty if the blob cannot be found, or unknown if no stream is efficiently available
- Throws:
IOException
-
readBlob
public boolean readBlob(String key, Path dest) throws IOException
Description copied from interface:BlobStore
Reads a blob based on its key into the given file.- Parameters:
key
- the blob keydest
- the file to use to store the fetched data- Returns:
true
if the file was fetched,false
if the file was not found- Throws:
IOException
-
deleteBlob
public void deleteBlob(String key)
Description copied from interface:BlobStore
Deletes a blob based on a key. No error occurs if the blob does not exist.This method does not throw
IOException
, but may log an error message.- Parameters:
key
- the blob key
-
getBinaryGarbageCollector
public BinaryGarbageCollector getBinaryGarbageCollector()
Description copied from interface:BlobStore
Returns the binary garbage collector (GC).Several calls to this method will return the same GC, so that its status can be monitored using
BinaryGarbageCollector.isInProgress()
.- Returns:
- the binary GC
-
-