Hi , I am an intern at Linagora, and I was asked to continue Phillipe Benoit works on James. He did a contribution for a James mailbox using Cassandra as a backend. I already implemented quotas and a group membership resolver using Cassandra.
I also need to implement ACLs. I noticed the use of locks when re - calculating acls for a given mailbox ( in the message manager ). But, as the datastax driver we are using does not support path locking and ACID transactions, I had to find an other way to do it. I finally heard about lightweight transaction. What I decided to do was to add to fields to the mailbox table : one field of binary data ( our serialized ACLs for this mailbox ) and a version number. So when we call setRights ( message manager ) what it should do is to retrieve the ACLs and the associated version number. It then re calculates the ACLs, serialize it, and update it with an increment of the version number only if the version number wasn't changed. As I really don't like copy and paste, I want to re use as much code as I can : - It would be nice to reuse the StoreMessageManager, with just overloading the setRights method to retry a lightweight transaction if it fails (eg : someone changed it ) . But to implement the setRights method I need an access to the mailbox. I need the mailbox parameter of the StoreMessageManager to have protected access rights. - reusing the SimpleMailboxACL seems to be a good idea, but I need to serialize it. I just need that it ( and the classes it contains ) implements the Serializable interface. That's some really simple changes that will prevent me from copying and pasting thousand of lines of code. Thank you very much, Benoit Tellier
signature.asc
Description: OpenPGP digital signature
