Hello Jean.

I think we mostly agree.

> features should declare their own logical bucket

Remains a question: where ?

Ideally we can maintain a 1 <-> mapping between logical and s3 bucket: 
alligning the concepts would make things easier I presume.

I would be tempted, given this pre-requisite, to answer the above question by 
"in blob.properties" to keeps things grouped in the configuration.
Also, thinking about migration of the configuration, do we attempt to compute 
the "logical s3 bucket names" from the previous conf format? In which case we 
mostly transfered today complexity? Or shall we just refuse to stop if those 
properties are missing, requiring exxplicit user configuration - safer but it 
puts more weights onto the user...

(sorry for the formatting results below - I presume that's a drawback of eating 
its own dogfood)-- 

Best regards,

Benoit TELLIER

General manager of Linagora VIETNAM.
Product owner for Twake-Mail product.
Chairman of the Apache James project.

Mail: [email protected]
Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)


Le janv. 25, 2026 11:21 AM, de Jean Helou <[email protected]>Hi benoit,

The inlined discussion is becoming hard to read so I'll attempt a summary
below :D

There are 2 different bucket concepts : A logical blobstore bucket and a
physical s3 bucket.
Both concepts currently overlap in the S3 implementation making the code
confusing without extensive analysis. I see this a a barrier to entry for
external contributors.
Each of the BlobStore usecase can require distinct settings both for
physical storage and for deduplication, this is not currently possible for
most use cases because many use cases are stored in a single logical (and
physical) bucket.
It would be beneficial to have separate logical buckets for each use case
and allow custom mapping of each use case to physical bucket storage.

I think we agree that :
- any refactoring should allow to preserve the existing physical storage
structure
- features should declare their own logical bucket, assemble a BlobStore
which uses this bucket, the logical bucket name must be configurable with a
default value. This can be done without refactoring the BlobStoreApi
- changing the deleted message vault structure goes in the right direction.

I'm not as clear as you seem to be about the breadth of the refactoring
required, I'll investigate a POC for the mailrepository-s3 to see if I can
get a better grasp because I don't envision it as a superhero scale
refactoring at the moment so I may be missing something.

Jean


Le ven. 23 janv. 2026 à 20:48, Benoit TELLIER  a
écrit :

