Class S3BlobStore
- All Implemented Interfaces:
BlobStore
- Since:
- 11.1
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassGarbage collector for S3 binaries that stores the marked (in use) binaries in memory.Nested classes/interfaces inherited from interface org.nuxeo.ecm.core.blob.BlobStore
BlobStore.OptionalOrUnknown<T> -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanprotected final com.amazonaws.services.s3.AmazonS3protected final Stringprotected final Stringprotected final S3BlobStoreConfigurationprotected final BinaryGarbageCollectorprotected final booleanprotected final PathStrategyprotected Booleanprotected static final Stringprotected final booleanIf true, include the object version in the key.Fields inherited from class org.nuxeo.ecm.core.blob.AbstractBlobStore
blobProviderId, BYTE_RANGE_SEP, keyStrategy, name -
Constructor Summary
ConstructorsConstructorDescriptionS3BlobStore(String blobProviderId, String name, S3BlobStoreConfiguration config, KeyStrategy keyStrategy) S3BlobStore(String name, S3BlobStoreConfiguration config, KeyStrategy keyStrategy) Deprecated.since 11.5 -
Method Summary
Modifier and TypeMethodDescriptionprotected Stringprotected booleanbucketKeyExists(String bucketKey) protected booleanbucketKeyHasDefaultStorageClass(String bucketKey) voidclear()INTERNAL (TESTS).protected booleancopyBlob(String key, S3BlobStore sourceBlobStore, String sourceKey, boolean move) Deprecated.since 11.5, usecopyOrMoveBlob(String, S3BlobStore, String, boolean)insteadprotected voidcopyBlob(S3BlobStoreConfiguration sourceConfig, String sourceKey, S3BlobStoreConfiguration destinationConfig, String destinationKey, boolean move) Deprecated.protected booleancopyBlobGeneric(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) Deprecated.since 11.5, usecopyOrMoveBlobGeneric(String, BlobStore, String, boolean)insteadbooleancopyBlobIsOptimized(BlobStore sourceStore) Checks if blob copy/move from another blob store to this one can be done efficiently.protected StringcopyOrMoveBlob(String key, S3BlobStore sourceBlobStore, String sourceKey, boolean move) copyOrMoveBlob(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) Writes a file based on a key, as an optimized copy/move from a source in another compatible blob store.protected StringcopyOrMoveBlob(S3BlobStoreConfiguration sourceConfig, String sourceKey, String sourceVersionId, S3BlobStoreConfiguration destinationConfig, String destinationKey, boolean move) Returns the version id, ornull.protected StringcopyOrMoveBlobGeneric(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) voiddeleteBlob(String key) Deletes a blob based on a key.booleanDoes a blob with the given key exist in the blob store.Returns the binary garbage collector (GC).Gets an already-existing file containing the blob for the given key, if present.protected StringgetMD5DigestFromETag(String bucketKey) Gets the MD5 of an object from its ETag, if possible.Gets the stream of the blob for the given key, if present.booleanDoes a blob with the given key exist in the blob store with the default storage class.booleanWhether this blob store has versioning.protected booleanprotected static booleanisMissingKey(com.amazonaws.AmazonServiceException e) protected static booleanisNotImplemented(com.amazonaws.AmazonServiceException e) protected longlengthOfBlob(String key) booleanReads a blob based on its key into the given file.protected voidsetMetadata(com.amazonaws.services.s3.model.ObjectMetadata objectMetadata, BlobContext blobContext) protected booleanChecks that all repositories support queries on blob keys.protected booleansupportsAsyncDigest(Repository repository) booleanWhether this blob store is configured for async digest computation.protected StringwriteBlobGeneric(BlobWriteContext blobWriteContext) Writes the blob without using any store-to-store optimization.voidwriteBlobProperties(BlobUpdateContext blobUpdateContext) Sets properties on a blob.protected StringwriteFile(String key, Path file, BlobContext blobContext, String fileTraceSource) Writes a file with the given key and returns its version id.Methods inherited from class org.nuxeo.ecm.core.blob.AbstractBlobStore
deleteBlob, getBlobKeyReplacement, getByteRangeFromKey, getKeyStrategy, getName, logTrace, logTrace, logTrace, notifyAsyncDigest, randomLong, randomString, setByteRangeInKey, stripBlobKeyPrefix, stripBlobKeyVersionSuffix, transfer, transfer, transfer, unwrap, writeBlob, writeBlob, writeBlobUsingOptimizedCopy
-
Field Details
-
USER_METADATA_USERNAME
- See Also:
-
config
-
amazonS3
protected final com.amazonaws.services.s3.AmazonS3 amazonS3 -
bucketName
-
bucketPrefix
-
pathStrategy
-
pathSeparatorIsBackslash
protected final boolean pathSeparatorIsBackslash -
allowByteRange
protected final boolean allowByteRange -
useVersion
protected final boolean useVersionIf true, include the object version in the key. -
useAsyncDigest
-
gc
-
-
Constructor Details
-
S3BlobStore
@Deprecated public S3BlobStore(String name, S3BlobStoreConfiguration config, KeyStrategy keyStrategy) Deprecated.since 11.5 -
S3BlobStore
public S3BlobStore(String blobProviderId, String name, S3BlobStoreConfiguration config, KeyStrategy keyStrategy) - Since:
- 11.5
-
-
Method Details
-
getS3BinaryManager
-
isMissingKey
protected static boolean isMissingKey(com.amazonaws.AmazonServiceException e) -
isNotImplemented
protected static boolean isNotImplemented(com.amazonaws.AmazonServiceException e) -
isBucketVersioningEnabled
protected boolean isBucketVersioningEnabled() -
hasVersioning
public boolean hasVersioning()Description copied from interface:BlobStoreWhether 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:
hasVersioningin interfaceBlobStore- Overrides:
hasVersioningin classAbstractBlobStore
-
useAsyncDigest
public boolean useAsyncDigest()Description copied from class:AbstractBlobStoreWhether this blob store is configured for async digest computation.- Overrides:
useAsyncDigestin classAbstractBlobStore
-
supportsAsyncDigest
protected boolean supportsAsyncDigest()Checks that all repositories support queries on blob keys. -
supportsAsyncDigest
-
bucketKey
-
writeBlobGeneric
Description copied from class:AbstractBlobStoreWrites the blob without using any store-to-store optimization.- Overrides:
writeBlobGenericin classAbstractBlobStore- Throws:
IOException
-
writeFile
protected String writeFile(String key, Path file, BlobContext blobContext, String fileTraceSource) throws IOException Writes a file with the given key and returns its version id.- Throws:
IOException
-
setMetadata
protected void setMetadata(com.amazonaws.services.s3.model.ObjectMetadata objectMetadata, BlobContext blobContext) -
getFile
Description copied from interface:BlobStoreGets 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
Description copied from interface:BlobStoreGets 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
-
exists
Description copied from interface:BlobStoreDoes a blob with the given key exist in the blob store.The existence of the blob is checked in the store where the blob is effectively stored. Intermediate cache is ignored.
- Parameters:
key- the blob key- Returns:
- true if it exists in the blob store
-
hasDefaultStorageClass
Description copied from interface:BlobStoreDoes a blob with the given key exist in the blob store with the default storage class.The existence of the blob is checked in the store where the blob is effectively stored. Intermediate cache is ignored. A blob with a cold storage storage class is not in default storage class and this method will return false for such a blob.
- Parameters:
key- the blob key- Returns:
- true if it exists in the blob store and has the default storage class
-
bucketKeyHasDefaultStorageClass
-
bucketKeyExists
-
lengthOfBlob
- Returns:
- object length, or -1 if missing
-
clear
public void clear()Description copied from interface:BlobStoreINTERNAL (TESTS). Clears the blob store of all its data. -
readBlob
Description copied from interface:BlobStoreReads 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:
trueif the file was fetched,falseif the file was not found- Throws:
IOException
-
copyBlobIsOptimized
Description copied from interface:BlobStoreChecks if blob copy/move from another blob store to this one can be done efficiently.- Specified by:
copyBlobIsOptimizedin interfaceBlobStore- Overrides:
copyBlobIsOptimizedin classAbstractBlobStore- Parameters:
sourceStore- the source store- Returns:
trueif the copy/move can be done efficiently
-
copyOrMoveBlob
public String copyOrMoveBlob(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) throws IOException Description copied from interface:BlobStoreWrites a file based on a key, as an optimized copy/move from a source in another compatible blob store.The target
keymay benull, which is a signal from the caller that it has determined that deduplication is enabled and async digest computation is enabled, but the needed digest hasn't been computed, so this method should either find the digest in an efficient way if it can, or otherwise trigger an async digest computation.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.
The returned key may be different than the passed one when versioning is used.
- Parameters:
key- the key; ornullif the store should choose it or trigger async digest computationsourceStore- the source storesourceKey- the source keyatomicMove-truefor an atomic move,falsefor a regular copy- Returns:
- the key of the copied/moved file, or
nullif copy/move failed - Throws:
IOException
-
copyBlob
@Deprecated protected boolean copyBlob(String key, S3BlobStore sourceBlobStore, String sourceKey, boolean move) throws com.amazonaws.AmazonServiceException Deprecated.since 11.5, usecopyOrMoveBlob(String, S3BlobStore, String, boolean)instead- Throws:
com.amazonaws.AmazonServiceException
-
copyOrMoveBlob
protected String copyOrMoveBlob(String key, S3BlobStore sourceBlobStore, String sourceKey, boolean move) throws com.amazonaws.AmazonServiceException - Returns:
nullif generic copy is needed- Throws:
com.amazonaws.AmazonServiceException- if the source is missing
-
getMD5DigestFromETag
Gets the MD5 of an object from its ETag, if possible.- Since:
- 11.5
-
copyBlob
@Deprecated protected void copyBlob(S3BlobStoreConfiguration sourceConfig, String sourceKey, S3BlobStoreConfiguration destinationConfig, String destinationKey, boolean move) Deprecated. -
copyOrMoveBlob
protected String copyOrMoveBlob(S3BlobStoreConfiguration sourceConfig, String sourceKey, String sourceVersionId, S3BlobStoreConfiguration destinationConfig, String destinationKey, boolean move) Returns the version id, ornull. -
copyBlobGeneric
@Deprecated protected boolean copyBlobGeneric(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) throws IOException Deprecated.since 11.5, usecopyOrMoveBlobGeneric(String, BlobStore, String, boolean)instead- Throws:
IOException
-
copyOrMoveBlobGeneric
protected String copyOrMoveBlobGeneric(String key, BlobStore sourceStore, String sourceKey, boolean atomicMove) throws IOException - Throws:
IOException
-
writeBlobProperties
Description copied from interface:BlobStoreSets properties on a blob.- Specified by:
writeBlobPropertiesin interfaceBlobStore- Overrides:
writeBlobPropertiesin classAbstractBlobStore- Parameters:
blobUpdateContext- the blob update context- Throws:
IOException
-
deleteBlob
Description copied from interface:BlobStoreDeletes 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
Description copied from interface:BlobStoreReturns 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
-