Re: MESSAGE quota resource implemention

2011-09-12 Thread Julien Coloos

Le 09/09/2011 14:18, Greg Banks a écrit :

Ok, here you go. Not completely tested yet, so caveat emptor.


Had to change two things:
 - mailbox_quota_check now expects a quota diff array which is good :), 
but change is now really applied if all diffs are ' 0' (instead of '= 
0' previously); in some cases '0' is used to check that mailbox is not 
currently overquota (e.g. in LMTP service), so either we should go back 
to testing '= 0', or change callers that did rely on that test
 - changing the value of annotations quota storage in the index 
(mailbox_use_annot_quota function) do dirty the quota, but not the 
index; the new value is thus not committed (at least when setting 
mailbox annotations), and the quota entry becomes false when later 
deleting the mailbox


If needed, you can look in our 'cyrus-imapd' repository at the 
'gnb/annotate/fixes' branch. There is one commit for those matters.



Remaining things concerning annotations:
 - when deleting messages, annotations length is not substracted; the 
solution may not be that simple, since I believe users are allowed to 
unexpunge mails: so since index entry is still here - until real 
unlinking -, annotations may have to stay there too - until unlinking too
 - for 'old' mailboxes (those created before the annotation storage 
usage field in the index header), current annotations usage shall be 
computed (and added to the quota entry) upon upgrading; this way users 
won't have to run 'quota -f' for all quotaroots after switching to this 
new version ;)



Then maybe some of the cassandane tests I pushed on our repository would
need to be refreshed (at least the one that checks what happens for
legacy mailboxes on which we add one of the newly handled quota resources).

That's next week's focus I think.
Actually I just gave up the 'old' test: there is no easy way to simulate 
upgrading mailbox index, or at least I don't feel confident enough to 
make it in cassandane :(
Other tests do work. Once the annotations usage is subtracted upon 
messages deletion (see before), all tests shall pass :)


I rebased the 'quotamessage/gnb/annotate' branch of our 'cassandane' 
repository today, leaving that test aside.



Regards
Julien


Re: MESSAGE quota resource implemention

2011-09-12 Thread Bron Gondwana
On Mon, Sep 12, 2011 at 04:46:52PM +0200, Julien Coloos wrote:
 Le 09/09/2011 14:18, Greg Banks a écrit :
 Ok, here you go. Not completely tested yet, so caveat emptor.
 Remaining things concerning annotations:
  - when deleting messages, annotations length is not substracted;
 the solution may not be that simple, since I believe users are
 allowed to unexpunge mails: so since index entry is still here -
 until real unlinking -, annotations may have to stay there too -
 until unlinking too

When they unexpunge, you add it back.  The decision to have
delayed expunge and WHEN to expunge is a server administrator
decision that's outside the control of the user.

With storage, we subtract the usage when we mark the record
expunged.  Annotation length should be handled the same way.
This will have to be done when the message gets expunged,
by finding the size of the annotations and subtracting that
also.

  - for 'old' mailboxes (those created before the annotation storage
 usage field in the index header), current annotations usage shall be
 computed (and added to the quota entry) upon upgrading; this way
 users won't have to run 'quota -f' for all quotaroots after
 switching to this new version ;)

Definitely.  Upgrading usually handles things like that.  It's
the right way[tm].

 Actually I just gave up the 'old' test: there is no easy way to
 simulate upgrading mailbox index, or at least I don't feel confident
 enough to make it in cassandane :(

Easiest way is the same way I did for the broken quotas test.
Have a tar file with the contents of the old mailbox which
you unpack onto the filesystem, and then open the mailbox and
check that the upgraded fields are what you would expect.

I also did something similar for the crash on thread test,
where there were 5 messages which were known to be able to
crash the THREAD command.  I unpacked the folder contents
with those messages in a test.

Regards,

Bron.