[
https://issues.apache.org/jira/browse/JAMES-2809?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tellier Benoit updated JAMES-2809:
----------------------------------
Description:
You will write a BlobStore based DeletedMessageVault implementation where it
has:
- a dedicated component(DeletedMessageMetadataVault) to store metadata in
order to have reasonable searching performance (JAMES-2807)
- the capability of choosing bucket in BlobStore as the proposal JAMES-2806
described
# Append
you also have to implement a related method loadMimeMessage()
{code:java}
class BlobStoreDeletedMessageVault implements DeletedMessageVault {
private final DeletedMessageMetadataVault metadataVault;
private final BlobStore blobStore;
Mono<Void> append(User user, DeletedMessage message, InputStream
mimeMessage) {
BlobId deletedMessageFileName = calculateFileName(message);
blobStore
.store(mimeMessage, deletedMessageFileName,
calculateCurrentBucket());
metadataVault.store(calculateCurrentBucket(), message);
}
Mono<InputStream> loadMimeMessage(User user, MessageId messageId) {
....
}
}
{code}
Pattern for BucketName: `deletedMessages-2019-06-01` where 2019 is the year and
06 the month. 01 is used to later allow smaller bucket definition.
# Searching ontop of DeletedMessageMetadataVault JAMES-2807
- retrieve all available buckets from DeletedMessageMetadataVault
- for each bucket, use retrieve all deleted message metadata of corresponding
user
- filter records match with query criteria
{code:java}
class BlobStoreDeletedMessageVault implements DeletedMessageVault {
private DeletedMessageMetadataVault metadataVault;
Flux<DeletedMessage> search(User user, Query query) {
return metadataVault.listContainers()
.flatMap(containerName -> metadataVault.listMessages(containerName,
user))
.filter(deletedMessage -> matches(deletedMessage, query));
}
}
{code}
was:
You will write a BlobStore based DeletedMessageVault implementation where it
has:
- a dedicated component(DeletedMessageMetadataVault) to store metadata in
order to have reasonable searching performance (JAMES-2807)
- the capability of choosing bucket in BlobStore as the proposal JAMES-2806
described
### Append
you also have to implement a related method loadMimeMessage()
{code:java}
class BlobStoreDeletedMessageVault implements DeletedMessageVault {
private final DeletedMessageMetadataVault metadataVault;
private final BlobStore blobStore;
Mono<Void> append(User user, DeletedMessage message, InputStream
mimeMessage) {
BlobId deletedMessageFileName = calculateFileName(message);
blobStore
.store(mimeMessage, deletedMessageFileName,
calculateCurrentBucket());
metadataVault.store(calculateCurrentBucket(), message);
}
Mono<InputStream> loadMimeMessage(User user, MessageId messageId) {
....
}
}
{code}
Pattern for BucketName: `deletedMessages-2019-06-01` where 2019 is the year and
06 the month. 01 is used to later allow smaller bucket definition.
#Searching ontop of DeletedMessageMetadataVault JAMES-2807
- retrieve all available buckets from DeletedMessageMetadataVault
- for each bucket, use retrieve all deleted message metadata of corresponding
user
- filter records match with query criteria
{code:java}
class BlobStoreDeletedMessageVault implements DeletedMessageVault {
private DeletedMessageMetadataVault metadataVault;
Flux<DeletedMessage> search(User user, Query query) {
return metadataVault.listContainers()
.flatMap(containerName -> metadataVault.listMessages(containerName,
user))
.filter(deletedMessage -> matches(deletedMessage, query));
}
}
{code}
> DeletedMessageVault implementation of append & search (full scan version) on
> top of BlobStore
> ---------------------------------------------------------------------------------------------
>
> Key: JAMES-2809
> URL: https://issues.apache.org/jira/browse/JAMES-2809
> Project: James Server
> Issue Type: Sub-task
> Components: deletedMessageVault
> Reporter: Tellier Benoit
> Priority: Major
>
> You will write a BlobStore based DeletedMessageVault implementation where it
> has:
> - a dedicated component(DeletedMessageMetadataVault) to store metadata in
> order to have reasonable searching performance (JAMES-2807)
> - the capability of choosing bucket in BlobStore as the proposal JAMES-2806
> described
>
> # Append
> you also have to implement a related method loadMimeMessage()
> {code:java}
> class BlobStoreDeletedMessageVault implements DeletedMessageVault {
> private final DeletedMessageMetadataVault metadataVault;
> private final BlobStore blobStore;
> Mono<Void> append(User user, DeletedMessage message, InputStream
> mimeMessage) {
> BlobId deletedMessageFileName = calculateFileName(message);
> blobStore
> .store(mimeMessage, deletedMessageFileName,
> calculateCurrentBucket());
> metadataVault.store(calculateCurrentBucket(), message);
> }
> Mono<InputStream> loadMimeMessage(User user, MessageId messageId) {
> ....
> }
> }
> {code}
> Pattern for BucketName: `deletedMessages-2019-06-01` where 2019 is the year
> and 06 the month. 01 is used to later allow smaller bucket definition.
> # Searching ontop of DeletedMessageMetadataVault JAMES-2807
> - retrieve all available buckets from DeletedMessageMetadataVault
> - for each bucket, use retrieve all deleted message metadata of
> corresponding user
> - filter records match with query criteria
> {code:java}
> class BlobStoreDeletedMessageVault implements DeletedMessageVault {
>
> private DeletedMessageMetadataVault metadataVault;
> Flux<DeletedMessage> search(User user, Query query) {
> return metadataVault.listContainers()
> .flatMap(containerName ->
> metadataVault.listMessages(containerName, user))
> .filter(deletedMessage -> matches(deletedMessage, query));
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]