[ https://issues.apache.org/jira/browse/JAMES-2809?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tellier Benoit resolved JAMES-2809. ----------------------------------- Resolution: Fixed Fix Version/s: 3.5.0 > 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 > Fix For: 3.5.0 > > > 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: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org