You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2021/05/25 07:00:00 UTC

[jira] [Commented] (JAMES-3570) Errors running deduplicated BlobStore on top of OVH (Swift) S3 APIs

    [ https://issues.apache.org/jira/browse/JAMES-3570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17350840#comment-17350840 ] 

Benoit Tellier commented on JAMES-3570:
---------------------------------------

We successfully setted up this approach within our TMail product.

We noticed a nice p99 / mean time reduction upon email creation.

See https://github.com/linagora/tmail-backend/pull/152#issue-650601889 for a bench result.

> Errors running deduplicated BlobStore on top of OVH (Swift) S3 APIs
> -------------------------------------------------------------------
>
>                 Key: JAMES-3570
>                 URL: https://issues.apache.org/jira/browse/JAMES-3570
>             Project: James Server
>          Issue Type: Bug
>          Components: Blob
>    Affects Versions: 3.6.0
>            Reporter: Benoit Tellier
>            Priority: Major
>              Labels: bug
>
> h3. What 
> At Linagora, we deploy our James offer at OVH, which provides a Swift backed S3 API.
> Running the deduplicating blob store on such a setup, we encountered the following errors:
>  - 400 errors with no messages upon PUT
>  - NoSuckKeyExceptions being thrown by the S3 driver
> We noticed these exceptions to be occasionally thrown by the post processing (event bus), for emails with several recipients. Post processing eventually succeeds.
> In addition to unpleasant errors in the log, we wonder if two concurrent APPENDs could not lead to possible data corruption...
> h3. Why
> Swift do not implement strong read/write isolation. We did run the James BlobStore test suite against OVH S3 APIs, and encountered the same errors.
> We thus link these errors to a default of isolation.
> h3. How to fix
> Our strategy so far is to implement https://github.com/apache/james-project/blob/master/src/adr/0015-objectstorage-blobid-list.md, but as part of a Linagora product built on top of James (because the following ADR had been controversial and rejected by a part of the community).
> The idea behind this fix is to leverage Cassandra to avoid, most of the time, to store a blob twice.
> We are not against contributing this mitigation under Apache, but we wish to fix it timely on our side first. Please show interest if we want this to be shared.
> Amongst the alternatives we can consider:
>  - To run on an alternative object storage (Zenko cloud server, used by our test suite for instance, AWS s3). 
>  - To check the object store itself before APPENDs. It does not prevent data races (as the blob might be inserted by another thread between
> the check and the append). Also previous experiments have shown it has a great cost on performance. CF https://github.com/linagora/james-project/pull/2011
>  - To disable deduplication. This allows to effectively delete data (not yet the case for deduplication) but will result in data duplication and 
> thus a storage cost increase. Can be done today via a configuration option...
>  h3. Interaction with other features
> An effort regarding implementing deduplication is currently on pause. BlobId will ship a notion of generation, we never delete blobs of the current generation
> (and of a buffer generation to prevent clock skew), so we never delete blobs that we are appending, so by design the de-duplicated content removal will not 
> interfere with this blobIdList mechanism.
> This blobId list mechanism is scoped to the default bucket not to interfere with the DeletedMessageVault.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org