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

Benoit Tellier commented on JAMES-4209:
---------------------------------------

That extra 50 byte object for each email is a none-sense and puts extra stress 
on the S3 objectstore metadata that is not just made to handle such kind of 
load.

I will present a rework of this mechanism that uses a S3 metadata to add this 
on top of the header blob.

Benefits:
 - Less objects (33% + with dedup)
 - Simpler GC - no need to handle the side car

Here are the constaints:
 - Header are still cached
 - Header should be identifiable from object name
 - No extra object for recovery info

> S3: ability to restore content from solely the object store
> -----------------------------------------------------------
>
>                 Key: JAMES-4209
>                 URL: https://issues.apache.org/jira/browse/JAMES-4209
>             Project: James Server
>          Issue Type: Improvement
>          Components: cassandra, mailbox, s3
>            Reporter: Benoit Tellier
>            Priority: Major
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> h3. Goal
> Recorvery Plan
> GIVEN a major producton incident
> WHEN I loose fully the Cassandra DB and its backup
> THEN I want to be able to retrieve contents from S3 and set them back to users
> Out of scope: folder structure and context (flag)
> Recover point objective
> GIVEN a major producton incident
> WHEN I loose fully the Cassandra DB and need to restore a backup
> THEN I want to be able to retrieve contents from S3 and set them back to 
> users between the time-of backup and time of the incident
> Effectively achieve RPO of 0 for contents, only folder sorting is subject to 
> a loss.
> h3. How
> Optional config in cassandra.properties
> {code:java}
> mailbox.blob.recovery.mode=SYNCHRONOUS|ASYNCHRONOUS|NONE
> {code}
> NONE being the default.
> The idea is to save a side objects recovery/YYY where YYY is the header blob 
> ID. It contains the corresponding body blobId. 
> Using the Delivered-To header It effectively allow rebuild of the message and 
> it allows identifying who it was delivered to.
> Please note that natural generation of the header blob then allow time 
> sorting with a month granularity, allowing finner grain restore.
> Special care about the GC: do not delete the sidecar, but piggy back its 
> deletion on actual content
> h3. The restore script
> Ship it as a binary in server/apps/distributed-app and use what we need from 
> the guice wiring. One could override the main class to actually run it...
> We should be able to restrict to a single generation. 
> We should be able to provide a "since" date
> -----------
> Idea design done with Yann Biez



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to