&gt; Hello Jean,
&gt; Answer inlined.
&gt; --
&gt;
&gt; Best regards,
&gt;
&gt; Benoit TELLIER
&gt;
&gt; General manager of Linagora VIETNAM.
&gt; Product owner for Twake-Mail product.
&gt; Chairman of the Apache James project.
&gt;
&gt; Mail: [email protected]
&gt; Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)
&gt;
&gt;
&gt; Le janv. 20, 2026 10:48 PM, de Jean Helou Hello,
&gt;
&gt; An interesting discussion which helps me understand better the state of S3
&gt; storage in james
&gt;
&gt; This is the case for
&gt; &gt;
&gt; &gt;  - mailbox  - RabbitMQ mail queue - Cassandra + Postgres mail
&gt; repositories
&gt; &gt;  - Attachments
&gt; &gt; They share the default bucket in order to be deduplicated.
&gt; &gt; This cross-feature dedulication is explicitly desired CF
&gt; &gt;
&gt; 
github.com/apache/james-project/blob/aef61d6fc9655698a8bff1521398ff110388e2d1/server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreTest.java#L113
&gt; &gt;
&gt;
&gt;
&gt; While it is currently implemented this way, I don't think deduplicating
&gt; accross use cases with different storage expectations is such a good idea
&gt; mailqueues are transient storage ( a few days ) while mailboxes are long
&gt; term storage ( until the heat death of the universe if my old gmail is any
&gt; indication )
&gt; mailrepositories I consider transient too but I may be missing use cases. (
&gt; all I can think of is spooling and dead letters/error neither of which I
&gt; would expect to store for more than a few weeksOverall +1
&gt; I would go even further: each of those use case may have distinct settings
&gt; for instance regarding reduplication.
&gt; Deduplication makes sense for mailbox in an enterprise context but not for
&gt; mail queue.
&gt;
&gt; Also there is 6th use case for the DEFAULT BlobStore bucket : the
&gt; mailrepository-blob which we introduced with matthieu starting may 2022
&gt; and  july 2024
&gt;
&gt; &gt; The current choice is either a full s3 bucket per feature or a single 
s3&gt;
&gt; &gt; bucket for all blobstore buckets.&gt; - no blob.properties prefix, 
james
&gt; uses
&gt; &gt; one top level buckets per feature&gt; - blob.properties prefix : james
&gt; stores
&gt; &gt; EVERY blob in a single bucket
&gt; &gt; To be faily honest there's nothing harder to migrate than a S3 naming
&gt; &gt; layout, I'm reluctant to changes affecting it.
&gt; &gt;
&gt;
&gt; The ADR should aim to guide future S3 naming layouts, we can document
&gt; legacy exceptions but ensure our future is brighter.
&gt;
&gt;
&gt; &gt; Furthermore I believe we would be better served being more declarative
&gt; and
&gt; &gt; have each feature explicitly declare its buckets (and object name
&gt; prefix?)
&gt; &gt;
&gt;
&gt; Its S3 bucket or its Blobstore bucket ? ( sorry I'm really asking, this is
&gt; not me being pedantic)You are not, I only have a bad answer: both...
&gt; At the feature level I would like to speak of james blob store bucket.
&gt; And as an ops, if a james bucket is encoded as a S3 bucket I want to
&gt; control and be very explicit about the S3 bucket name.
&gt; Not sure what the object name prefix you mention is : if there is an object
&gt; name prefix wouldn't that defeat deduplication strategies entirely ?
&gt; Do you mean introducing a `objectstorage.objectPrefix` that would somehow
&gt; interact with `objectstorage.namespace` to allow for nesting our BlobStore
&gt; buckets under a single S3 bucket ?
&gt;
&gt; Changing the meaning of blob.properties objectstorage.bucketPrefix (
&gt; &gt;
&gt; 
github.com/apache/james-project/blob/aef61d6fc9655698a8bff1521398ff110388e2d1/server/apps/distributed-app/sample-configuration/blob.properties#L66
&gt; )
&gt; &gt; would create even more confusion on the topic and so adding yet 
another
&gt; &gt; "prefix" concept in this file.
&gt; &gt;
&gt; &gt; I understand operating off 3 buckets might not be ideal but it is 
likely
&gt; &gt; to still be very manageable no?
&gt;
&gt;
&gt; Indeed I was, once again, misled by the naming of the configuration
&gt; parameters and the unexpected hardcoded naming scheme. And it seems
&gt; reviewers were confused enough to let the mailrepository-blob use the
&gt; default bucket too even though it doesn't make much sense either.
&gt;
&gt; There is the "DEFAULT" BlobStore bucket which is named "default" in the
&gt; code thus trying to use a top level s3 bucket name "default" out of the
&gt; box. This mapping can be controlled by using the `objectstorage.namespace`
&gt; property which allows to bind the "DEFAULT" Blobstore bucket to an
&gt; arbitrary S3 bucket name.
&gt;
&gt; There is also an `objectstorage.bucketPrefix` property which has no effect
&gt; whatsoever (if I understand correctly) on the mapping of the "DEFAULT"
&gt; BlobStore bucket but partially controls the names of the remaining
&gt; BlobStore buckets. The `objectstorage.namespace` property has no effect at
&gt; all on these buckets ( which still confuses the hell out of me even as I
&gt; write this message ).
&gt;
&gt; Note that the `objectstorage.bucketPrefix` cannot contain a path separator
&gt; which is not checked until the application blows in your face because the
&gt; S3 connector refuses an invalid bucketname leaving a very confused user
&gt; (yes this happened to me as I couldn't give bucket creation rigths to my
&gt; james user and had to use pre-existing buckets so I tried a lot of things)
&gt;
&gt; We have
&gt; - `jmap-uploads` which is necessarily a top level S3 bucket ( it can only
&gt; be influenced by `objectstorage.bucketPrefix`) I'm not exacly sure what the
&gt; upload-{ww} UploadBucketName is but it seems specific to the cassandra
&gt; implementation and the name of which cannot be configured apart from the
&gt; prefix.
&gt; - deleted-messages-{YYYY-MM} which is necessarily a set of dynamic toplevel
&gt; buckets possibly with a unique prefix to avoid collision but requiring
&gt; elevated application permissions in order to allow creating the buckets
&gt; when the time marker overflows. Which better explains the current PR
&gt;
&gt; I'm not familiar with JMAP uploads so I can only make a guess as to what a
&gt; proper storage policy would be:  the appended week number suggests that the
&gt; objects are rather long lived. In the context of email, the name and long
&gt; lived object interrogates as to why we wouldn't want them deduplicated
&gt; with, let's say,  Attachments as a guess.  Something which is effectively
&gt; impossible today since we can't configure physical bucket storage per
&gt; BlobStoreBucket use case.
&gt;
&gt; So indeed, today,  james has 3 S3 buckets mapped to 3 BlobStore buckets
&gt; including the DEFAULT BlobStore bucket which is used by 6 different
&gt; usecases.
&gt; I haven't checked if there is additional namespacing in the form of virtual
&gt; folders to try and avoid collisions between the use cases. I know
&gt; mailrepository-blob uses the mailrepository paths as virtual folders but
&gt; they are created at the toplevel of the bucket so listing my server's
&gt; bucket toplevel I see /var/mail/error which is not so great in hindsight (
&gt; I should probably have prepended a `/mailrepositories` prefix to get
&gt; `/mailrepositories/var/mail/error` in order to properly namespace the
&gt; feature within the bucket )
&gt;
&gt; I have spent too long with security engineers lately and I can't help
&gt; wonder how this could be subverted to gain unauthorized access or to let an
&gt; attacked destroy data it shouldn't be able to access.
&gt;
&gt;
&gt; A path forward could be to :
&gt; - Stop binding to BlobStore.DEFAULT_BUCKET_NAME_QUALIFIER all over the
&gt; place and use configuration from each feature tell us what the desired
&gt; bucket name should be ( using "default" as default value to maintain
&gt; retrocompatibility ) so the guice bindings would target a
&gt; MAILREPOSITORY_BUCKET_NAME_QUALIFIER and a
&gt; DELETED_MESSAGE_VAULT_BUCKET_NAME_QUALIFIER and put the actual name there,
&gt; ready to be overriden by configuration instead of being hardcoded in the
&gt; features.
&gt; - Implement activable feature based namespacing beyond the S3 bucket name
&gt; so each feature can be mixed or isolated through configuration properties
&gt; allowing to retain the existing "everything in a single basket" mashup but
&gt; opening the door to better isolationOverall +1
&gt; Let me sum it up to see if I understand well: - the common building block
&gt; is to be the blob store DAO - blob store (eventually) no longer needs
&gt; bucket as an API parameter - each feature needs to assemble it's blob store
&gt; (bucket, deduplication, eventually caching, etc...) based on its own
&gt; configuration.
&gt;
&gt; I'm not saying this should all be done in the initial deleted message vaul
&gt; PRIf it's deemed a useful improvement for the blob store meta-problem,
&gt; let's move this forward.
&gt;
&gt;  &gt; but it could become the conclusion of the ADR and provide a
&gt; refactoringguide. As long as the configuration allows to keep using the
&gt; existing S3
&gt; naming scheme ( both bucket names and paths ) the nightmare of migrating an
&gt; S3 naming layout would remain nicely mitigated in the closet.+1 refactor
&gt; and reorganize code but keep on-disk structure.
&gt;
&gt; What do you think ?Like a boiling frog. This seems like a lot of work for
&gt; unwanted complexity we (linagora at least) succeed to live with. I feel
&gt; more concerned with the operational pain (bucket count time bomb over my
&gt; head) than the logical pain I did get used to.On a personal note I can live
&gt; with this code  complexity on the very long term. Maybe the massive code
&gt; changes are unneeded, and we could simplify this for our users by:1.
&gt; Killing the deleted message vault bucket as proposed here 2. Having the few
&gt; feature declare bucket they use. And don't attempt a likely to fail
&gt; superhero refactoring.
&gt; Have a good weekend,
&gt; Benoit
&gt;
&gt; regards,
&gt; Jean
&gt;
&gt;
&gt; &gt; Le janv. 19, 2026 12:16 PM, de Jean Helou To sum up
&gt; &gt; what my take of the discussions so far :
&gt; &gt;
&gt; &gt; On the specific case of the deleted message vault, the proposed
&gt; &gt; implementation :
&gt; &gt;
&gt; &gt; Introduce a logical bucket (Blobstore) prefix to the time based
&gt; structure.
&gt; &gt; this allows storing all deleted messages in a single S3 bucket or
&gt; combined
&gt; &gt; with the underlying S3 prefix capability having a single toplevel
&gt; &gt; "directory" for all these messages. All new messages will be written 
to
&gt; the
&gt; &gt; new structure, both the new and old addressing schemes will be 
readable.
&gt; &gt; The old addressing scheme will be announced as deprecated but 
maintained
&gt; &gt; for 5 years ( ~ about 3 or 4 major releases ?) ensuring every user who
&gt; &gt; updates on a reasonable timescale will have a proper upgrade.
&gt; &gt; The name of the logical blobstore bucket will be configurable, 
enabling
&gt; &gt; users who don't use an S3 prefix to use the bucket of their choice for
&gt; this
&gt; &gt; use case.
&gt; &gt;
&gt; &gt; I agree this is better than the current implementation and vote in 
favor(
&gt; &gt; +1 ).
&gt; &gt; I think we should add comments to the fallkback specific code to flag 
the
&gt; &gt; expected date of removal in the code, I for one guarantee that I will
&gt; &gt; forget about it within such a long time span.
&gt; &gt;
&gt; &gt; With regards to the ADR : as it is currently worded I stil vote 
against.
&gt; &gt; (-1) since the vote was initiated on both topics my compound vote 
must be
&gt; &gt; -1 at least as it is worded today,
&gt; &gt; My position is that :
&gt; &gt; - blobstore bucket and s3 bucket should not be conflated
&gt; &gt; - each feature should use a unique blobstore bucket
&gt; &gt; - how blobstore buckets are stored in s3 buckets should be 
configurable
&gt; &gt;
&gt; &gt; I argue that some features share similar storage 
properties/requirement
&gt; and
&gt; &gt; could live in a single s3 bucket with a storage class policy while 
other
&gt; &gt; features require different storage properties/requirements and could 
live
&gt; &gt; in different s3 bucket (s) with their own different storage class 
policy,
&gt; &gt; if we are going to have an ADR about bucket usage we should not ignore
&gt; &gt; future features. while the fixed set of 3 buckets may be acceptable
&gt; today,
&gt; &gt; do we really want to force users to configure 10 different buckets in 
the
&gt; &gt; future.
&gt; &gt;
&gt; &gt; The current choice is either a full s3 bucket per feature or a single 
s3
&gt; &gt; bucket for all blobstore buckets.
&gt; &gt; - no blob.properties prefix, james uses one top level buckets per 
feature
&gt; &gt; - blob.properties prefix : james stores EVERY blob in a single bucket
&gt; &gt;
&gt; &gt; My proposal is to move forward with the implemetation of the deleted
&gt; &gt; message vault but reboot the ADR discussion.
&gt; &gt;
&gt; &gt; Jean
&gt; &gt;
&gt; &gt;
&gt; &gt; Le ven. 16 janv. 2026 à 09:14, Rene Cordier  a
&gt; écrit
&gt; &gt; :
&gt; &gt;
&gt; &gt; &gt; Hello,
&gt; &gt; &gt;
&gt; &gt; &gt; Overall +1 on my side.
&gt; &gt; &gt;
&gt; &gt; &gt; Regarding the second topic, to add a few more details: 
technically the
&gt; &gt; &gt; blobstore deleted message vault does not change much in the end. 
There
&gt; &gt; &gt; was no new V2 implementation in the end (maybe likely should 
update the
&gt; &gt; &gt; ADR regarding this point). We identified that we could go 
forward in
&gt; the
&gt; &gt; &gt; current vault code to add those modifications:
&gt; &gt; &gt;
&gt; &gt; &gt; - append is new, but we just write into the new single bucket so 
it
&gt; does
&gt; &gt; &gt; not collide with the current version. We keep the old code 
around just
&gt; &gt; &gt; for testing (put the tag for it) the fallback, but it's not used
&gt; anymore
&gt; &gt; &gt; outside of tests.
&gt; &gt; &gt;
&gt; &gt; &gt; - read and delete: the code does not change! as we do not change 
the
&gt; &gt; &gt; underlying design with metadatas, it actually works for old 
buckets and
&gt; &gt; &gt; the new single one without code mifications there.
&gt; &gt; &gt;
&gt; &gt; &gt; - purge task: that's where there is an old code / new code mixed
&gt; &gt; &gt; together. I did put a deprecated tag on the concerned old part. 
If we
&gt; &gt; &gt; remove it in +2 releases for example that should be alright? Or 
even
&gt; &gt; &gt; more. Honestly the fallback ain't too bad here. If you don't 
have old
&gt; &gt; &gt; buckets the old purge code part will just do nothing!
&gt; &gt; &gt;
&gt; &gt; &gt; Hope this helps clarify some points :)
&gt; &gt; &gt;
&gt; &gt; &gt; Regards,
&gt; &gt; &gt;
&gt; &gt; &gt; Rene.
&gt; &gt; &gt;
&gt; &gt; &gt; On 1/15/26 22:59, Benoit TELLIER wrote:
&gt; &gt; &gt; &gt; Hello Jean
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Topic 1:
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; I think an ADR structure rework discussion was started on 
the mailing
&gt; &gt; &gt; list already.
&gt; &gt; &gt; &gt; Regarding this very example:
&gt; &gt; &gt; &gt;   - The principal of operating off a smal number of fixed 
buckets is
&gt; &gt; &gt; likely an architecture decision.
&gt; &gt; &gt; &gt;     Worth recording in an ADR. It could decide to define an
&gt; &gt; architecture
&gt; &gt; &gt; principle.
&gt; &gt; &gt; &gt;     Then in the *context* we could list offending features 
and
&gt; plugins
&gt; &gt; &gt; and *consequences* list needed refactorings.
&gt; &gt; &gt; &gt;   - Having an ADR presenting why we have a plugin to fix a 
generic
&gt; &gt; &gt; problem in the email world seems like a reasonnable choice to 
me. I
&gt; often
&gt; &gt; &gt; end up, in architecture discussions (and no later than 
yesterday!) to
&gt; get
&gt; &gt; &gt; discussion on this topic. Hence it feels justified to get a track
&gt; record.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Also this seems dangerous to me to say "not relevant, 
that's a
&gt; plugin"
&gt; &gt; &gt; as everything (the mailbox, the event-bus, etc) is somehow a 
plugin
&gt; with
&gt; &gt; &gt; guice binding and concern specific implementations and not 
others.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Topic 2: Answers inlined.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; --
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Best regards,
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Benoit TELLIER
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; General manager of Linagora VIETNAM.
&gt; &gt; &gt; &gt; Product owner for Twake-Mail product.
&gt; &gt; &gt; &gt; Chairman of the Apache James project.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Mail: [email protected]
&gt; &gt; &gt; &gt; Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Le janv. 15, 2026 4:13 PM, de Jean Helou Since
&gt; you
&gt; &gt; &gt; called a formal vote I must vote -1 I may change my vote after
&gt; &gt; &gt; &gt; the discussion has taken place.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; 2 topics on which I would like to see some discussion 
before voting :
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Topic 1 Why an ADR for an implementation detail in a plugin 
?
&gt; &gt; &gt; &gt; Maybe I'm just too new to james and/or need a refresher in 
what james
&gt; &gt; &gt; &gt; considers and architectural decision.
&gt; &gt; &gt; &gt; It feels to me that this should be part of the README for 
the
&gt; plugin. I
&gt; &gt; &gt; see
&gt; &gt; &gt; &gt; that introducing the feature (the deleted message store) 
was also
&gt; done
&gt; &gt; &gt; &gt; through an ADR which seems a bit suprising to me.
&gt; &gt; &gt; &gt; I dont disagree on the content of the files themselves 
(thought the
&gt; ADR
&gt; &gt; &gt; &gt; formalism is a bit weird for a README), it just doesn't 
match with my
&gt; &gt; &gt; &gt; understanding of what ADRs are.
&gt; &gt; &gt; &gt; I personnally would prefer to merge the content of both 
files in a
&gt; &gt; README
&gt; &gt; &gt; &gt; file on the plugin itself (to document the why and the 
implementation
&gt; &gt; &gt; &gt; details of the plugin) and list the plugin out somewhere in 
the
&gt; &gt; &gt; &gt; documentation ( it probably already is) to let people know 
the
&gt; feature
&gt; &gt; &gt; &gt; exist and where to find details about it.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; On the plugin evolution itself
&gt; &gt; &gt; &gt; The currenty behaviour is to create a full s3 bucket 
following the
&gt; &gt; &gt; pattern
&gt; &gt; &gt; &gt; `deleted-messages-[year]-[month]-01` (it is unclear to me 
what the 01
&gt; &gt; &gt; &gt; represents, is it the day ?)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Means first day of the month and was adopted to get 
something that
&gt; &gt; looks
&gt; &gt; &gt; like a date if I recall well/
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; According to the change proposed in the "ADR", the plugin 
would now
&gt; &gt; store
&gt; &gt; &gt; &gt; the same contents under a virtual path within a single 
bucker `
&gt; &gt; &gt; &gt; [year]/[month]/[blob_id]`
&gt; &gt; &gt; &gt; The proposed migration strategy is :
&gt; &gt; &gt; &gt; - - write only on the single bucket, fall back if necessary 
on old
&gt; &gt; &gt; buckets
&gt; &gt; &gt; &gt; for read and delete
&gt; &gt; &gt; &gt; - - add the single bucket usage case to the purge task, 
that would do
&gt; &gt; &gt; &gt; cleaning on both new and old buckets.
&gt; &gt; &gt; &gt; I think we should work out right now for how long we intend 
to
&gt; maintain
&gt; &gt; &gt; the
&gt; &gt; &gt; &gt; fallback and old behaviour in the clean task
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; +1 typical retention is 1 year so going for 2 years seems 
reasonable.
&gt; &gt; &gt; Likely a bit more to further ease the upgrade path.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Probably also clearly communicate (changelog comes to mind) 
on the
&gt; &gt; &gt; &gt; deprecation of the old behaviour so we can eventually 
remove both the
&gt; &gt; &gt; &gt; fallback and the cleaning task.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; +1
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; However this has consequences on users ugrade path. As 
proposed they
&gt; &gt; will
&gt; &gt; &gt; &gt; have to install a version which has both the new behaviour 
and the
&gt; &gt; &gt; fallback
&gt; &gt; &gt; &gt; for at least the retention period of all the deleted 
messages in
&gt; their
&gt; &gt; &gt; &gt; system.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Would you consider providing a migration tool that allows 
them to
&gt; move
&gt; &gt; &gt; &gt; their deleted messages to the new scheme and fast forward 
on the
&gt; &gt; &gt; versions ?
&gt; &gt; &gt; &gt; (maybe even skip as each versions embarks all the 
migrations from the
&gt; &gt; &gt; &gt; previous versions IIRC)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; To be fair given it's simplicity I'd rather support the 
fallback 5
&gt; &gt; years
&gt; &gt; &gt; rather than moving blobs around. Personal taste.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; I was away from home and had a small car crash so I didn't 
have time
&gt; to
&gt; &gt; &gt; &gt; look into 2902 yet. I had a quick look while writing this 
message
&gt; and I
&gt; &gt; &gt; was
&gt; &gt; &gt; &gt; suprised to see an API change that affects the cassandra
&gt; implementation
&gt; &gt; &gt; and
&gt; &gt; &gt; &gt; introduces something similar to a blobid factory (and used 
as such)
&gt; but
&gt; &gt; &gt; &gt; with a different type. I left a comment to that effect and 
will
&gt; &gt; continue
&gt; &gt; &gt; &gt; the review (probably tomorrow or during the weekend)
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; I saw it and I will craft something around it, it seems 
like a
&gt; relevant
&gt; &gt; &gt; remark.
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; jean
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt; Le jeu. 15 janv. 2026 à 14:23, Benoit TELLIER  &gt;
&gt; &gt; a
&gt; &gt; &gt; &gt; écrit :
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;&gt; Hi all,
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; I would like to call a vote on the following change:
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;   - github.com/apache/james-project/pull/2894 ADR: 
Deleted message
&gt; &gt; &gt; &gt;&gt; vault single bucket usage
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;   - github.com/apache/james-project/pull/2902 which is 
the
&gt; &gt; &gt; &gt;&gt; implementation of the aforementioned ADR
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; The use of monthly buckets is problematic with certain 
S3 suppliers
&gt; &gt; that
&gt; &gt; &gt; &gt;&gt; limit their count, and require extensive rights onto 
the object
&gt; store
&gt; &gt; &gt; &gt;&gt; endpoints.
&gt; &gt; &gt; &gt;&gt; The proposal would address solely this problematic 
feature and not
&gt; &gt; &gt; attempt
&gt; &gt; &gt; &gt;&gt; to refactor in depth the way James' bucket are encoded 
onto the S3
&gt; &gt; &gt; endpoint.
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; (More context is provided onto the relevant ADR)
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; This vote is open for at least 72 hours and requires a 
simple
&gt; &gt; majority.
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; Please vote:
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;   - +1 approve
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;   - 0 no opinion
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;   - -1 disapprove (please explain)
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; Thanks,
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; --
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; Best regards,
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; Benoit TELLIER
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; General manager of Linagora VIETNAM.
&gt; &gt; &gt; &gt;&gt; Product owner for Twake-Mail product.
&gt; &gt; &gt; &gt;&gt; Chairman of the Apache James project.
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt; Mail: [email protected]
&gt; &gt; &gt; &gt;&gt; Tel: (0033) 6 77 26 04 58 (WhatsApp, Signal)
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;&gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; 
---------------------------------------------------------------------
&gt; &gt; &gt; To unsubscribe, e-mail: [email protected]
&gt; &gt; &gt; For additional commands, e-mail: [email protected]
&gt; &gt; &gt;
&gt; &gt; &gt;
&gt; &gt;
&gt;
&gt;

Reply via email to